漩渦容易受到長度擴展攻擊嗎?
漩渦容易受到長度擴展攻擊嗎?我沒有找到任何關於這個話題的東西,而且幾乎沒有關於漩渦的任何有趣的東西。我正在嘗試為一個程序建構一些 HMAC 並考慮使用漩渦來這樣做。
讓我們將您的問題分為兩部分:首先是 Whirlpool 的長度擴展攻擊問題,然後是您的 HMAC 工具想法。
1.漩渦容易受到長度擴展攻擊嗎?
是的,Whirlpool 本身(作為普通雜湊,而不是 HMAC)確實容易受到長度擴展攻擊。
除了像“了解長度擴展攻擊”這樣的 Crypto.SE 問答之外,SkullSecurity.org 網站在他們的文章“關於雜湊長度擴展攻擊的所有你需要知道的”中提供了解釋。這是一段摘錄:
攻擊
如果應用程序在字元串前附加一個秘密值,使用易受攻擊的算法對其進行散列,並將字元串和散列委託給攻擊者,而不是秘密,則該應用程序很容易受到散列長度擴展攻擊。然後,伺服器依靠秘密來決定後面返回的數據是否與原始數據相同。
事實證明,即使攻擊者不知道前置密鑰的值,他仍然可以為 {secret || 生成一個有效的雜湊值。數據 || 攻擊者控制數據}!這是通過簡單地從散列算法停止的地方開始的;事實證明,繼續雜湊所需的 100% 狀態都在大多數雜湊算法的輸出中!我們只需將該狀態載入到適當的散列結構中並繼續散列。
TL;DR:給定一個由具有未知前綴的字元串組成的散列,攻擊者可以附加到該字元串並生成一個仍然具有未知前綴的新散列。
例子
讓我們看一個分步範例。對於這個例子:
let secret = "secret" let data = "data" let H = md5() let signature = hash(secret || data) = 6036708eba0d11f6ef52ad44e8b74d5b let append = "append"
伺服器向攻擊者發送數據和簽名。攻擊者猜測 H 是 MD5 僅僅通過它的長度(它是最常見的 128 位散列算法),基於源,或應用程序的規範,或任何他們能夠做到的方式。
只知道數據、
H
和signature
,攻擊者的目標是追加數據並為新數據生成有效簽名。這很容易做到!在那篇文章中,他們還連結到一個工具,該工具實際上可以對您可能希望的每個算法進行長度擴展攻擊——包括 WHIRLPOOL。
該工具 - 以純 C 編碼 - 可免費獲得,並以名稱託管在 Github 上
hash_extender
。引用它的描述,hash_extender
…… 對我能想到的所有算法實施長度擴展攻擊:
- MD4
- MD5
- RIPEMD-160
- SHA-0
- SHA-1
- SHA-256
- SHA-512
- 惠而浦
我很樂意將其擴展到涵蓋其他散列算法,前提是它們對這種攻擊“脆弱”——MD2、SHA-224 和 SHA-384 不是。如果您有其他候選人,請與我聯繫,我會盡快添加他們!
2.我正在嘗試為某個程序建構一些 HMAC,並考慮使用 whirlpool 來實現。
這再次解決了上述長度擴展攻擊問題,因為 HMAC 結構(使用密鑰安全地散列數據)可以防止長度擴展攻擊。有關 HMAC 構造如何實現這一點的詳細資訊,您可以查看 Crypto.SE Q&A “HMAC 中的密鑰如何防止修改 HMAC?” 這解釋了 HMAC 旨在避免長度擴展攻擊問題。
當試圖攻擊 HMAC 時,
…攻擊者只控制內部散列的可變長度輸入,而不是外部散列…
因此,實際上考慮您的問題標題以及您的描述的答案擴展到:
是的,Whirlpool 本身(作為普通雜湊,而不是 HMAC)確實容易受到長度擴展攻擊 - 但由於您計劃在 HMAC 結構中使用它(防止長度擴展攻擊),您可以放心地忽略該攻擊向量。然而,應該注意的是,我假設您正確實現了 HMAC 構造。
TL;博士
- 是的,作為普通雜湊的 Whirlpool 很容易受到長度擴展攻擊。
- HMAC 結構可防止長度擴展攻擊,從而避免了該問題。