Aes

如何能夠更改密碼以訪問使用 AES-GCM 加密的數據,而無需重新加密?

  • November 25, 2020

假設您需要加密plaintext1 TB 的大小。

你有一個密碼pwd。應用了這個非常經典的 AES-GCM 過程(虛擬碼):

salt = 16 random bytes
key = PBKDF2(pwd, salt, count=1000*1000)  # key derivation function
nonce = 16 random bytes
ciphertext, tag = AES_GCM_cipher(key, nonce).encrypt(plaintext)    # by blocks in reality
save to disk:  
    salt | nonce | ciphertext | tag

現在,如果我懷疑pwd受到威脅,並且想將其更改為pwd_new我必須重新啟動整個加密過程,這對於 1 TB 的數據來說可能很長。

問題:我可以使用哪種簡單的加密方案,仍然對實際數據使用 AES-GCM,這樣我就可以更改密碼而無需重新加密/重寫所有數據?

(例如在 Microsoft BitLocker 磁碟加密等中有此實現)

這是軟體工程基本定理的情況,該定理指出:

“我們可以通過引入額外的間接級別來解決任何問題。”

在這種情況下,通常要做的是引入一個額外隨機抽取的中間密鑰(通常稱為“數據加密密鑰,DEK”)。

然後,您使用從您的密碼派生的密鑰(有時也稱為“密鑰加密密鑰,KEK”)加密 DEK,每當您想更改密碼時,您只需重新派生 KEK、解密 DEK 並在新密碼下派生 KEK用(也最好使用新鮮的鹽)加密 DEK。

引用自:https://crypto.stackexchange.com/questions/86451