簡體   English   中英

DPAPI密鑰存儲和還原

[英]DPAPI Key Storage and Restoration

鑒於即將頒布的GDPR法規,我工作的公司正在尋求升級其加密算法並比以前加密更多的數據。 作為負責此工作的人,我用AES-256替換了舊的CAST-128加密(我說加密,但它更像是散列,沒有鹽,每次都得到相同的密文),並將工具編寫為遷移數據。 但是,加密密鑰仍在應用程序中進行硬編碼,並且可以在幾分鍾內用反匯編程序提取出來。

我們的產品是一個桌面應用程序,大多數客戶已經在內部安裝了該應用程序。 他們中的大多數人還托管自己的數據庫。 由於他們在本地擁有完整的產品,因此保護密鑰似乎是一項非常困難的任務。

經過研究,我決定采用以下方法。 在安裝過程中,將為每個客戶生成一個隨機的256位密鑰,並使用AES加密來加密他們的數據。 然后,密鑰本身將在用戶模式下使用DPAPI進行加密,在該模式下,唯一可以訪問數據的用戶將是一個新創建的具有受限權限的鎖定域服務帳戶,該帳戶無法實際登錄到計算機。 加密的密鑰將存儲在注冊表的ACL版本中。 然后,加密模塊將模擬該用戶執行其功能。

問題在於,由於密鑰將在安裝時隨機生成並立即加密,因此我們甚至都沒有。 如果客戶碰巧刪除此帳戶,重新安裝服務器操作系統或設法以其他某種方式丟失密鑰,則數據將無法恢復。 因此,在所有這些說明之后,出現了實際的問題:

我正在考慮讓客戶備份存儲密鑰的注冊表,並假設即使在重新安裝或刪除用戶后,只要在同一台計算機上使用相同的密碼創建了相同的用戶帳戶,它也會創建相同的DPAPI機密並能夠解密密鑰。 但是,我不確定是否是這種情況,因為我不確定這些秘密是如何產生的。 任何人都可以確認是否確實如此嗎? 如果您能想到更好的密鑰存儲方法,我也樂於提出建議。

我看不到與GDPR的聯系,但可以說這只是上下文。

它所花費的不僅僅是用戶帳戶,其密碼和機器。 使用DPAPI加密數據時,會增加更多的熵。

請參閱: https : //msdn.microsoft.com/zh-cn/library/ms995355.aspx#windataprotection-dpapi_topic02

使用登錄密碼的一個小缺點是,在同一用戶下運行的所有應用程序都可以訪問他們知道的任何受保護的數據。 當然,由於應用程序必須存儲自己的受保護數據,因此對於其他應用程序來說,訪問數據可能會有些困難,但當然並非不可能。 為了解決這個問題,DPAPI允許應用程序在保護數據時使用其他秘密。 然后需要此附加密碼來取消保護數據。 從技術上講,這種“秘密”應該被稱為次級熵。 這是次要的,因為它雖然沒有增強用於加密數據的密鑰,但確實增加了在同一用戶下運行的一個應用程序破壞另一個應用程序的加密密鑰的難度。 應用程序應注意如何使用和存儲此熵。 如果僅將其保存到不受保護的文件中,那么攻擊者就可以訪問熵並使用它來保護應用程序的數據。 此外,應用程序可以傳入一個數據結構,DPAPI將使用該數據結構來提示用戶。 這種“提示結構”允許用戶為該特定數據指定其他密碼。 我們將在“使用DPAPI”部分中進一步討論此結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM