SM3密码杂凑算法
前言
国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。
SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。密钥长度和分组长度均为128位。
SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。
SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。
SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。
最近学到国密算法,记录一下SM3的原理(用了一下老师课件的图,主要公式太难敲了,文中仅有的几个公式是按照LaTeX格式写的,我不会用hexo生成LaTeX公式,按照格式凑合看吧)。
正文
符号和常量
ABCDEFGH 8个32位寄存器
B^{(i)} 第 i 个消息分组(512位)
CF 压缩函数
FF_j 布尔函数,随着 j 不同取不同的表达式,输出结果为32位
GG_j 布尔函数,随着 j 不同取不同的表达式,输出结果为32位
IV 初始值(256位 8个字)
P_0 压缩函数中的置换函数,输入输出为32位
P_1 消息扩展中的置换函数,输入输出为32位
T_j 算法常量,随 j 的变化取不同的值(32位)
算法描述
概述
对于长度为 l (l < 2^{64})比特的消息,SM3杂凑算法经过填充,迭代压缩和输出选裁,生成杂凑值,为256比特
填充
假设消息 m 的长度为 l 比特,则首先将比特“1”加入末尾,后加入 k 个“0”比特,k满足 l+1+k = 448(mod 512) 的最小非负整数,后添加64位比特串,该比特串为 l 的二进制表示。填充后的消息 m’ 为512比特的倍数
迭代压缩
消息扩展
压缩函数
注意:基本的压缩函数得到 ABCDEFGH 8个字寄存器的值,输出的 V^{(i+1)} = ABCDEFGH ⊕ V^{(i)}
基本压缩函数图示为:
总结
最终迭代压缩生成的 V^{(n)} = ABCDEFGH 就是SM3算法输出的摘要值,为256位。
SM3工作的全过程可以图示描述: