Keccak SHA3 雜湊算法中的填充
在 FIPS-202 規範中,沒有明確提到 SHA3 所需的填充。因此我們分析了 SHA3 的 NIST 測試向量,其中指出在消息摘要中附加“0x06”(從不使用 1 後跟“j”零,然後是 FIPS-202 中指定的 1),這與規範相矛盾。
NIST 測試向量的連結是:-
http://csrc.nist.gov/groups/ST/toolkit/examples.html#aHashing
http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA3-224_Msg0.pdf
你能澄清一下SHA3的填充機制嗎?
在 FIPS-202 規範中,沒有明確提到 SHA3 所需的填充。
我不敢苟同。來自FIPS 202. B2 節:
對於大多數應用程序,消息是字節對齊的,即 $ len(M) = 8m $ 對於非負整數 $ m $ .
在這種情況下,總字節數,表示為 $ q $ ,附加到消息的確定如下 $ m $ 和費率 $ r $ :
$$ q = \frac{r}{8} – (m \bmod{\frac{r}{8}}) $$ 的價值 $ q $ 在這種情況下,根據 Sec.1 中指定的轉換函式確定這些字節的十六進制形式。B.1。產生的填充消息總結在表 6 中:
+-------------------------+--------------------------------+ | | | | Number of padding bytes | Padded message | | | | +----------------------------------------------------------+ | | | | q = 1 | M || 0x86 | | | | | q = 2 | M || 0x0680 | | | | | q > 2 | M || 0x06 || 0x00... || 0x80 | | | | +-------------------------+--------------------------------+
該符號
0x00...
表示由以下組成的字元串 $ q – 2 $ “零”字節。如果您查看您的測試向量,對於 $ \operatorname{SHA3-224} $ . $ 224 $ 方法 $ 224 $ 一點安全感。所以我們有 $ c = 224 \times 2 = 448 $ 和 $ r = 1600 - c = 1152 $ .
因為消息是空的, $ len(M) = 0 $ , 所以 $ m = 0 $ . 因此
$$ q = \frac{1152}{8} - 0 \bmod \frac{1152}{8} = 144 $$ 因此,我們處於第三種情況:( $ q > 2 $ ).
填充將是 :
0x06 || 144 - 2 zeros || 0x80
。
因此我們找到了data to be absorbed
:06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80
06
然後是 2840
(或 14200
),然後是80
. 提供以下內容00
以表明在吸收過程中容量不會改變。
您的困惑來自 SHA-03 域,填充指定為 10*1;但是,當您將域添加到填充時,您會得到:
域結果用於 01 M||0110*1 SHA3-224 到 512 11 M||1110*1 RawSHAKE128 或 256 1111 M||111110*1 SHAKE128 或 256