Collision-Resistance

MD5 雜湊函式來證明下載的完整性

  • June 20, 2018

在加密 StackExchange 上花費很多時間就可以意識到圍繞 MD5 雜湊函式的情緒很差。

我的問題是:

  • 如果使用 MD5 雜湊函式是一個壞主意,為什麼大型網站(例如 ubuntu.com)仍然使用雜湊函式來驗證文件下載的完整性?
  • 這只是一個尚未更新的系統的殘骸嗎?
  • 或者這是對 Web 瀏覽器中的 RSA 加密確保(在大多數情況下)您在官方 ubuntu.com 網站上的事實的捎帶?

實際上,有幾種方法可以利用雜湊衝突。如果攻擊者提供文件下載並顯示雜湊以證明文件的完整性,他可以將文件下載切換為具有相同雜湊的不同文件,並且下載它的人將無法知道其中的區別。該文件將顯示為有效,因為它與假定的真實文件具有相同的雜湊值。- https://learncryptography.com/hash-functions/hash-collision-attack

我目前的假設是,儘管 Oscar(攻擊者)可以輕鬆辨識衝突並為受害者提供一些具有相同雜湊輸出的文件,但這不僅僅是代表“受害者”通過接收不正確的文件而帶來的不便,需要存在具有相同雜湊輸出的惡意執行檔,這種可能性較小。

MD5 可以像校驗和一樣使用,即。檢測意外的數據損壞。檢測篡改並不是一個好的功能。

即使對於非加密雜湊,比較雜湊也可能有用的範例:

  • 丟棄的數據包 - 通過 TCP 傳遞的文件不是問題,但如果數據包被靜默丟棄,下載將失去字節。在這種情況下,MD5 幾乎肯定會產生不同的雜湊值。
  • 客戶端/伺服器錯誤 - 可以指定您要下載較小範圍的字節而不是整個文件。這就是為什麼您可以暫停下載或斷開連接並在不重新開始的情況下繼續下載的原因。現在這種情況相當少見,但偶爾我會發現下載會以這種方式損壞。當然,這是一個特定的錯誤,一般的錯誤也會導致 MD5 可以檢測到的問題。
  • 拼寫錯誤和文件名 - 不小心輸入了 executable.v.2.6.112 而不是 executable.v.2.6.121?如果文件內容不同,則 MD5 雜湊值可能會不同。當下載頁面上的文件名輸入錯誤或鏡像由於某種原因使用不同的文件名時,它也會有所幫助。
  • 鏡像問題 - 有時我下載一個文件,發現文件太小了。當我在十六進制編輯器中打開文件時,我發現我下載了一個 404 頁面或一些充滿廣告的域名停放頁面。
  • MITM 代理 - 一些“合法”服務執行實質上是 MITM 攻擊。例如,工作場所監控、審查系統、AD 注入 WIFI、反惡意軟體。如果活動的 MITM 代理對網路流量進行某種查找和替換,例如用“*** *****”替換“壞詞”,這可能會無意中破壞您的下載。

不過,最可能的原因可能是遺留問題。人們過去常常使用 MD5 來檢查下載完整性(其中“完整性”可以用於加密或非加密意義上的),因此網站繼續包含 MD5 雜湊,因為只要大多數人記得,他們就已經這樣做了。


現在假設您有一個具有足夠大輸出的理想加密雜湊函式。然後,您可以在受信任的 Web 伺服器上分發雜湊,並允許不太受信任的網站提供鏡像服務。

要在攻擊者無法影響受信任網站上出現的雜湊值(並且使用者正確比較雜湊值而不僅僅是前幾個字節)的條件下分發惡意文件,攻擊者可以創建有效替代文件的唯一方法是設法進行原像攻擊。

我不知道對 MD5 的實際原像攻擊。但我仍然(通常)不鼓勵使用它,因為有更好的選擇。


對於任何類型的文件,尤其是對於開源文件,使用抗衝突算法也是一個好主意。(MD5 不是一個。)如果抗衝突散列函式有足夠的輸出位,那麼可以肯定地說不存在多個(“現實世界”)文件與已發布的散列匹配。

如果有多個文件對應同一個輸出,有人可能會說“你應該發布trusted.iso。而且我願意做鏡像。” trusted.iso如果是良性的並且與他們的網站相關,他們可能會這樣做。然後攻擊者可以開始malware.iso從他的鏡像(trusted.iso顯然有名字)在md5sum trusted.iso==中分發md5sum malware.iso。然後他可以利用使用者對主網站(在本例中為 MD5)的信任來傳遞惡意軟體。


但我不確定我是否會列出我維護的網站的任何文件雜湊。如果可能的話,基於公鑰的身份驗證會更好。但這只有在使用者可以合法地信任您的公鑰並且他們進行身份驗證並且他們具有正確的身份驗證算法實現的情況下才有效。(經過身份驗證的 HTTPS 比普通的 HTTP 更好,而且它是無縫的,但仍然是一個有風險的替代方案。)

包含雜湊可能會在非密碼學家使用者群中**產生錯誤的安全感。**我可能使用 MD5 的一個原因是因為它不安全幾乎是常識。在這方面,它比使用“安全雜湊算法”1、2 或 3 更好。但我真的不知道哪種策略危害最小。

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