繁體中文

開發者工具 · SHA 雜湊計算器

雪崩效應:為什麼一個更改的字元會重寫 SHA 雜湊值

· 工作原理

sha-256 密碼學 安全 驗證

兩個 SHA-256 摘要逐位顯示,其中大約一半的位元在它們之間反轉,說明了單一字元變更帶來的雪崩效應
原始 ToolAcre 向量圖

改變一個字母,大約一半的輸出位就會翻轉。這篇文章解釋了雪崩特性、為什麼它對於篡改檢測至關重要,以及 SHA-2 的回合如何實現它。

期望哈希值稍微改變——大多數人帶來的直覺以及為什麼設計故意打破它

大多數人期望相似的輸入產生相似的輸出。更改檔案中的一個字符,摘要應該會略有變化。相反,加密雜湊的設計目的恰恰相反:輸入中的一位變更應該會翻轉大約一半的輸出位,這是不可預測的。這種特性稱為雪崩效應,它是有意而為之的。該設計有一個特定的目的:篡改檢測。

雪崩效應就是為什麼「幾乎匹配」在哈希世界中不是一個概念。哈希值完全匹配,或不匹配。不存在「夠接近」。此屬性使雜湊對於完整性檢查和內容尋址非常有用,並使弱散列演演算法無法用於安全目的。

雪崩意味著廣泛的輸出擴散;本文並沒有提出無來源的精確機率主張

形式上,雪崩效應意味著對於相差一位的兩個輸入,輸出摘要應相差約 50% 的位元。對於 SHA-256(輸出的 256 bits),變更一個輸入位元應大致翻轉 128 輸出位元。效果並不確切;它是一個統計屬性。但它很強大:在實踐中,輸入的每一位都與輸出的每一位徹底混合。

為什麼大約一半?因為真正的隨機輸出與另一個隨機輸出平均相差恰好一半(根據鴿巢原理和基本統計)。一個好的雜湊函數近似於隨機性;它產生的輸出似乎沒有可辨別的模式。平均翻轉一半的位元是隨機性的標誌。如果雜湊僅翻轉 10% 的位,攻擊者就可以找到模式並利用它們。

為什麼篡改檢測需要它 - 對文件的小編輯不得產生快速瀏覽即可接受的幾乎相同的哈希值

篡改檢測依賴雪崩。如果您下載檔案並計算其 SHA-256,則預期摘要為 ba7816...(作為範例)。攻擊者透過更改一個位元組來修改檔案。新的摘要從 ba7816... 更改為 3d4e92...(完全不同)。當您根據預期摘要驗證檔案時,會立即發現完全不符。沒有任何誤解的餘地:檔案已被篡改。

如果沒有雪崩,攻擊者可以更改一個位元組,並摘要可能只會稍微移動到 ba7817...(一個十六進位數字不同)。隨意比較可能會忽略其中的差異。攻擊者甚至可以搜尋產生以 ba78 開頭的摘要的輸入,聲稱該檔案是真實的。 Avalanche 使得這個過程變得異常昂貴:要找到摘要以相同的四個十六進位數字開頭的兩個輸入,需要比設計允許的更多工作。

輪次分佈如何改變-旋轉、加法和非線性函數對整個狀態產生一位影響

SHA-256 中的回合(以及 SHA-512 中的回合)旨在傳播變更。每輪使用非線性函數(選擇、多數)和旋轉來混合資料。輸入中的一位變化會進入訊息調度並在各輪中傳播。旋轉會改變位的位置。非線性函數隱藏了位元的影響:在選擇操作中更改控制位可以翻轉任何輸出位,具體取決於所選的資料。

初始雜湊常數、訊息調度常數、輪換量和輪數均被選為最大化雪崩效應。這些數字不是任意的;它們來自 SHA-2 規範,並已被廣泛地進行了密碼分析。對常數或輪數的任何更改都會產生不同的演演算法(可能是較弱的演演算法)。

工作範例 — 對兩個相差一個字元的輸入進行雜湊處理並逐位比較摘要

測試雪崩很簡單。對輸入 abc 進行雜湊處理並記下摘要。然後散列 abc 後面跟著一個空格,或用其他字元替換一個字元:abd。比較十六進制輸出。對於 SHA-256,大約一半的 64 十六進位數字會有所不同。數一下他們。 ToolAcre 貼文中的測試向量:abc 產生 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad。空字串產生 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855。這些摘要沒有共同的十六進制數字。

在 ToolAcre 計算器上嘗試使用任何輸入。散列一句話。然後更改一個字母並再次散列。計算不同的十六進制數字。您會發現大約一半(在大多數情況下,64 中的 32)有所不同。這就是雪崩效應的作用。這是演演算法設計的特性,而不是巧合。

Avalanche 不提供相似性搜尋或本身量化碰撞阻力

Avalanche 不會建立相似性搜尋或近似匹配。如果你有一個摘要 ba7816...並你想找到一個類似的摘要,你沒有捷徑。您必須猜測或暴力破解候選輸入,對每個輸入進行雜湊處理,並檢查是否完全匹配。雪崩效應使得每個猜測都同樣可能產生相似或完全不同的輸出。一些雜湊演演算法(稱為局部敏感雜湊)旨在保留相似性;它們對於近乎重複的檢測和聚類很有用,但它們不是加密雜湊。

Avalanche 也不能防止確定的碰撞搜尋。密碼分析者仍然可以尋找產生相同摘要的兩個不同輸入,但搜尋空間巨大。確定的碰撞搜尋是與視覺擴散不同的問題。本文沒有引用生日相關的數字或硬體時間表,因為它沒有在這裡匯出。可防禦的邊界是雪崩本身既不能證明也不能量化碰撞阻力。

重點:沒有僥倖心理 — 在 ToolAcre SHA 雜湊計算器中嘗試單字元實驗並觀察整個摘要變化

ToolAcre SHA 雜湊計算器透過瀏覽器的 Web Crypto 實作執行 SHA 演演算法。您可以用它來自行驗證雪崩。演演算法中的每一點精度都會輸入到輸出中,並 Web Crypto 實作由瀏覽器供應商審核和維護。您將看到真實的演演算法在真實的輸入上執行。一個字符的變化會重寫整個摘要這違反直覺的特性並不是缺陷;而是一種缺陷。這是使散列起作用的功能。

當您使用雜湊進行完整性檢查時,您依賴的是雪崩。當您使用它進行內容尋址(如容器映像摘要)時,您依賴微小的變更會產生截然不同的摘要的屬性。當您在數位簽章中使用它時(其中簽章是透過訊息的雜湊值計算的),雪崩效應可確保竄改訊息會產生可偵測到的變更。該屬性是基於哈希的安全性的基礎。