0. 引言
SM3杂凑算法是中国国家密码局公布的hash算法商用标准,能应用于数字签名与验证、消息认证码的生成以及伪随机数的生成。
1. 常数与函数
1.1 初始值
IV = 7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e
1.2 常量
Tj={ 79cc4519 0≤j≤15;7a879d8a 16≤j≤63}
1.3 布尔函数
FFj(X,Y,Z)={X^Y^Z 0≤j≤15;(X & Y)|(X&Z)|(Y&Z) 16≤j≤63}
GGj(X,Y,Z)={X^Y^Z 0≤j≤15;(X & Y)|(~X&Z)16≤j≤63}
X,Y,Z为字(32bit)
1.4 置换函数
P0(X)= X^(X<<<9)^(X<<<17)
P1(X)= X^(X<<<15)^(X<<<23)
X 为字
2. 算法简介
SM3算法能够对长度为l(l<2^64)bit的消息m,进行填充和迭代压缩,生成杂凑值,最终的杂凑值为256bit。
2.1 填充过程
设消息m的长度为l bit,首先将bit"1"添加到消息末尾,再加k个“0”,k是满足l+1+