題 為什麼網站提供文件的MD5哈希?


為什麼網站提供文件的MD5哈希?這有助於您驗證文件的完整性/來源?不注意你的URL是否足夠安全?


4
2017-10-18 13:13


起源


這不是一個編程問題。也許更好的服務器故障?哈希的想法是你可以更好地檢測文件的損壞 - 無論是故意還是有點腐爛。 - Gray
每2 ^ 10到2 ^ 12位被搞砸了,數據在包中發送,你也包含哈希(如果它不匹配包重新發送。),因為這個正常的人甚至沒有註意到這一點。在網絡負載較重或耦合較多的原因導致失敗率上升。 MD5顯示出通過測試的變化很小(差異很大)。


答案:


它有助於驗證一旦完成下載文件,您就擁有了位於其服務器上的相同文件。

通過哈希函數運行本地文件後,如果在您的副本與他們的​​副本之間發現最微小的差異,則會導致您獲得與其發布的哈希不同的哈希值。


10
2017-10-18 13:16





如果網站被黑客攻擊,MD5哈希不會保護您,因為黑客也會更改MD5和。如果您擁有從其他地方獲得的公鑰副本,或通過檢查密鑰上的簽名驗證它是正確的密鑰,則GPG簽名(在單獨的文件中)將防止這種情況發生。

MD5哈希的好處是確保文件在下載過程中不會被破壞。 TCP校驗和並不是文件傳輸過程中可能發生的所有錯誤(儘管這些錯誤很少見),並且我在之前的下載過程中看到了ISO映像損壞。


8
2017-10-18 13:17





安全性是一個(重要的)事情,但我認為這也是為了確保您完整地下載了該文件。


2
2017-10-18 13:18



在對文件進行散列處理時也會檢查,但文件大小更容易用於此目的。


理論上,如果兩個文件完全相同(儘管發生衝突),它們應該生成相同的哈希值。

您可以使用服務器端語言輕鬆提供它,例如ol'trusty PHP ...

echo md5_file('my_file.zip');

1
2017-10-18 13:15



雖然這將為每個頁面視圖重新生成MD5哈希值(如果沒有緩存),並且為大文件(數百兆字節,例如Linux發行版)生成MD5哈希可能需要幾分鐘 - PHP通常會吞下,而您不希望用戶等待幾分鐘來生成頁面。有適用於所有操作系統的md5命令行工具,最好使用這些工具並“靜態地”將這些工具添加到列表'o downloads(或公共ftp文件夾)中。 - Cthulhu
@Cthulhu是的,我試圖讓這個例子保持相關性 - 但你會想要緩存那個哈希值,或者更好的是在獲取文件時計算一次 - 或者讓後台進程執行它。 - alex


它提供了對可能的防禦 中間人攻擊。假設某個惡意方以某種方式能夠劫持該請求 文件,但無法改變網頁本身的文本。 MITM將能夠讓您下載不同的字節序列,但無法進行散列 他的 文件匹配qweb頁面上引用的哈希值 真實 文件。


1
2017-10-18 13:19



如果您確定已從受信任的來源獲取引用哈希,則只會受到MITM攻擊的保護。 - Bruno
@Bruno:然而,儘管現在情況並非常常具有更高的連接速度,但您可以從官方網站獲取哈希值,並從其他人那裡獲取本地媒體上的文件(即 真實 男人在中間;)。這也是BitTorrent的原理。


有幾個原因:

  • 中間人攻擊可能會改變您的下載並在下載中註入病毒或木馬或其他惡意代碼
  • 下載時可能會在比特流中發生某些損壞,並且下載的文件可能會被破壞。
  • 可能涉及代理服務器,可能會提前切斷連接。
  • 一些較舊的瀏覽器無法下載大於2GB的文件,因此下載較大的文件也意味著下載損壞。
  • 它還允許用戶檢查鏡像服務器上的“相同”文件是否真的是同一個文件,而不是更改的版本。

1
2017-10-18 13:20





有時,傳輸的文件可能是由攻擊者故意或由於連接錯誤而損壞。

加密哈希函數(如MD5)旨在在原始文件發生更改時進行更改。因此,您可以檢測到此類更改。

請注意,如果您希望防止有意修改(由攻擊者製作),您需要一種方法來驗證您獲得的參考哈希是否正確以及來自可信來源(例如,通過PGP或X.509證書進行簽名)。您可能還需要更好的哈希算法(例如SHA-1,SHA-256),因為針對MD5已經證明了衝突攻擊。


1
2017-10-18 13:20