“弱”散列和延伸強散列有優勢嗎?
在直接 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 之後。