Sha-2
SHA-224 初始雜湊值的來源?
在每個 SHA-0 到 -2 算法的開始,初始狀態被設置為某些常數。我很好奇 SHA-224 中的初始化值來自哪裡。
- MD5 的初始值是十六進制數字的簡單遞增和遞減模式。
- SHA-0 和 SHA-1 的值與 MD5 相同,但多了一個值,它也是一個簡單的十六進制數字模式。
- SHA-256 的值是素數平方根的小數位 $ 2 $ ~ $ 19 $ .
- SHA-384 的值是素數平方根的小數位 $ 23 $ ~ $ 53 $ .
- SHA-512 的值是擴展為 64 位的 SHA-256 的值。
但是 SHA-224 的初始化常量是從哪裡來的呢?他們是 SHA 家族中唯一一個我找不到來源的人。它們也不僅僅是素數的平方根 $ 23 $ ~ $ 53 $ 如您所料。
SHA-224 初始值是第 9 到第 16 個素數(即 23 到 53)的平方根小數部分的後 32 位,換句話說, $ \lfloor 2^{64} \sqrt{p} \rfloor \bmod 2^{32} $ , 為了 $ p = 23, 29, 31, 37, 41, 43, 51, 53 $
例如,十六進制擴展 $ \lfloor 2^{64} \sqrt{23} \rfloor = 4cbbb9d5dc1059ed8_{16} $ ,所以初始值 $ a $ 是最後 8 個十六進制數字,即 $ c1059ed8_{16} $
同樣,十六進制擴展 $ \lfloor 2^{64} \sqrt{29} \rfloor = 5629a292a367cd507_{16} $ ,所以初始值 $ b $ 是 $ 367cd507_{16} $
請注意,SHA-224 初始值是 SHA-384 初始值 (!) 的低 32 位。