Hash

雜湊表的 HMAC

  • July 29, 2020

如果我有一個非常大的輸入要使用易受長度擴展影響的散列函式進行散列並且我正在使用散列列表,我應該對輸入的每個部分進行 HMAC 還是僅將 HMAC 用作所有散列的最終散列?如果我確實需要對所有內容進行 HMAC,我應該為每個雜湊使用不同的密鑰嗎?

您可以只使用具有預配置節點大小的雜湊樹,然後只有最後一個雜湊值容易受到長度擴展攻擊。從這個意義上說,這與在單個雜湊上執行 HMAC 並沒有什麼不同。

然而,這不是重點。長度擴展攻擊僅適用於鍵控雜湊。由於雜湊尚未鍵入*,*因此不適用長度擴展攻擊。

所以是的,您可以簡單地對最終雜湊(或最終雜湊集,如果您使用 Merkle 樹,並且您希望最小化樹的深度)執行 HMAC。這樣雜湊值必須保持不變,否則 HMAC 驗證將失敗。

如果雜湊值保持不變,則顯然可以防止長度擴展攻擊;長度擴展攻擊會改變最終的散列值,同時仍然表示有效的鍵控散列。

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