數據保護API(全稱:Data Protection Application Programming Interface,縮寫DPAPI)是一個簡單的密碼學應用程式接口 ,作為一個組件內置在Windows 2000及之後版本的Microsoft Windows作業系統中。理論上,數據保護API可以實現任何類型的數據對稱加密;在實踐中,其在Windows作業系統中的主要用途是執行非對稱私鑰的對稱加密,使用用戶或系統的秘密信息作為熵的重要來源。
基本介紹
- 中文名:數據保護API
- 外文名:Data Protection Application Programming Interface
- 縮寫:DPAPI
- 領域:計算機
簡介,安全屬性,微軟軟體對DPAPI的使用,
簡介
對於幾乎所有密碼系統來說,最困難的挑戰之一是“密鑰管理”——其中部分即是,如何安全地存儲解密密鑰。如果密鑰以純文本存儲,則可以訪問密鑰的任何用戶都可以訪問加密的數據。如果密鑰被加密,則又需要另一個密鑰,周而復始。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。除了他們的簡報,Bursztein和Picod發布了能離線解密DPAPI加密數據的DPAPIck。2012年,Passcape Software在他們的部落格中發布了介紹DPAPI內部邏輯的更詳細文章及一個完全離線解密和分析DPAPI的工具。與上一個不同,該工具利用了一些舊有Windows的缺陷(例如,你可以無需獲知所有者的登錄密碼就解密Windows 2000的DPAPI數據體)並完全兼容Windows 8的DPAPI數據結構。在Windows 8中,微軟改變了DPAPI邏輯的工作方式,現在可以使用多個用戶的密鑰來導出加密密鑰以解密用戶的主密鑰,然後用於解碼單個DPAPI數據體(blob)。
安全屬性
DPAPI不為自己存儲任何持久性數據。相反,它只接受明文並返回密文(反之亦然)。
DPAPI安全性依賴於Windows作業系統保護主密鑰和RSA私鑰免受攻擊的能力。這在大多數攻擊情形中高度依賴最終用戶憑據的安全性。主加密/解密密鑰通過PBKDF2函式從用戶密碼導出。特定數據的二進制大型對象可以添加鹽和/或詢問外部用戶提供額外密碼(也稱強密碼保護)來加密。鹽的使用由各實現的選項控制,即由應用程式開發者控制,不能由最終用戶或系統管理員控制。
通過使用COM+對象可以授予密鑰的委託訪問許可權。這使IIS網頁伺服器能夠使用DPAPI。
微軟軟體對DPAPI的使用
雖然並非所有微軟產品都在使用,但微軟產品對DPAPI的使用隨著每個Windows版本在增加。不過,出自微軟或第三方開發人員的許多應用程式仍傾向於使用自己的保護方式,或者最近才切換為使用DPAPI。例如Internet Explorer的4.0-6.0版本、Outlook Express和MSN Explorer使用較舊的保護存儲(PStore)API來存儲保存的憑據(例如密碼)。Internet Explorer 7則開始使用DPAPI保護已存儲的用戶憑據。
- Windows 8中的圖片密碼、PIN和指紋
- Windows 2000及之後版本中的加密檔案系統
- SQL Server透明數據加密(TDE)服務的主加密密鑰
- Outlook的S/MIME
- Internet Information Services的SSL/TLS
- Windows權利管理服務客戶端v1.1及之後版本
- Windows XP及之後版本對存儲的用戶名和密碼)(也稱憑據管理器)
- .NET Framework2.0及之後版本對System.Security.Cryptography.ProtectedData
- Microsoft.Owin(Katana) Cookie身份驗證(當自託管時)