算法概述
對(duì)長(zhǎng)度為
比特的消息m兢孝,SM3雜湊算法經(jīng)過(guò)填充和迭代壓縮,生成雜湊值睬捶,雜湊值長(zhǎng)度為256比特黔宛。
1.填充
假設(shè)消息m 的長(zhǎng)度為l 比特。首先將比特“1”添加到消息的末尾侧戴,再添加k 個(gè)“0”宁昭,k是滿
足l + 1 + k ≡ 448mod512 的最小的非負(fù)整數(shù)。然后再添加一個(gè)64位比特串酗宋,該比特串是長(zhǎng)度l的二進(jìn)制表示积仗。填充后的消息m′ 的比特長(zhǎng)度為512的倍數(shù)
即:
如果 msg比特長(zhǎng)度是24。則
如果 msg比特長(zhǎng)度是512蜕猫。則
如果 msg比特長(zhǎng)度是1024寂曹。則
填充示例
2.迭代壓縮
其中:
-
是固定IV,即
-
是 消息分組(填充后的)
-
是壓縮函數(shù)
3.生成256bit結(jié)果
*細(xì)節(jié)概念介紹
- 固定IV
IV =7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e
消息擴(kuò)展
將消息分組B(i)按以下方法擴(kuò)展生成132個(gè)字用于壓縮函數(shù)CF
132個(gè)字(1個(gè)字:32bit數(shù)據(jù))
就是填充后的消息分組本身回右。
壓縮函數(shù):
令A(yù),B,C,D,E,F,G,H為字寄存器,SS1,SS2,TT1,TT2為中間變量,壓縮函數(shù)隆圆。計(jì)算過(guò)程描述如下:
最終的雜湊值是最后一個(gè)Vn
常量 T_j
Tj | Value |
---|---|
79cc4519 | |
7a879d8a |