Hash

“弱”散列和延伸強散列有優勢嗎?

  • November 16, 2017

在直接 SHA512 雜湊上使用 PBKDF2 等拉伸算法是否有任何實際優勢?

如果鍵拉伸的目的是增加長度,從而防止破解短鍵的任何快捷方式,那麼在相當容易生成長度使它們幾乎不可能暴力破解的鍵時,還有一個目的嗎?

與輸入密鑰材料相比,密鑰拉伸的目的是增加生成的輸出密鑰材料的*強度。*密鑰材料的輸入當然通常是密碼。如果鍵控材料的強度已經足夠高,則不需要拉伸鍵。

請注意,在這種情況下,“長度”一詞有點用詞不當。“這是一個非常安全的密碼”顯然不是一個非常強大的密碼片語,即使它可能超過了許多(程式錯誤的)系統的長度要求。

PBKDF2 也有一個 salt 組件,它可以派生也依賴於唯一 salt 的密鑰,這可以確保如果多次使用不同的 salt,它會生成不同的密鑰。這是 PBKDF2 相對於安全散列的優勢。


但是,您似乎想使用 SHA-256 來派生密鑰。為此,還有其他與 PBKDF 密切相關的算法:KBKDF。

PBKDF 是一種算法,其中密鑰源自密碼,而 KBKDF 直接源自已經具有足夠強度的密鑰。輸入密鑰的強度直接傳輸到輸出密鑰材料(到某個較高的最大值,取決於選擇的 KBKDF 算法)。

與 PBKDF2 一樣,它不需要輸入密鑰材料中的隨機性分佈良好,因此它可以是例如不提供這種分佈的非對稱計算的輸出。

KBKDF 與安全散列相比有一些優勢,因為它們是專門為此功能設計的:

  • 他們可以使用額外的多樣化數據,例如“ENC”和“MAC”的ASCII編碼來派生多個密鑰;
  • 他們通常有一個鹽的輸入參數;
  • 它們通常具有可配置的輸出密鑰長度;
  • 它們可以在加密硬體中實現,其中輸入/輸出密鑰保存在硬體內部,而不會暴露給外界。

最現代、最標準化的 KBKDF 是 HKDF,它本身基於 HMAC,而 HMAC 又基於 - 你猜對了 - 一個(合理的)安全雜湊。


您可以將 PBKDF2 用作設計不佳的 KBKDF,同樣您可以自己使用雜湊來創建設計不佳的 KBKDF。但我只會使用 HKDF。順便說一句,您似乎需要完整的HKDF,HKDF-extract和-expand。


如果您面臨直接選擇使用帶有 SHA-256 而不是 SHA-512 的 PBKDF2,我會說這並沒有太大的區別,特別是如果您可以將迭代計數設置為 1。我d 選擇 PBKDF2,因為它至少是為此目的而設計的,您可以使用鹽對其進行調整,並使用標準化算法生成所需數量的輸出位。

然而,那將是在指示應該使用 KBKDF 之後。

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