数据保护API 数据保护API全称Data Protection Application Programming Interface缩写DPAPI是一个简单的密码学应用程序接口 作为一个组件内置在Windows 及之后版本的Microsoft Windows操作系统中理论上数据保护API可以实现任何类型的数据对称加密在实践中其在Windows操作系统中的主要用途是执行非对称私钥的对称加密使用用户或系统的秘密信息作为熵的重要来源 对于几乎所有密码系统来说最困难的挑战之一是密钥管理其中部分即是如何安全地存储解密密钥如果密钥以纯文本存储则可以访问密钥的任何用户都可以访问加密的数据如果密钥被加密则又需要另一个密钥周而复始DPAPI允许开发者使用从用户的登录私钥导出的对称密钥来加密密钥或者在系统加密的情况下使用系统的域验证私钥来加密密钥 用于加密用户RSA密钥的DPAPI密钥存储在APPDATAMicrosoftProtectSID目录其中SID为该用户的安全标识符DPAPI密钥存储在与保护用户私钥的主密钥相同的文件中它通常为字节的随机数据 年Elie Bursztein英语Elie Bursztein和JeanMichel Picod英语JeanMichel Picod在Black Hat DC 提出了Reversing DPAPI and Stealing Windows Secrets Offline除了他们的简报Bursztein和Picod发布了能离线解密DPAPI加密数据的DPAPIck年Passcape Software在他们的博客中发布了介绍DPAPI内部逻辑的更详细文章及一个完全离线解密和分析DPAPI的工具与上一个不同该工具利用了一些旧有Windows的缺陷例如你可以无需获知所有者的登录密码就解密Windows 的DPAPI数据体并完全兼容Windows 的DPAPI数据结构在Windows 中微软改变了DPAPI逻辑的工作方式现在可以使用多个用户的密钥来导出加密密钥以解密用户的主密钥然后用于解码单个DPAPI数据体blob