11

我正在使用 DPAPI 来存储 XML 数据。CryptProtectData 之后的数据存储在一个文件中。在我的一个用例中,需要在任何用户登录工作站之前解密此数据。因为,我不能在其中使用用户特定的密钥,所以我在加密时设置了标志“CRYPTPROTECT_LOCAL_MACHINE”。熵键是静态文本。

Unprotect 在所有情况下都有效,除非我在登录前调用它(没有用户登录)。其返回错误 87(参数不正确)。

我重新阅读了整个 DPAPI 文档以查看密钥是如何生成的。但是,不幸的是,对于这个特定的标志没有足够的信息。

CryptUnprotectData 会在这种情况下工作吗?它可以被在某个用户会话下运行的应用程序调用吗?任何帮助表示赞赏。

感谢:D

4

2 回答 2

2

我们使用 DPAPI 来存储服务所需的密码:

  • 使用 CRYPTPROTECT_LOCAL_MACHINE 加密 | CRYPTPROTECT_UI_FORBIDDEN。

  • 使用 CRYPTPROTECT_UI_FORBIDDEN 解密

该服务在机器启动时运行(即登录前);一切正常。

于 2014-03-07T11:53:50.307 回答
1

Microsoft 文档在这一点上确实含糊不清。Passcape 写了一篇很好的文章,叫做DPAPI Secrets

您问题的相关部分是Recovering wireless connection passwords in Windows 7,其中详细描述了解密所需的数据:

  1. “文件夹中的系统主密钥E:/Windows/System32/Microsoft/Protect/S-1-5-18/User
  2. 两个注册表文件:“SYSTEM”和“SECURITY”

根据名称,如果这些文件受操作系统保护并且只有登录用户可以访问,我不会感到惊讶,尽管其他人可能能够确认。

于 2016-07-22T23:57:39.927 回答