SHA3 84 對 HMAC-SHA256 有意義嗎?
在安全級別的意義上(例如,由 Ferguson 和 Schneier 在 Practical Cryptography 一書中定義),在一般設置中使用 SHA384 和 HMAC-SHA256 是否有意義。通過生日悖論,HMAC-SHA256 將提供 128 位的安全級別,而 SHA384 將提供 192 位。據我了解,整體安全級別將被限制在 128 位,而 SHA384 只是偽裝。
更具體的設置: 傳輸的數據包是:
(x,y,z)
在哪裡
y = SHA384 (w) z = HMAC-SHA256(x||y) x and w are any arbitrary values
Ferguson 和 Schneier 還指出 SHA384 相對沒用(因為我們做了所有的工作 SHA512 然後扔掉這些位)。它對所有可能的 SHA384 實現仍然有效嗎?
由於攻擊者沒有密鑰,因此密鑰雜湊不易受到衝突/生日悖論的影響;因此,您無法進行任何預先計算並創建一組已知的雜湊(好吧,如果您有一個帶有密鑰的 Oracle,您可以這樣做,但在這種情況下,Oracle 將簽署傳遞給它的隨機數據)。
所以你低估了 HMAC 提供的安全性;在大多數情況下,它提供的安全性與密鑰的輸出大小/大小大致相同。例如,另請參見keylength.com / NIST 建議(您需要查看表中 HMAC 的“雜湊 (B)”)。
但是,您正在使用
y = SHA384(w)
. 現在,如果攻擊者可以嘗試為 的特定值創建衝突w
,這意味著在 HMAC 輸入中使用了雜湊衝突,這當然也會導致相同的 HMAC 值。所以這裡的生日限制確實適用。所以是的,在這種情況下,您可以嘗試使用 SHA-384 或 SHA-512(因為長度擴展攻擊不會導致衝突,所以這些不是主題)。如果您懷疑在使用 SHA-512 時需要另一個散列塊,則可以使用 SHA-384;SHA-384 可能會稍微更有效——如果需要這種效率的話。
但是,請注意,我們通常假設 SHA-256 已經具有 128 位的強度,即使假設生日攻擊,所以即使在那時也沒有迫切需要使用 SHA-384。