数据保护API

数据保护API(全称:Data Protection Application Programming Interface,缩写DPAPI)是一个简单的密码学应用程序接口 ,作为一个组件内置在Windows 2000及之后版本的Microsoft Windows操作系统中。理论上,数据保护API可以实现任何类型的数据对称加密;在实践中,其在Windows操作系统中的主要用途是执行非对称私钥的对称加密,使用用户或系统的秘密信息作为的重要来源。

对于几乎所有密码系统来说,最困难的挑战之一是“密钥管理”——其中部分即是,如何安全地存储解密密钥。如果密钥以纯文本存储,则可以访问密钥的任何用户都可以访问加密的数据。如果密钥被加密,则又需要另一个密钥,周而复始。DPAPI允许开发者使用从用户的登录私钥导出的对称密钥来加密密钥,或者在系统加密的情况下使用系统的域验证私钥来加密密钥。

用于加密用户RSA密钥的DPAPI密钥存储在%APPDATA%\Microsoft\Protect\{SID}目录,其中{SID}为该用户的安全标识符。DPAPI密钥存储在与保护用户私钥的主密钥相同的文件中。它通常为64字节的随机数据。

2010年,Elie Bursztein英语Elie BurszteinJean-Michel Picod英语Jean-Michel Picod在Black Hat DC 2010提出了Reversing DPAPI and Stealing Windows Secrets Offline。[1]除了他们的简报,Bursztein和Picod发布了能离线解密DPAPI加密数据的DPAPIck。2012年,Passcape Software在他们的博客中发布了介绍DPAPI内部逻辑的更详细文章[2]及一个完全离线解密和分析DPAPI的工具[3]。与上一个不同,该工具利用了一些旧有Windows的缺陷(例如,你可以无需获知所有者的登录密码就解密Windows 2000的DPAPI数据体)并完全兼容Windows 8的DPAPI数据结构。在Windows 8中,微软改变了DPAPI逻辑的工作方式,现在可以使用多个用户的密钥来导出加密密钥以解密用户的主密钥,然后用于解码单个DPAPI数据体(blob)。

安全属性

DPAPI不为自己存储任何持久性数据。相反,它只接受明文并返回密文(反之亦然)。

DPAPI安全性依赖于Windows操作系统保护主密钥和RSA私钥免受攻击的能力。这在大多数攻击情形中高度依赖最终用户凭据的安全性。主加密/解密密钥通过PBKDF2函数从用户密码导出。[4]特定数据的二进位大型物件可以添加和/或询问外部用户提供额外密码(也称强密码保护)来加密。盐的使用由各实现的选项控制,即由应用程序开发者控制,不能由最终用户或系统管理员控制。

通过使用COM+对象可以授予密钥的委托访问权限。这使IIS网页伺服器能够使用DPAPI。

微软软件对DPAPI的使用

虽然并非所有微软产品都在使用,但微软产品对DPAPI的使用随着每个Windows版本在增加。不过,出自微软或第三方开发人员的许多应用程序仍倾向于使用自己的保护方式,或者最近才切换为使用DPAPI。例如Internet Explorer的4.0-6.0版本、Outlook ExpressMSN Explorer英语MSN Explorer使用较旧的保护存储(PStore)API来存储保存的凭据(例如密码)。Internet Explorer 7则开始使用DPAPI保护已存储的用户凭据。[5]

参考资料

  1. ^ 存档副本. [2017-03-16]. (原始内容存档于2017-04-24). 
  2. ^ 存档副本. [2017-03-16]. (原始内容存档于2016-12-24). 
  3. ^ 存档副本. [2017-03-16]. (原始内容存档于2016-08-26). 
  4. ^ Windows Password Recovery - DPAPI Master Key analysis. [2013-05-06]. (原始内容存档于2013-05-02). 
  5. ^ Mikhael Felker. Password Management Concerns with IE and Firefox, part one. SecurityFocus.com英语SecurityFocus.com, Symantec.com. December 8, 2006 [2010-03-28]. (原始内容存档于2010-04-02). 
  6. ^ 存档副本. [2017-03-16]. (原始内容存档于2017-03-17). 
  7. ^ 存档副本. [2017-03-16]. (原始内容存档于2016-11-30). 
  8. ^ 存档副本. [2017-03-16]. (原始内容存档于2008-12-03). 
  9. ^ CookieAuthenticationOptions.TicketDataFormat Property (Microsoft.Owin.Security.Cookies). [2015-01-15]. (原始内容存档于2016-09-10). 

外部链接