在饋送到 keccak256 的 40 字節輸入中交換單個位。假設前 20 個字節的變化不會導致相同的雜湊值是否安全?
我有以下數據(從下面的二進製表示為十六進制),其中低字節在第二種情況下由攻擊者控制:
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 百分比的輸出位。
一般來說,如果你想找到對一個好的散列函式的攻擊,你需要一定程度的自由度。你正在尋找的是相反的。