Hash
對雜湊函式(SHA 256 或 SHA512)的已知文本攻擊
我在想下面關於雜湊函式的攻擊場景。假設三個二進制數 A(1000 位)、B(16 位)和 C(283 位)連接在一起,使用 SHA256 或 SHA512 生成 H(A||B||C)。在這裡,攻擊者知道 C。知道 C,攻擊者是否有可能從輸出 H(A||B||C) 中找到 A 或 B 或 (A||B)?如果是,攻擊是什麼以及如何預防?
謝謝你。
讓我們考慮 $ h = H(A\mathbin|B\mathbin|C) $ 對於 SHA-256 或 SHA-512,兩者都是 NIST 的基於 MD 的加密雜湊函式
- $ A $ 是 1000 位
- $ B $ 16 位,和
- $ C $ 283 位
我們進一步假設攻擊者知道 $ h $ 和 $ C $
蠻力搜尋
當然,攻擊者無法測試 1016 位未知數據以匹配 $ h $ . 比特幣礦工,最大的已知集體實體,可以觸及 $ \approx 2^{93} $ 這條路是封閉的。
主要圖像攻擊
為了找到原像,我們通常會尋找第一個 $ a2^n $ 輸入查找輸入 $ x $ 這樣 $ h=H(x) $ . 對於你的情況有點不同。
隨機嘗試 $ a2^n $ 範圍內的值 $ [2^{1299},2^{1300}] $ . 這有兩個問題;
- 這是不可行的
- 即使攻擊者找到了一個,結果的機率等於你的數據是$$ \frac{2^{1299}}{2^{256}} = \frac{1}{2^{1043}} $$對於 SHA-256,以及$$ \frac{2^{1299}}{2^{512}} = \frac{1}{2^{787}} $$對於 SHA=512。不切實際,這條路也是封閉的。
而且,我們知道 SHA-256 和 SHA-512 是抗原像的,這條路也是封閉的。
一個簡單的反駁
- 如果您的案子受到攻擊,那就是可以提取 $ A $ 和 $ B $ 從 $ H(A\mathbin|B\mathbin|C) $ 與知識 $ C $ , 然後我們可以使用對 SHA-256 和 SHA-512的長度擴展攻擊來執行一個原像。很簡單,對於給定的 $ h’ $ 和 $ h’ = SHA-256(x) $ , 執行長度擴展 $ h’’ = \operatorname{SHA-256}(x\mathbin|C’) $ , 然後提取 $ X $ 形式 $ h’’ $ 與知識 $ C’ $ . 我們沒有這種方法。
換句話說,擴展散列然後找到原像。路徑的盡頭。
如果您正在尋找一種使用密鑰進行散列的安全方法,顯而易見的方法是 HMAC,或者您可以使用 SHA3 的 KMAC。