Hmac

截斷 HMAC 輸出的長度

  • February 15, 2021

RFC 2104說:

tHMAC 的應用程序可以選擇通過為某些參數輸出 HMAC 計算的最左邊位來截斷 HMAC 的輸出t

$$ … $$. 我們建議輸出長度t小於雜湊輸出長度的一半(以匹配生日攻擊界限)並且不小於 80 位(攻擊者需要預測的位數的合適下限) .

顯然,不同長度的 HMAC 輸出提供不同級別的安全性。對我來說不明顯的是:如果需要 128 位 MAC 提供的安全性,為什麼 HMAC-SHA-256 適合生成這樣的(雜湊的一半長度 = 128 位)但 HMAC-SHA-512 是不是(雜湊長度的一半 = 256 位)?

HMAC 不會遇到碰撞阻力問題(換句話說:生日限制不適用)。這僅僅是因為攻擊者沒有用於生成 HMAC 身份驗證標籤的密鑰,因此無法建構一個可以比較的可能輸出的巨大表。

因此,由於生日限制,通常將雜湊的安全性定義為輸出位數的一半。為了獲得相同級別的安全性,您可以輸出 HMAC 輸出位的一半,因為生日攻擊不適用。

可以使用 HMAC-SHA-512 通過使用最左邊的 128 位來生成 128 位安全性(對於 64 位 CPU 上的大型消息,它甚至可能比 HMAC-SHA-256 稍快一些)。但是,它不會提供 HMAC-SHA-512 可以提供的最大安全性 - 並不是說您永遠需要 512 位的安全性。


請注意,80 位安全性是 SHA-1(或 RIPEMD-160)輸出大小的一半。現在 80 位不再被認為是安全的。

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