Sha-3

Keccak SHA3 雜湊算法中的填充

  • October 14, 2021

在 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然後是 284 0(或 142 00),然後是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

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