數據保護API
![本頁使用了標題或全文手工轉換](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
數據保護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和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 Express和MSN Explorer使用較舊的保護存儲(PStore)API來存儲保存的憑據(例如密碼)。Internet Explorer 7則開始使用DPAPI保護已存儲的用戶憑據。[5]
- Windows 8中的圖片密碼、PIN和指紋
- Windows 2000及之後版本中的加密文件系統
- SQL Server 透明數據加密(TDE)服務的主加密密鑰[6]
- Internet Explorer 7,無論是適用於Windows XP的獨立版本,還是Windows Vista和Windows Server 2008中集成的版本
- Windows Mail和Windows Live Mail
- Outlook的S/MIME
- Internet Information Services的SSL/TLS
- Windows 權利管理服務客戶端v1.1及之後版本
- Windows 2000及之後版本對EAP/TLS(VPN身份驗證)和802.1x(Wi-Fi身份驗證)
- Windows XP及之後版本對存儲的用戶名和密碼)[7](也稱憑據管理器)
- .NET Framework 2.0及之後版本對System.Security.Cryptography.ProtectedData[8]
- Microsoft.Owin(Katana) Cookie身份驗證(當自託管時)[9]
參考資料
[編輯]- ^ 存档副本. [2017-03-16]. (原始內容存檔於2017-04-24).
- ^ 存档副本. [2017-03-16]. (原始內容存檔於2016-12-24).
- ^ 存档副本. [2017-03-16]. (原始內容存檔於2016-08-26).
- ^ Windows Password Recovery - DPAPI Master Key analysis. [2013-05-06]. (原始內容存檔於2013-05-02).
- ^ Mikhael Felker. Password Management Concerns with IE and Firefox, part one. SecurityFocus.com, Symantec.com. December 8, 2006 [2010-03-28]. (原始內容存檔於2010-04-02).
- ^ 存档副本. [2017-03-16]. (原始內容存檔於2017-03-17).
- ^ 存档副本. [2017-03-16]. (原始內容存檔於2016-11-30).
- ^ 存档副本. [2017-03-16]. (原始內容存檔於2008-12-03).
- ^ CookieAuthenticationOptions.TicketDataFormat Property (Microsoft.Owin.Security.Cookies). [2015-01-15]. (原始內容存檔於2016-09-10).
外部連結
[編輯]- Windows Data Protection API (DPAPI) white paper by NAI Labs
- Data encryption with DPAPI (頁面存檔備份,存於網際網路檔案館)
- Use DPAPI to encrypt and decrypt data
- How To: Use DPAPI (User Store) from ASP.NET 1.1 with Enterprise Services (頁面存檔備份,存於網際網路檔案館)
- System.Security.Cryptography.ProtectedData in .NET Framework 2.0 and later (頁面存檔備份,存於網際網路檔案館)
- Discussion of the use of MS BackupKey Remote Protocol by DPAPI to protect user secrets (頁面存檔備份,存於網際網路檔案館)
- The Windows PStore (頁面存檔備份,存於網際網路檔案館)
- DataProtectionDecryptor (頁面存檔備份,存於網際網路檔案館),NirSoft出品的免費軟件
|