檔案是否可以在保持其原始 SHA-1 雜湊值的情況下被惡意更改?

檔案是否可以在保持其原始 SHA-1 雜湊值的情況下被惡意更改?

根據文章以及許多其他文章,SHA-1 並不安全。

就我而言,我不關心密碼或數位憑證。我擔心文件的完整性。

檔案(例如 ISO 映像或執行檔)是否有可能被惡意變更為:

  • 維護原始檔案的 SHA-1 雜湊值,並且
  • 維護文件的整體內容和操作(但當然現在包括原來不存在的惡意內容)

在我看來,以產生 SHA-1 衝突的方式更改文件將使該文件完全無用。 ISO 將完全損壞,或者可執行檔將完全混亂,甚至不再是可執行檔。

但是,我的看法很可能是錯的。到目前為止,我在 Google 搜尋中沒有發現任何有關 SHA-1 持續適用於文件驗證的資訊。有什麼見解嗎?

答案1

目前還沒有人為 SHA-1 實現這一點。理論上是可能的,但仍然不實用。關於 SHA-1 不安全的報告只是意味著安全等級沒有我們希望的那麼高,這意味著我們不必像我們想像的那樣擔心這個問題。

產生與給定檔案具有相同 SHA-1 雜湊值的檔案比自己製作具有相同 SHA-1 雜湊值的兩個檔案更困難。據我們所知,世界上任何地方都沒有人完成這項更簡單的任務。但這並不意味著明天就不會發生。

答案2

理論上是可以的,但目前還沒有實現。

您正在尋找的稱為“哈希衝突”:兩個檔案具有相同的雜湊值。 SHA-1 等加密雜湊碼通常旨在使這一過程變得困難。由於 SHA-1 是 160 位元代碼,因此平均需要 2^159 次暴力嘗試才能找到重複。如果發現一種演算法比針對加密雜湊的演算法可靠地表現得更好,則該雜湊被視為「已損壞」。

MD-5 是一個非常糟糕的哈希的例子。它的強度應該是 128 位,平均需要 2^127 次嘗試。事實上,濫用已知漏洞,實際所需的嘗試次數可能低至 2^47 次。這比 2^127 小很多。事實上,它在現代計算集群上不到一天的時間就完成了。

我給這個例子是因為這最接近您想要使用 SHA-1 的方式。然而,這並不是密碼分析用於確保雜湊值不會被破壞的最常用方法。它們通常允許攻擊者選擇的兩個檔案之間發生衝突,而不是讓您選擇一個檔案而攻擊者尋求匹配它。這種攻擊的優點是更容易進行基準測試。如果我發現破解您的文件“很難”,這是否意味著另一個文件同樣強大?在這種攻擊中,攻擊者可以選擇兩個文件,這可以確保我們抓住最壞的情況。

這種攻擊允許使用一種有趣的技巧,稱為“生日攻擊長話短說,使用生日攻擊會使演算法的強度減半,因此 SHA-1 需要 2^80 次嘗試(平均),MD5 需要 2^64 次嘗試(平均)。

SHA-1 已知的攻擊會將其強度從 2^80 降低到 2^69。這對你來說並不重要。 2^69 次嘗試是長的時間。

然而,從歷史來看,我們發現哈希演算法不會自發性地被破壞,而是隨著時間的推移而被破壞。沒有人能破解像 MD-5 這樣的演算法,一夜之間將其從 2^64 變成 2^47。隨著時間的推移,這種情況就會發生,因為許多人發表了有關他們所使用的數學方法的論文。人們通常可以看到攻擊的複雜性從演算法一開始就慢慢下降(最好的攻擊通常是生日攻擊)。

事實上,我們看到碰撞發生了一些變化,這表明 SHA-1 看到了隧道盡頭的曙光。它仍然很強大,但可能希望升級到目前更安全的最新 SHA-3。

您確實應該從威脅模型的角度做出此類決策。如果攻擊者發生這些碰撞之一,他們會造成多少傷害。您的攻擊者是可以存取幾台筆記型電腦的腳本小子,還是可以使用整個超級運算叢集的政府。攻擊者必須在多大的時間窗口內破解哈希才會使其失效(密碼學的許多用途都涉及“守衛的變化”,例如密碼輪換)。所有這些都會影響您對碰撞的重視程度。

答案3

該文章中討論的 SHA-1 缺陷非常具體:它們允許攻擊者創建兩個雜湊值相同的東西(這稱為「衝突攻擊」)。然而,碰撞攻擊需要攻擊者控制兩個都涉及的文件。如果攻擊者無法控制原始文件,則碰撞攻擊不會讓他們找到具有相同雜湊值的另一個文件。

這對 TLS/SSL(以及一般簽章)很重要的原因是,攻擊者經常使用這些協議控制這兩個文件。 TLS 證書主要由請求者建立(他們無法控制的位元通常是可預測的),因此衝突讓他們可以製作合法證書和非法證書,對合法證書進行簽名,然後傳輸簽名。

對於文件來說,同樣的情況並不總是適用。如果您擔心製作該檔案的人是攻擊者(例如,他們會獨立驗證一件事情是好的,然後向您發送具有相同雜湊值的邪惡有效負載),則適用 SHA-1 攻擊,您應該查看逐步淘汰它(儘管這還不是關鍵,正如大衛·施瓦茨所提到的)。如果原始文件是可信的,那麼攻擊者就無法應用當前已知的SHA-1 攻擊,儘管您仍然應該考慮逐步淘汰它(如果可以的話)(如果您有選擇,請使用沒有已知攻擊的哈希,例如SHA- 2)。


回應「碰撞不會有用」-雖然攻擊並不要求攻擊者能夠獲得有用碰撞,把「碰撞」變成「有用的碰撞」一般來說並不難。許多文件格式都有相當大的空間,您可以在其中放置任何您想要的內容,而不會影響文件的功能;攻擊者通常可以修改它以獲得衝突(如果實際上可以找到衝突),同時將功能部分保留為他們想要的任何內容。 「學術攻擊」和「實際攻擊」之間的差距可能很大; 「任何碰撞」和「有用碰撞」之間的差距通常要小得多。


與演算法的選擇無關的更嚴重的問題是如何取得雜湊值。哈希所做的就是將問題從“獲取真實文件”轉移到“獲取真實哈希值”;從同一台伺服器並透過與檔案相同的連接類型發送的雜湊值對於惡意修改來說完全毫無價值(任何可以篡改檔案的攻擊者都可以篡改雜湊值)。只有當您對雜湊的信任程度超過對文件的信任程度時,雜湊才有用;雖然有時會出現這種情況(種子、鏡像),但在情況並非如此時,通常會使用它們。因此,每當使用哈希值進行完整性驗證時,您都應該非常小心。

答案4

一般的問題中提到的文章的要點是:SHA1 已棄用,應該在您還有時間順利完成時逐步淘汰。在某些領域,自從谷歌和微軟強制執行最後期限以來,時間已經不多了。

經驗法則已棄用技術:

  • 如果您進行新設計或新增功能,請勿使用它 (SHA1)。
  • 如果您維護舊的東西,請制定何時更換它的計劃 (SHA1)。

摘自 Bruce Schneier 2012 年部落格文章的摘要: “關鍵是我們社區現在需要開始從 SHA-1 遷移到 SHA-2/SHA-3。”

相關內容