考慮一下。許多下載了軟件的網站還提供了MD5或SHA1哈希,供用戶驗證下載文件的完整性。但是,這些站點中很少有一個在站點本身上實際使用HTTPS加密或數字簽名。同一源(甚至是另一個未經身份驗證的源),對文件進行哈希處理的真正價值是什麼?這樣會不會建立一種錯誤的安全感,因為(在沒有數字簽名的情況下)下載和哈希都可能在用戶不知情的情況下被篡改了?
考慮一下。許多下載了軟件的網站還提供了MD5或SHA1哈希,供用戶驗證下載文件的完整性。但是,這些站點中很少有一個在站點本身上實際使用HTTPS加密或數字簽名。同一源(甚至是另一個未經身份驗證的源),對文件進行哈希處理的真正價值是什麼?這樣會不會建立一種錯誤的安全感,因為(在沒有數字簽名的情況下)下載和哈希都可能在用戶不知情的情況下被篡改了?
因此,如果要從實際上是未經身份驗證的源下載文件,並使用來自同一源(甚至另一個未經身份驗證的源)的哈希值對其進行驗證,則對文件進行哈希處理的真正價值是什麼嗎?該文件可從本網站下載。
但是,實際上並沒有太多安全性。熟練的破解者可以用惡意修改的版本替換文件,並用與修改後的文件匹配的哈希替換;或者他可以通過網絡對請求進行MITM,並用自己的請求文件和自己的哈希表替換。
那裡的收益確實是有限的。如您所指出的,如果您可以替換站點上的一件事,則可能可以替換兩者。
但這確實有一些好處:
通過使用具有公鑰/私鑰對的文件簽名來增加安全性,對於大多數應用程序,實際的好處並不比沒有密鑰大。如果我將密鑰發佈在網站上並簽署所有內容而不是發布哈希,則攻擊者可以獲得與替換哈希相同的替換密鑰的效果。真正具有獨立分佈的大型項目需要這個額外的層(我想到了Debian),但是我認為很少有人會從中受益。
為使散列具有一些與安全性相關的值,必須同時滿足以下兩個條件:
因為文件也使用HTTPS進行服務,則哈希往往毫無意義:SSL已經確保了傳輸期間的完整性。
哈希無法保護攻擊者控制服務器,因為攻擊者可以這樣做就像他可以修改文件一樣修改哈希。
發布的哈希的有用性示例是當您在某個日期下載文件,然後稍後再檢查時因此,您擁有的副本是正確的,因為您不一定信任本地存儲的完整性(例如,該存儲在USB閃存盤上,而該USB閃存盤可能被有惡意的人暫時掠奪了)。 另一個例子是當下載本身來自p2p網絡時,因為 這樣的東西對於將批量軟件分發給許多客戶端非常有效(Blizzard Downloader就是這樣做的):使用p2p獲取文件,然後從HTTPS主站點獲取較小的哈希值。 第三個例子(我專業遇到的)是在繁重的審核條件下(例如,創建新的根CA)構建受信任的系統時:您希望審核員能夠驗證所使用的軟件是正版的。如果散列文件是通過HTTPS分發的,則審核員只需對照本地存檔檢查它即可;否則,審核員必須見證整個下載過程。考慮到審計員的小時費率,最好使用散列法。
沒錯,僅具有原始哈希是有限的好處,因為您還需要安全地分發哈希,而且大多數人不知道如何正確檢查哈希或解決許多可能的問題。
獲得良好安全性的正確方法是使用公鑰技術對哈希進行簽名,並將其無縫集成到整個軟件分發方案中。仍然有必要安全地分發公共密鑰,但這只能執行一次,例如安裝操作系統時。我認為這基本上是Windows和MacOS進行的OS更新以及Office等一些主要軟件包所做的。
最重要的是,幾乎所需的所有軟件都由相同的標準密鑰覆蓋。這實際上是大多數開源軟件發行版(例如Debian,Ubuntu,Red Hat,Suse等)中發生的事情。它們確實安全地分發了數以萬計的軟件包,所有軟件包均使用作為發行版一部分進行管理的密鑰自動簽名,因此高度安全。而且大多數情況下,無需任何人工檢查即可完成
。因此,如果要從實際上是未經身份驗證的源下載文件,並使用來自同一源(甚至是其他未經身份驗證的源)的哈希值對其進行驗證,則對文件進行哈希處理的真正價值是什麼?
在這種情況下,哈希直接位於指向文件鏈接的旁邊,其價值主要是確保文件在傳輸過程中不會損壞或損壞。
從安全角度來看,您是對的;這幾乎沒有任何價值證明文件未被篡改,因為任何可以進入並上傳被黑文件(或更改鏈接以指向被黑副本)的任何人都可以替換旁邊的哈希。這就是為什麼當目標是安全性時幾乎從來沒有這樣做過的原因。
通常,當提供哈希摘要時,它直接來自軟件生產商。他們提供下載軟件,但不願意將軟件直接託管在自己的服務器上。他們是一家軟件公司,而不是託管公司,並且沒有自己服務器內外的帶寬來允許數千個並發的寬帶下載。因此,他們從雲提供商那裡租用空間和帶寬以提供相同的服務。
現在,他們不再控制該雲;而是,他們無法控制該雲。這是由另一家公司維護的另一套系統,“我的房子,我的規則”。軟件供應商擔心黑客入侵,並有很好的理由擔心自己的好名聲會因託管公司的妥協而受到損害。這是一種常見的攻擊方法,它是軟件公司在軟件上的名稱,它使攻擊者可以進入公司用戶的網絡並造成破壞。
該解決方案是讓軟件生產商對託管站點上要下載的文件進行哈希處理,並在其控制下從其自己的系統中顯示哈希值。現在,您(最終用戶)可以從大型託管站點下載軟件,並通過轉到軟件公司的站點並將其列出的文件哈希與您從中計算出的文件哈希值進行比較,來驗證您所得到的是軟件公司在此處存放的內容。下載的文件。與託管實際文件進行下載相比,軟件公司佔用的帶寬要少得多。現在,不再存在任何漏洞。攻擊者必須同時入侵雲和軟件生產者的站點,以便將文件放置在可以通過哈希檢查的位置。他們可以僅通過入侵託管站點並替換文件來搞亂那些不想打擾檢查哈希的人(很多人),或者可以弄亂執行檢查哈希的人通過對軟件提供商的站點進行黑客攻擊並更改散列值,使真實文件的哈希不再匹配,但是,二者只能偽裝成軟件公司自己的被黑客入侵的文件,這更加困難。
一般來說,是的-來自http站點的哈希值幾乎無法保證數據來自受信任的來源。
但這取決於您對安全性的定義,即威脅模型。安全性的一個方面是數據完整性,檢查哈希通常可以幫助您避免浪費時間在錯誤的CDROM或損壞的下載上。
從提供良好身份驗證的軟件包系統中獲取軟件要好得多。從程序員到版本控制,再到打包和分發的所有方式。
對於家庭用戶,通常“足夠”地保證文件正確(並且我的意思是-下載有效且沒有損壞)-儘管從安全角度來看,攻擊者可以輕鬆地替換文件如果文件存儲在相同位置,則將其作為文件散列。
對於公司安全人員或更敏感的東西,您可能希望通過以下方式真正驗證散列:帶外機制。
在您描述的情況下,簽名的唯一用途實際上只是確保文件未損壞。
在某些情況下,即使未通過安全連接下載哈希也可以證明檢查文件的哈希具有安全性:
仍然,當通過不安全的連接提供哈希時,主要優點是可以驗證傳輸的文件在傳輸過程中沒有損壞。如今,這種情況並不經常發生,但是確實發生了。刻錄損壞的Linux ISO可能會導致安裝損壞,只有在為時已晚時才可能注意到。用損壞的下載內容刷新BIOS可能會更糟。
要考慮的另一件事是,儘管提供哈希值確實可能帶來錯誤的安全感,但下載文件的人很有可能會即使沒有哈希也下載了它。在這種情況下,哈希提供的少量安全利益可能根本不佔任何優勢。
@Iszi這是一個短篇小說...(好吧,也許不是“短篇” ...對不起:P)
假設您要下載 VLC 。對於Windows。最新版本(1.1.5版)。好的嗎?
您的第一站應該是 http://www.videolan.org(官方站點)。但是您可以找到並獲得來自5.780.000個網站的“相同”編。 對嗎?(谷歌“ vlc下載1.1.5”)。
官方站點說文件的MD5是“ 988bc05f43e0790c6c0fd67118821d42”(請參閱鏈接)。您可以從官方 videolan.org WEB服務器(無HTTPS )獲得此編(1.1.5版)。或單擊鏈接,重定向到Sourceforge並獲取它。再次使用否HTTPS 。但是Sourceforge是一個 big 名稱。值得信賴對?你猜怎麼著。您的擁有VLC的叔叔會通過電子郵件向您發送Rapidshare鏈接以進行下載。和您的朋友也一起工作。
因此,您從這些“ 可信賴的來源”下載了該文件。
朋友,網站,版本,叔叔。您相信他們所有人。對 ?我不這麼認為。至少你不應該。
有一種(也是唯一一種)方法來檢查您得到的內容,是原始文件。不變,不變。沒動。那就是比較它的哈希值。但是用什麼呢? 帶有來自官方來源的哈希值。
沒有HTTP(S),沒有數字簽名,沒有“安全”或“受信任”服務器。沒有。您不需要這些。數據完整性是您的朋友。
PGP / GnuPG也是如此。您可以檢測到消息自完成以來是否已被更改。哈希與修改後的文件相匹配
可以,發現存在 MD5衝突 。還有 SHA-1碰撞。但是要引用 Wikipedia:
當今普遍使用的加密哈希函數被設計為具有抗衝突性,但只有極少數絕對是這樣。尤其是MD5和SHA-1都已經發布了比蠻力更有效的發現碰撞的技術。但是,某些壓縮函數證明,找到衝突至少與某些困難的數學問題(例如整數分解或離散對數)一樣困難。這些功能被稱為證明是安全的。
我不認為“熟練的破解者”可以找到“不良版本”或製作一個文件/二進製文件/無論您要使用的是什麼原始,並製作,它都具有與原始文件相同的相同 MD5 / SHA-1。並使其看起來相同(圖片)。或使用相同的文件大小,甚至使其運行或變得有意義(文本)。差遠了。他可以使它無法檢測到防病毒軟件(如果是惡意軟件)。那是個不同的故事。但據報導,有一些非常嚴重的衝突案例。
因此,請從任何您喜歡的來源下載,但要比較原始來源的哈希值。並且總是有一個原始來源。
如果您要認真考慮,擁有多個站點來託管可下載的內容以及哈希鍵將阻止大多數工廠更換攻擊。再次假設是威脅模型,在此模型中,攻擊者將不得不在原位而不是在運輸過程中進行替換。即使只有一個來源,副本也將阻止任何人替換文件和哈希。
而且,文件源可能會因下載而損壞。