Hash

漩渦容易受到長度擴展攻擊嗎?

  • October 3, 2017

漩渦容易受到長度擴展攻擊嗎?我沒有找到任何關於這個話題的東西,而且幾乎沒有關於漩渦的任何有趣的東西。我正在嘗試為一個程序建構一些 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 位散列算法),基於源,或應用程序的規範,或任何他們能夠做到的方式。

只知道數據、Hsignature,攻擊者的目標是追加數據並為新數據生成有效簽名。這很容易做到!

在那篇文章中,他們還連結到一個工具,該工具實際上可以對您可能希望的每個算法進行長度擴展攻擊——包括 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 結構可防止長度擴展攻擊,從而避免了該問題。

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