數據保護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). 

外部連結

編輯