1

我有一个 C# 应用程序,它使用ProtectedData类将密码信息存储在数据库中。我使用的范围local machine和据我所知它将DPAPI用于master key加密它,除非我卸载操作系统,否则它不会被更改。

假设我想使用 scope DataProtectionScope.CurrentUser。据我了解,它使用不同 master key的受用户密码保护的。因此,当用户更改密码时,用于保护数据的主密钥保持不变,而只是更改了保护数据的密码。

我的问题是:用户更改密码后,我的数据(在数据库中)是否可检索(以及如何检索)?

4

2 回答 2

1

请参阅此站点,其中包含论文链接(更重要的是,代码)对系统进行逆向工程。他们的第一次演讲是Blackhat Europe 2010 上的。

从本质上讲,您当前密码的 SHA-1 哈希保护了 DPAPI 主密钥,后者又保护了每个 DPAPI-blob(每个 blob 也有一个盐)。每个主密钥都有一个 GUID,用于标识用于保护它的密码。每个 blob 还有一个 GUID,用于标识用于加密它的主密钥。这些主密钥在三个月后到期,并创建一个新的,但保留旧的。

如果您更改密码,所有主密钥都将使用新的 SHA-1 哈希重新加密,但作为保险(该过程可能会中断,例如)旧的 SHA-1 哈希也会被存储,并使用新的 SHA-1 哈希加密(以及旧密码和新密码 GUID)(在靠近主密钥的名为 CREDHIST 的文件中),以确保所有 blob 始终可以直接或间接地使用当前密码解密。如果您知道当前密码,则可以通过链接找到所有旧密码的密码哈希。masterkeys 和 CREDHIST 中的所有这些密码保护也使用用户的 S-ID(因此,如果这会发生变化,例如在重新安装 Windows 之后,您将无法再解密旧的 blob。)。

于 2017-06-26T22:04:40.873 回答
0

请注意,如果您手动更改本地用户的密码,您将收到以下警告,并且使用该用户加密的任何数据ProtectedDataDataProtectionScope.CurrentUser丢失/无法访问,就像警告中所说: 在此处输入图像描述

于 2022-01-14T23:48:28.113 回答