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

外部連結[編輯]