2014-09-20 63 views
0

我存儲了一些已加密的數據,並且使用PB​​KDF2根據用戶密碼(哈希和鹽漬後)生成密鑰。重置PBKDF2中的密碼

我可以簡單地使用舊密碼解密數據來實現密碼更改請求,然後使用新密碼重新加密數據。

但是,如何在用戶忘記密碼時執行密碼重置?我是否應該以不同方式存儲事物以支持此用例?如果是這樣,怎麼樣?

+0

Uhhhhmmmmm。你爲什麼要加密密碼而不是散列它們? – PeeHaa 2014-09-20 20:35:50

+0

對不起,讓我澄清一下:我沒有對密碼進行加密,實際上我正在對它們進行散列和醃製。但是我用它作爲PBKDF2的輸入,並從那裏加密他們的一些數據。 – gzak 2014-09-21 02:01:48

回答

1

我可以簡單地通過解密數據 使用舊密碼,然後用新 密碼重新加密數據執行密碼更改請求。

但是,如何執行密碼重設,當用戶 忘記密碼?我是否應該以不同的方式存儲事物 支持此用例?如果是這樣,怎麼樣?

通常情況下,您使用內容加密密鑰或CEK。 CEK是一個隨機密鑰,您可以使用它來鎖定密碼和MAC來保護文件。每個文件都有自己的CEK和其他加密參數,比如IV和nonce。

然後您使用密鑰加密密鑰或KEK。在你的情況下,KEK將是你PBKDF的輸出。 KEK加密CEK。

對於恢復,您創建一個恢復密鑰。然後在恢復密鑰下再次加密CEK,並將加密的CEK移到某個安全的地方。

當需要更改密碼時,只需在新的PBKDF派生下重新加密CEK。因爲它在其他地方是安全的,所以不需要再使用恢復密鑰。 (或者像政府發行NSLs一樣安全,沒有疏忽)。