0%

SM3密码杂凑算法

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位)

YmJYmq.png

YmJakT.png

算法描述

概述

对于长度为 l (l < 2^{64}​)比特的消息,SM3杂凑算法经过填充,迭代压缩和输出选裁,生成杂凑值,为256比特

填充

假设消息 m 的长度为 l 比特,则首先将比特“1”加入末尾,后加入 k 个“0”比特,k满足 l+1+k = 448(mod 512) 的最小非负整数,后添加64位比特串,该比特串为 l 的二进制表示。填充后的消息 m’ 为512比特的倍数

迭代压缩

YmtFsA.png

消息扩展

YmtGd0.png

压缩函数

YmNkpF.png

YmNzge.png

注意:基本的压缩函数得到 ABCDEFGH 8个字寄存器的值,输出的 V^{(i+1)}​ = ABCDEFGH ⊕ ​V^{(i)}​

基本压缩函数图示为:

YmUCDA.png

总结

最终迭代压缩生成的 V^{(n)}​ = ABCDEFGH 就是SM3算法输出的摘要值,为256位。

SM3工作的全过程可以图示描述:

YmdIgS.png