Hash

是否可以通過長度擴展攻擊來偽造任何文件的 SHA-256 校驗和?

  • September 1, 2021

在原始文件之後填充一些數據(即使用長度擴展攻擊)後,攻擊者能否為任何文件輕鬆創建假的 SHA-256 校驗和?

例如:

  1. Alice 通過在 ISO 之後填充額外數據來使用長度擴展攻擊創建偽造的 linux 安裝 ISO 文件,併計算 ISO 的偽造 SHA256 校驗和
  2. Bob 下載 Alice 的偽造 ISO 文件併計算 ISO 的 SHA256
  3. Bob 將他從偽造的 ISO 文件生成的 SHA256 校驗和與在官方 linux 發行版首頁上找到的校驗和進行比較。因為 Bob 的假 ISO 校驗和與官方 ISO 校驗和匹配,所以 Bob 沒有註意到他下載了假 ISO
  4. 如果 Bob 除了計算校驗和之外,還比較了偽造的 ISO 文件大小與官方 linux 發行版首頁上的原始 ISO 文件大小,他會注意到他有偽造的 ISO 而不是原始的

換句話說,當文件的文件大小不包括在驗證中時,SHA256 是否完全不安全?

  1. Bob 將他從偽造的 ISO 文件生成的 SHA256 校驗和與在官方 linux 發行版首頁上找到的校驗和進行比較。因為 Bob 的假 ISO 校驗和與官方 ISO 校驗和匹配,所以 Bob 沒有註意到他下載了假 ISO

我強調了錯誤的假設:校驗和不匹配。

給定未知消息的雜湊值,長度擴展攻擊允許某人做的事情是 $ M $ , 計算消息的雜湊值 $ M | pad | X $ (對於特定的字元串 $ pad $ 這取決於長度 $ M $ , 和任意字元串 $ X $ ).

然而,雜湊 $ M | pad | X $ 不會(一般而言,即除非極不可能的巧合)與 $ M $ .

如果是這樣,那將被視為雜湊衝突,因此反駁了 SHA256 的抗衝突性。

這是微不足道的嗎?

使雜湊匹配被認為是不可行的。是的,對手可以計算 $ Y = M | pad | X $ ,但是因為他知道自己的形象 $ Y $ 也就是說,他可以在沒有散列函式的任何特殊屬性的情況下計算它的散列。

不,長度擴展攻擊不是針對 hashes攻擊。當用於需要更強安全屬性的目的時,它們是對雜湊的攻擊。

Merkle-Damgård 雜湊的長度擴展計算允許某人計算 $ H(A||S) $ 對於特定的非空後綴 $ S $ 只知道 $ \mathsf{length}(A) $ 和 $ H(A) $ (但不是 $ A $ 本身)。對手無法選擇 $ S $ 或者 $ H(A||S) $ . 只有當安全協議的一部分是這樣時,這才可能成為攻擊 $ A $ 是秘密的,因為如果 $ A $ 是公開的,那麼每個人都可以計算 $ H(A||S) $ 對於任何後綴 $ S $ . 長度擴展的最著名的構造範例是,如果您嘗試通過定義一個雜湊函式來建構一個簡單的 MAC $ F_K(A) = H(K||A) $ 在哪裡 $ K $ 是一個密鑰。為了使它成為一個 MAC,它必須是不可行的計算 $ F_K(A’) $ 對於任何 $ A’ \ne A $ 即使知道 $ A $ 和 $ F_K(A) $ . 如果 $ H $ 是 Merkle-Damgård 雜湊,長度擴展計算允許對手計算 $ F_K(A||S) $ 對於一些非空 $ S $ 從 $ A $ 和 $ F_K(A) $ (和長度 $ K $ ), 不知道 $ K $ 本身。這不影響安全性 $ H $ 作為加密雜湊,但這意味著 $ F $ 不可能是安全的 MAC。

Merkle-Damgård 長度擴展屬性與散列函式的原像抗性並不矛盾。陳述原像抗性的一種流行方式是,除非通過蠻力,否則不可能找到原像。當以這種方式表達時,長度擴展看起來像一種攻擊,因為它允許找到原像 $ H(A||S) $ 從 $ H(A) $ . 但這個公式只是一個近似值。對原像電阻的更精確(但仍不完全精確)的定義是,為幾乎所有潛在輸出找到原像是不可行的,或者換句話說,幾乎沒有潛在輸出具有可以計算的原像。長度擴展計算意味著如果您計算了一張圖像,您將免費獲得一張原像。這最多會使您可以計算的原像數量翻倍(實際上要少得多,因為有很多 $ A_i $ 是這樣的,長度擴展 $ S_i $ 導致相同的擴展輸入 $ A_i S_i = A_j S_j $ )。不到兩倍幾乎沒有仍然幾乎沒有。

Merkle-Damgård 長度擴展屬性與雜湊函式的抗碰撞性並不矛盾。防撞意味著無法找到 $ A \ne B $ 這樣 $ H(A) = H(B) $ . 長度擴展可以找到 $ A \ne B $ 這樣 $ H(B) $ 可以從計算 $ H(A) $ , 但這不是碰撞,因為找到一個案例是不可行的 $ H(B) $ 將等於 $H(A)。

當雜湊用作文件校驗和時,重要的屬性是抗碰撞性,或者較弱的屬性第二原像抗性。正如我們剛剛看到的,長度擴展無法找到碰撞。

因為 Bob 的假 ISO 校驗和與官方 ISO 校驗和匹配

不,它沒有。假的 ISO 校驗和可以從官方的 ISO 校驗和計算出來,但它是一個不同的值。

當文件的文件大小不包括在驗證中時,SHA256 是否完全不安全?

不會。即使不包括文件大小,SHA256 也是安全的。包括文件大小沒有任何幫助。對於 MD4、MD5 和 SHA-1,它們以前被認為是安全的,但現在有已知的衝突,發現衝突的方法允許衝突消息具有相同的大小,因此包括文件大小也無濟於事。

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