DPAPI:在用户登录之前使用CryptUnprotect

时间:2013-05-14 09:37:48

标签: windows winapi dpapi

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

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

我重新阅读了整个DPAPI文档,以了解如何生成密钥。但是,遗憾的是,这个特定的旗帜没有足够的信息。

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

谢谢, d

2 个答案:

答案 0 :(得分:2)

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

  • 使用CRYPTPROTECT_LOCAL_MACHINE进行加密CRYPTPROTECT_UI_FORBIDDEN。

  • 使用CRYPTPROTECT_UI_FORBIDDEN解密

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

答案 1 :(得分:1)

在这一点上,Microsoft文档确实含糊不清。 Passcape做了一个非常好的写作DPAPI Secrets

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

  1. 来自文件夹E:/Windows/System32/Microsoft/Protect/S-1-5-18/User"
  2. 的"系统主密钥
  3. 两个注册表文件:" SYSTEM"和" SECURITY"
  4. 根据名称,如果这些文件受操作系统保护并且只有登录用户可以访问,我不会感到惊讶,尽管其他人可能能够确认。