Mac

HMAC-SHA-256 vs SHA-512/256 vs 截斷的 SHA-512 用作 MAC

  • March 20, 2022

我正在研究共享秘密消息身份驗證程式碼的三個選項:

  1. HMAC-SHA-256(秘密,有效載荷)
  2. SHA-512/256(秘密+有效載荷)
  3. SHA-512(secret+payload) 被截斷為 256 位

選項 1 是最標準的選擇。我正在考慮選項 2,因為它在 64 位 CPU 上更快。我正在考慮選項 3,因為 SHA-512 在程式語言庫中比 SHA-512/256 更廣泛。

選項 2 和 3 是否適用於 MAC?是否有任何與安全相關的理由來選擇其中一個?

澄清:我意識到一個好的 HMAC-SHA-256 實現並不比 SHA-256 慢很多。我正在考慮選項 2 和 3,因為SHA-512在 64 位機器上比SHA-256快(連結)。

背景:一些加密雜湊函式(如 SHA-256 和 SHA-512)是“長度可擴展的”。這不一定是問題,因為雜湊函式的正確使用不應受到該屬性的影響。但是您不能將這樣的雜湊函式直接用作 MAC,因為在這種情況下,簽名和輸入都來自不受信任的來源(長度擴展攻擊)。

SHA-512/256 是基於 SHA-512 的雜湊函式,不可擴展長度。(它類似於執行 SHA-512 並且只使用前 256 位輸出,這也不是長度可擴展的。)我的問題是這兩個雜湊函式是否可以直接用作 MAC。

選項 2 和 3 適用於 MAC,假設密鑰的長度不可變(否則必須使用適當的填充,類似於KMAC中使用的填充)。以這種方式,它的行為類似於不需要在通常的嵌套 HMAC 結構中執行的 SHA-3。數字 2 和 3 實際上幾乎相同。唯一的區別是 SHA-512/256 使用與普通截斷 SHA-512 不同的 IV。它們都提供針對長度擴展攻擊的保護。

請注意,您可以優化 HMAC 以減少對雜湊的呼叫次數。與 HMAC-SHA-256 相比,任何體面的實現都不會顯著損害性能。您還可以使用稱為信封 MAC的舊結構僅執行單個 SHA-256 函式,該結構使用填充再次連接密鑰、消息和密鑰。

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