Hash

NIST 範例顯示 SHA512-256 的塊內容中的額外十六進製字元

  • September 1, 2022

我最近試圖更好地理解SHA-512/256 算法,在這個 NIST 範例中,他們使用單詞“abc”作為輸入。在 Block Contents 中,它顯示了預期的十六進制616263(abc),為什麼它後面直接跟0x80and0x18在最後?

Block Contents:
W[ 0] = 6162638000000000
W[ 1] = 0000000000000000
W[ 2] = 0000000000000000
W[ 3] = 0000000000000000
W[ 4] = 0000000000000000
W[ 5] = 0000000000000000
W[ 6] = 0000000000000000
W[ 7] = 0000000000000000
W[ 8] = 0000000000000000
W[ 9] = 0000000000000000
W[10] = 0000000000000000
W[11] = 0000000000000000
W[12] = 0000000000000000
W[13] = 0000000000000000
W[14] = 0000000000000000
W[15] = 0000000000000018

我意識到零是填充,但是,這是我不理解的存在0x800x18

它是編碼為大端序的 SHA-512 的字節填充,簡單地說

  • 添加位1,這是0x80乞求部分的最後一個
  • 填零
  • 然後在最後添加 128 位 big-endian 中的大小。0x18 是 24 個字節,用於 3 個字元。

  • 更正式;

NIST FIPS 180-4第 13 頁將 SHA-512 的填充方案定義為:

假設消息的長度, $ M $ , 是 $ \ell $ 位。將該位附加1到消息的末尾,然後是 $ k $ 零位,其中 $ k $ 是方程的最小非負解 $$ \ell + 1 + k \equiv 896 \bmod 1024 $$


  • 你的箱子適合一個街區。

您的郵件大小是 $ \ell =24 $ 比

$$ 24 + 1 + k \equiv 896 \bmod 1024 $$求解最小 $ k = 896-24-1 = 871 $ . 因此填充的消息是

$$ \text{padded message } = \overbrace{M}^{24-bit} \mathbin| \overbrace{1}^{1-bit} \mathbin| \overbrace{000\cdots 000}^{871-bit; 0s} \mathbin| \overbrace{00000000\cdots00011000}^{128-\text{bit binary encoded length } \ell} $$

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