數據保護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和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出品的免費軟件