Hash
SHA-3 塊大小/比特率計算?
查看不同的論文和線上文件,我發現 SHA-3 的塊大小如下:
- SHA3-224:1152 位
- SHA3-256:1088 位
- SHA3-384:832 位
- SHA3-512:576 位
不知何故,我無法從規範中找到(計算)這些數字:
- http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf
- http://keccak.noekeon.org/Keccak-implementation-3.0.pdf
這些塊大小是如何計算的,分別在哪裡指定?
首先,在 SHA-3 的情況下,我們不稱之為塊大小,而是比特率。
我們定義海綿函式表示為 $ \operatorname{KECCAK}[r,c] $ 通過應用算法 1中指定的海綿結構 $ \operatorname{KECCAK-}!f[r+c] $ ,多速率填充和比特率 $ r $ .
$$ \operatorname{KECCAK}[r,c] = \operatorname{SPONGE}[\operatorname{KECCAK-}!f[r + c], \mathrm{pad10^∗1}, r] $$
$ c $ 是容量,它定義了海綿的安全級別。
價值 $ b = r + c $ 稱為狀態的寬度。它是 $ 25 $ , $ 50 $ , $ 100 $ , $ 200 $ , $ 400 $ , $ 800 $ 或者 $ 1600 $ .
在 SHA-3 競賽範圍內,我們提出了最大的排列,即 $ \operatorname{KECCAK-}!f[1600] $ .
所以在我們的案例中 $ b = 1600 $ .
符號 $ \operatorname{SHA3-}!x(M) $ 生成摘要 $ x $ 位長並且有安全聲明 $ d = x $ . 不贅述, $ d $ 可以看作 $ c/2 $ (參見此處和此處,第 7 章,第 71 頁)。
因此在:
- $ \operatorname{SHA3-224}(M) $ , $ c = 2\times224 = 448 $ 和 $ r = 1600 - c = 1152 $
- $ \operatorname{SHA3-256}(M) $ , $ c = 2\times256 = 512 $ 和 $ r = 1600 - c = 1088 $
- $ \operatorname{SHA3-384}(M) $ , $ c = 2\times384 = 768 $ 和 $ r = 1600 - c = 832 $
- $ \operatorname{SHA3-512}(M) $ , $ c = 2\times512 = 1024 $ 和 $ r = 1600 - c = 576 $
因此:
- $ \operatorname{SHA3-224}(M) = \operatorname{KECCAK}[1152,448] $ 和 $ \mathit{bitrate} = 1152 $
- $ \operatorname{SHA3-256}(M) = \operatorname{KECCAK}[1088,512] $ 和 $ \mathit{bitrate} = 1088 $
- $ \operatorname{SHA3-384}(M) = \operatorname{KECCAK}[832,768] $ 和 $ \mathit{bitrate} = 832 $
- $ \operatorname{SHA3-512}(M) = \operatorname{KECCAK}[576,1024] $ 和 $ \mathit{bitrate} = 576 $
由於算法的速度與 $ r $ (比特率吸收),安全性越高,功能越慢。