當使用通用的秘密後綴給定多個 MD5 雜湊時,MD5 是否特別容易受到攻擊?
假設我有一個“密碼”列表,這些“密碼”使用相同的後綴進行散列,所以基本上我們所做的就是
hash = md5_digest(prefix+suffix)
,suffix
是一個常數。現在,如果我知道一個
prefix
和hash
一對,我可以輕鬆地對suffix
.但是給定多個不同的已知匹配對
prefix
和hash
,是否有比蠻力更好的方法來找到 的值suffix
?是否存在 MD5 的算法漏洞,依賴於允許我執行此操作的內部狀態?或者,或者,構造一個假的,當與 unknown 連接時prefix
會生成一個 known ?hash``suffix
**更新:**請不要建議替代散列方案,因為我不是在設計系統或任何東西,我只是想了解 MD5 的工作原理。
更新 2:好的,我可能還不夠清楚。我對任何其他“解決方案”都不感興趣,原因很簡單,我的問題不是“我如何保護這個系統?” 但是“這個特定算法的行為如何?”。是的,我知道雜湊算法和消息身份驗證之間的區別,是的,我知道 HMAC,是的,我知道 MD5 已損壞。
有沒有比蠻力更好的方法來找到後綴的值?是否存在 MD5 的算法漏洞,依賴於允許我執行此操作的內部狀態?
本文描述了我能找到的比蠻力更好的最佳攻擊,它的複雜度為 2^123.4,記憶體複雜度為 2^45×11 個單詞。AFAIK這是不實際的
或者,等效地,構造一個假前綴,當與未知後綴連接時會生成一個已知散列?
這不等同於您的第一個問題。您的第一個問題是原像攻擊,這意味著找到生成雜湊的原始值 (
prefix
+ )。suffix
這個問題可以用兩種方式解釋:
- 您需要一種可以生成第二個原像的算法,這意味著第二個值不同於產生相同散列的原始值。在這種情況下,沒有已知的針對 MD5 的第二次原像攻擊
- 您在詢問是否可以使用消息中的固定部分找到給定雜湊的衝突。對於這個問題,我只知道有一些算法可以有效地找到給定 MD5 的衝突,但我不知道這些方法是否可以適應使用消息中的固定部分(The
suffix
)
假設您正在處理消息簽名方案,請使用HMAC。
它被設計為一個安全的鍵控雜湊。如果你做一些你提議的事情,例如
signature = md5(secret || message)
存在允許攻擊的弱點(對於秘密前綴,您可以穀歌長度擴展攻擊)。請參閱停止使用不安全的鍵控雜湊,使用 HMAC作為起點。
連結文本特別指出“帶有秘密後綴的 md5 已完全損壞”,這基本上就是您建議使用的內容。如果您打算使用 md5,那麼在使用 hmac-md5 時仍然可行。但請注意,md5 存在一些嚴重的弱點,對 md5 的攻擊不會變得更糟,只會變得更好,所以我建議不要使用 md5 作為散列原語。