Hash

在饋送到 keccak256 的 40 字節輸入中交換單個位。假設前 20 個字節的變化不會導致相同的雜湊值是否安全?

  • October 16, 2019

我有以下數據(從下面的二進製表示為十六進制),其中低字節在第二種情況下由攻擊者控制:

0x00: 000000000000000000000000cf269986 ????????????????
0x10: da781407b0eeeac3ea79ac1c9d857d38 ?x???????y?????8
0x20: 00000000000000000000000000000000 ????????????????
0x30: 00000000000000000000000000000001 ????????????????
0x40: 00000000000000000000000000000000 ????????????????

哪個0x1350c327906a2da929ed2a625e133cdfc3aaa945d7540e93b1266293dd2c1d11

0x00: 000000000000000000000000cf269986 ????????????????
0x10: da781407b0eeeac3ea79ac1c9d857d38 ?x???????y?????8
0x20: 00000000000000000000000000000000 ????????????????
0x30: 00000000000000000000000000000002 ????????????????
0x40: 00000000000000000000000000000000 ????????????????

哪個0xf11930e4cc6cdaaaa9da21243f512da3fba796ffa7c74870669af9cee3a06c0c。因為使用0x2左移0x1一位(但兩個輸入保持相同的長度)。

即使更改大約是一個字節,也無法修改第二種情況的前 20 個字節,因此雜湊等於0x1350c327906a2da929ed2a625e133cdfc3aaa945d7540e93b1266293dd2c1d11(第一種情況的雜湊)而不需要短期內不可用的計算能力,對嗎?

沒有比一般攻擊更快的 SHA3 系列已知攻擊。

您的問題是第二次原像攻擊:給出消息 $ m_1 $ 查找另一條消息 $ m_2 $ 這樣 $ m_1 \neq m_2 $ 和 $ Hash(m_1)=Hash(m_2) $ .

SHA3​​-256 有 $ 2^{256} $ 2nd 原像抗性。

現在,您只允許攻擊者前 20 字節,即 160 位數據。攻擊者必須嘗試找到 $ m’ $ 如果存在。他不能暴力破解 160 位空間來執行通用攻擊。那是不可達的,即使是 128 位也不可達。

比特幣礦工最新的 SHA-256雜湊率峰值是 $ 2^{66} $ 每秒雜湊值和 $ 2^{83} $ 從 2019 年 9 月 29日起每天108464285TH/s

另一個問題是:這第二個原像是否存在?以微不足道的機率,不!

即使變化大約是一個字節,

我們希望雜湊函式產生雪崩效應:單個位翻轉應隨機翻轉 %50 百分比的輸出位。

一般來說,如果你想找到對一個好的散列函式的攻擊,你需要一定程度的自由度。你正在尋找的是相反的。

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