Encryption

AES 加密密鑰和 HMAC 的密鑰派生

  • November 14, 2014

好的,所以我有兩種選擇如何為 AES 加密和 HMAC 派生兩個密鑰,它們如下所示:

  1. 在使用者密碼上執行 BCrypt,然後使用 java 中 HKDF 的 bouncy castle 實現將密鑰從 31 字節擴展到 64 字節,然後將結果拆分為兩個 32 字節的密鑰。
  2. 使用不同的 salt 在使用者密碼片語上執行 Bcrypt 兩次,然後使用 java 中 HKDF 的 bouncy castle 實現將兩個密鑰從 31 字節擴展到 32 字節。

我的問題是哪種方式更好?(更安全)

注意:如果您確實有答案,請以易於理解的方式留下您的推理。

在這兩個選項中,如果對手有辦法檢查任一 AES 密鑰,則可以嘗試粗暴的密碼猜測攻擊,而 BCrypt 是主要的防線。

為了不斷努力,選項 2 強制將BCrypt 中的成本參數減半,因此比選項 1 更容易受到密碼猜測的影響。

BCrypt 的輸出被描述為 31 字節,並且可能有 192 位熵,不包括costsalt。如果是這樣,那麼在可預見的未來,這將比安全所需的熵更多,並且可以接受所有密鑰都具有更大大小的命令要求。

因此,選項 1 絕對是兩者中最好的;但是,正確實施scrypt會更加安全,並且作為獎勵,不需要額外的東西來生成所需數量的密鑰材料。

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