ProtectedData 可以在多台计算机上工作吗?

Does ProtectedData work on multiple computers?

我正在考虑在我正在处理的应用程序中存储一些敏感数据。我一直在看微软提供的 ProtectedData class ,看起来很简单。但是,我有几个关于它如何工作的问题。

首先,我看到它使用 "the user's login credentials" 生成加密密钥。我在文档中看到只有当前用户才能解密数据。这不是问题,我只是想知道如果同一个用户在不同的机器上登录,他们是否能够解密数据?我计划通过 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 是否可以访问 abc.txt??

用户 A 在平板电脑上是否可以访问 abc.txt?

“要使 DPAPI 在使用漫游配置文件时正常工作,域用户必须 只能登录到域中的一台计算机。如果用户想 登录到域中的另一台计算机,用户必须注销 在用户登录到第二台计算机之前第一台计算机。如果 用户同时登录多台电脑,很可能 DPAPI 将无法正确解密现有的加密数据。” - http://support.microsoft.com/kb/309408

用户 A 是否可以再访问 abc.txt? 在一台机器上,更改密码后,用户应该仍然能够访问以前加密的文件。我的理解是之前生成的密钥仍然存储在列表中以允许这样做。 (每次用户更改密码时都必须解密和重新加密所有以前存储的数据,这将是一项昂贵的操作,因此他们只保留旧密钥。)

但是,有一些管理工具可以让您以可能会破坏密码的方式更改密码。

我不知道在机器 A 上更改密码会对机器 B 产生什么影响。我假设漫游配置文件会正确处理这个问题,但这可能是一个无效的假设。

我不会在没有备份的情况下将关键数据存储在 DPAPI 中。当然,这会引入其他与安全相关的复杂性,具体取决于数据的敏感性。

数据保护 API (DPAPI) 与 roaming profiles. So this would cover the fact that a user can decrypt the data over a network. Using an 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);