是否可以通過長度擴展攻擊來偽造任何文件的 SHA-256 校驗和?
在原始文件之後填充一些數據(即使用長度擴展攻擊)後,攻擊者能否為任何文件輕鬆創建假的 SHA-256 校驗和?
例如:
- Alice 通過在 ISO 之後填充額外數據來使用長度擴展攻擊創建偽造的 linux 安裝 ISO 文件,併計算 ISO 的偽造 SHA256 校驗和
- Bob 下載 Alice 的偽造 ISO 文件併計算 ISO 的 SHA256
- Bob 將他從偽造的 ISO 文件生成的 SHA256 校驗和與在官方 linux 發行版首頁上找到的校驗和進行比較。因為 Bob 的假 ISO 校驗和與官方 ISO 校驗和匹配,所以 Bob 沒有註意到他下載了假 ISO
- 如果 Bob 除了計算校驗和之外,還比較了偽造的 ISO 文件大小與官方 linux 發行版首頁上的原始 ISO 文件大小,他會注意到他有偽造的 ISO 而不是原始的
換句話說,當文件的文件大小不包括在驗證中時,SHA256 是否完全不安全?
- 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,它們以前被認為是安全的,但現在有已知的衝突,發現衝突的方法允許衝突消息具有相同的大小,因此包括文件大小也無濟於事。