我正在考虑将一些敏感数据存储在我正在处理的应用程序中。我一直在关注微软提供的ProtectedData
类,看起来非常简单。但是,我对它是如何工作有几个问题。
首先,我看到它使用“用户的登录凭据”来生成加密密钥。我在文档中看到只有当前用户才能解密数据。这不是问题,我只是想知道同一个用户是否在另一台机器上登录,他们是否能够解密数据?我计划通过OneDrive共享保存的信息,因此希望它可以在同一用户使用的任何设备上访问。
例如:
User A logs in on desktop computer, saves encrypted file abc.txt
User A then logs in on tablet, loads file abc.txt
平板电脑上的用户A 可以访问abc.txt
吗?
其次,用户更改密码后会发生什么?在我看来,加密密钥会有所不同,并且不会导致使用先前加密密钥的数据的解密不再可恢复?
例如:
User A logs in on desktop computer, saves encrypted file abc.txt
User A changes password
User A logs in on desktop computer, loads file abc.txt
用户A 是否可以访问{{1}?
答案 0 :(得分:4)
平板电脑上的用户A可以访问abc.txt吗?
"要使DPAPI在使用漫游配置文件时正常工作,域用户必须这样做 只能登录到域中的一台计算机。如果用户想要 登录到域中的其他计算机,用户必须注销 用户登录到第二台计算机之前的第一台计算机。如果 用户同时登录到多台计算机,很可能就是这样 DPAPI将无法正确解密现有的加密数据。" - http://support.microsoft.com/kb/309408
用户A是否可以访问abc.txt了? 在一台计算机上,更改密码后,用户仍应能够访问以前加密的文件。我的理解是先前生成的密钥仍然存储在列表中以允许这样做。 (每次用户更改密码时,必须对所有先前存储的数据进行解密和重新加密将是一项昂贵的操作,因此他们只需保留旧密钥。)
但是,有一些管理工具可以让您以一种可能会破坏密码的方式更改密码。
我不知道在机器A上更改密码会对机器B造成影响。我会假设漫游配置文件会正确处理这个问题,但这可能是一个无效的假设。
我不会在DPAPI中存储数据,这些数据在没有备份的情况下是至关重要的。当然,这会引入其他与安全相关的复杂性,具体取决于数据的灵敏度。
答案 1 :(得分:3)
Data Protection API(DPAPI)可与roaming profiles一起正常运行。因此,这将涵盖用户可以通过网络解密数据的事实。使用IsolationStorage用于存储适用于多个应用程序的数据,并且不依赖于任何特定应用程序,例如用户的名称或许可证信息。
创建隔离漫游存储的示例:
using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Domain | IsolatedStorageScope.Assembly, null, null))
{
isoStore.CreateDirectory("TopLevelDirectory");
isoStore.CreateFile("abc.txt");
}
获取隔离漫游存储的示例:
IsolatedStorageFile isoFile =
IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
IsolatedStorageScope.Assembly |
IsolatedStorageScope.Roaming, null, null);