算法概述
对长度为
比特的消息m,SM3杂凑算法经过填充和迭代压缩,生成杂凑值,杂凑值长度为256比特。
1.填充
假设消息m 的长度为l 比特。首先将比特“1”添加到消息的末尾,再添加k 个“0”,k是满
足l + 1 + k ≡ 448mod512 的最小的非负整数。然后再添加一个64位比特串,该比特串是长度l的二进制表示。填充后的消息m′ 的比特长度为512的倍数
即:
如果 msg比特长度是24。则
如果 msg比特长度是512。则
如果 msg比特长度是1024。则

填充示例
2.迭代压缩
其中:
-
是固定IV,即
-
是 消息分组(填充后的)
-
是压缩函数
3.生成256bit结果
*细节概念介绍
- 固定IV
IV =7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e
消息扩展
将消息分组B(i)按以下方法扩展生成132个字用于压缩函数CF
132个字(1个字:32bit数据)
就是填充后的消息分组本身。




压缩函数:
令A,B,C,D,E,F,G,H为字寄存器,SS1,SS2,TT1,TT2为中间变量,压缩函数。计算过程描述如下:



最终的杂凑值是最后一个Vn
常量 T_j
| Tj | Value |
|---|---|
| 79cc4519 | |
| 7a879d8a |

布尔函数 FF_j和 GG_j

置换函数 P_0 和 P_1
