SHA3 海綿構造的直覺
我想對海綿結構的安全性有一些直覺。我指的是這個圖表和符號。
讓我們考慮一下我們不適用的情況 $ f $ 在擠壓階段,即我們簡單地取r空間中的位( $ Z_0 $ 在圖中)在吸收結束時呼叫我們消息的雜湊值。
維基百科文章說,可以替換 XOR 函式並簡單地選擇覆蓋 $ r $ 位與消息而不是使用 XOR。如果這樣做,安全級別不會受到影響,並且讓我更容易理解。
閱讀其他一些答案,似乎保持 SHA3 安全的核心是缺乏對狀態的了解 $ c $ 在最後一步。但這似乎有問題。
例如,假設我有一條已知消息的雜湊(因此內部狀態 $ c $ 對應於所有階段的此消息)並希望修改最後一部分,即 $ P_{n-1} $ 位。看來我有一個非常本地化的問題,即我知道 $ (r_1, c_1) \xrightarrow{f} (r_2, c_2) $ 並且必須找到 $ (r_1’, c_1) \xrightarrow{f} (r_2, c_2’) $ 對於任意 $ c_2’ $ . 如果我想為任何中間塊做這件事, $ P_k $ , 然後 $ (r_1’, c_1) \xrightarrow{f} (r_2’, c_2) $ 是約束,其中 $ r_2’ $ 是任意的。這是因為比特率在中間塊中被覆蓋,因此部分輸出可以是任意的,而對於最後一個塊,容量狀態沒有被使用,所以它可以是任意的。而且 $ f $ 只是一個排列,所以這個任務似乎……不太難?
我想補充一下,我知道數百名非常聰明的人嘗試了各種攻擊但都失敗了,所以這有一個很好的解決方案。這不是一些瘋狂的“我破壞了 SHA3”的文章——它更像是一個“我錯過了 SHA3 的哪個方面”的文章!
因此,如果它只是我們得出的結論的 0 和 1 的排列,那麼找到一個滿足我在排列結果中提到的約束的替代消息字元串有什麼難的?
更準確地說,它是一個偽隨機排列 $ \mathbb{Z}{2^{1600}} $ 至 $ \mathbb{Z}{2^{1600}} $ . 不僅僅是 0 和 1 改變位置。
由於大小 $ \mathbb{Z}_{2^{1600}} $ (其中包含 $ 2^{1600} $ 元素!),輸入和輸出以某種隨機(但確定性的方式)相關,如果不實際評估給定輸入的排列(或其倒數)並檢查結果,則無法預測。
有諸如線性和差分密碼分析之類的工具可用於嘗試和預測輸出,但 keccak-f 是明確設計的,因此使用這些技術在計算上是難以處理的。
看來我有一個非常本地化的問題
**您不能隔離狀態的一部分並獨立處理它們。**更改狀態的一位,然後應用排列以不可預測的方式將這些更改擴散到整個狀態。