Encryption

使用 bcrypt 派生密鑰進行加密?

  • November 12, 2014

抱歉這個無知的問題,但我目前正在權衡 BCrypt 相對於 PBKDF2 的優缺點,從我讀過的內容來看,BCrypt 被認為更安全,但從我發現 BCrypt 僅派生為 248 位密鑰(例如:E2cP18g8DyWwg3emgpHOaPBZzrcRVrO)和剩下的就是鹽,但是我需要一個 512 位的密鑰,所以我可以將它分成兩個子密鑰,一個用於 AES 加密密鑰,另一個用於 HMAC 生成。

獲取 BCrypt 生成的密鑰的 sha-512 雜湊並將其拆分是否安全,或者我應該繼續使用 PBKDF2?

BCrypt被認為更安全

bcrypt 的理論安全性受到的審查少於 PBKDF2、SHA2 和 HMAC。因此,PBKDF2 被廣泛標準化(例如在NIST SP800-132PKCS #5中),而 bcrypt 不是。

在實踐中,bcrypt 和 PBKDF2-HMAC-SHA512 的安全性(抵抗暴力攻擊或字典攻擊)可以通過工作負載參數來控制。bcrypt 比 PBKDF2 更安全,因為:如果您選擇工作負載參數,使得算法在通用 CPU 上使用相同的計算時間,那麼攻擊者可以選擇他們的硬體(CPU、GPU、FPGA 或 ASIC ) 可以**以相同的成本比 bcrypt 更有效地攻擊 PBKDF2 4 到 6 倍(參見scrypt 論文)。

作為一種啟發式方法,我們可以說使用 PBKDF2 散列的密碼應該比使用 bcrypt 散列的密碼具有 2 到 3 位的隨機性,以實現等效的安全性(針對暴力攻擊;對於等效的工作負載參數)。

獲取 BCrypt 生成的密鑰的 sha-512 雜湊並將其拆分是否安全

不,但是通過將操作拆分為生成密鑰的步驟和擴展密鑰的步驟,您走在了正確的道路上。訣竅是為這些操作選擇正確的原語。

要擴展密鑰 - 即使用一個密鑰生成適合用作密鑰材料的派生隨機輸出流 - 您需要一個偽隨機函式族(PRF)。SHA-512 不是 PRF,但 HMAC-SHA512 是。使用 HMAC-SHA512 將是一種安全但不理想的解決方案。

更好的解決方案是使用HKDF,它將密鑰推導分為提取和擴展步驟。通過使用 bcrypt 或 PBKDF2,您已經從密碼中提取了一個偽隨機密鑰(HKDF 稱之為 PRK)。您可以將 HKDF 擴展步驟應用於該 PRK 以生成任何長度的派生密鑰材料;等效地,您可以使用NIST SP800-108中的密鑰派生函式之一。

另請參閱是否有安全專家推薦 bcrypt 用於密碼儲存?有關 PBKDF2 與 bcrypt 的更多資訊。

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