Pseudo-Random-Function

PBKDF2 PRF:HMAC 還是只是散列?

  • June 1, 2016

我明白路 $ \textrm{PBKDF2} $ 可用於“拉伸”不提供完整熵的密碼/密碼。

我的問題:如何選擇 PRF?一個常見的選擇是任何眾所周知的加密雜湊,例如 $ \textrm{SHA256} $ ,我明白為什麼會這樣。然而,有些系統使用 $ \textrm{HMAC}_{\textrm{SHA256}} $ ,其中密碼用於加密 MAC。

為什麼要使用 $ \textrm{HMAC}_{\textrm{SHA256}} $ 超過 $ \textrm{SHA256} $ 作為PRF?我看不出這有什麼好處。Merkle-Dåmgard 雜湊的弱點肯定是由 $ \textrm{HMAC} $ 當密碼是用於派生另一個秘密的秘密時無關緊要嗎?

HMAC 有時被稱為鍵控散列。密鑰不是安全雜湊輸入的一部分(正如 CodesInChaos 已經在評論中指出的那樣)。HMAC 是一個相對簡單的結構,允許將密鑰用作底層安全雜湊的輸入。它專門用於禁止長度擴展攻擊——儘管這些在 PBKDF2 中不太可能成為問題。

您可以使用如果您直接使用 SHA-256,則必須確保您不易受到此類攻擊。您基本上將沒有 HMAC 的安全證明。

KDF1 和 KDF2 是 KDF/PRF,它們在將結果輸入散列之前以某種方式簡單地連接元素。SHA-3/KMAC 將(很大程度上)是散列之前的密鑰和消息的串聯。所以當然可以這樣做。


但是,您應該扭轉您的問題:為什麼使用安全 PRF 而不是直接使用雜湊?.

HMAC相對有效。Inn PBKDF2(需要工作因子/迭代計數)小的低效率實際上可能是一個好處(一個好的實現應該儲存密碼的中間雜湊值,否則攻擊者可能有優勢)。

此外,HMAC 仍然被認為是安全的,即使底層雜湊容易受到某些類型的攻擊(例如針對 MD5 和 SHA-1 的攻擊)。

對於 SHA-1 和 SHA-2 算法,我建議您保留 HMAC,除非您有非常強大(與性能相關?)的理由不這樣做。

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