SM4
概述
SM4是一种分组密码,由我国国家密码管理局在2012年发布,常用于无线互联网加密等领域.
SM4是分组密码,分组长度为128bit(即16byte,4word),密钥长度也为128bit(即16byte,4word).
加解密过程经过32轮迭代(类似DES,AES),每一轮也都需要一个轮密钥.
加密过程
加密过程由32轮迭代和1次反序变换组成.
32轮迭代
解释:
-
对4字(16byte)明文进行32轮迭代,每轮迭代都需要一个字(4byte)的轮密钥,即共需要32个轮密钥,记为(rk0,rk1,rk2,……,rk31),因此需要进行
密钥扩展. -
迭代即使用
轮函数F不断向后计算下一个字.SM4的轮函数F接受4个1字数据和一个1字轮密钥,最终生成一个字的结果.
第一轮迭代即使用前4字(X0-X3)计算第5个字X4;第二轮迭代即使用(X1-X4)计算第6个字X5;以此类推,最终生成36个字的结果,完成第一步,过程如下:
一次反序变换
第二步为一次简单的反序变换,将最后生成的4字(X32,X33,X34,X35)进行反序,即得到最终的密文(Y0,Y1,Y2,Y3)=(X35,X34,X33,X32)
解密过程
解密过程与加密过程完全相同,也需要32次迭代和1次反序变换,只不过在迭代时要将,轮密钥逆序使用.
密钥扩展和轮函数F
密钥扩展
SM4的原始密钥为128位(4字),根据原始密钥扩展为32个1字子密钥.
与系统参数异或-初始化密钥
将原始密钥的每个字\(MK_i\)与系统参数\(FK_i\)异或,得到4个新字\((K_0,K_1,K_2,K_3)\),即:
FK为: 0xA3B1BAC6,0x56AA3350,0x677D9197,0xB27022DC
轮迭代生成轮密钥
根据\((K_0,K_1,K_2,K_3)\)进行32轮迭代,生成32个轮密钥.公式如下:
置换\(T^{'}\)
该置换与加密过程的合成置换\(T\)完全类似,其中非线性变换\(\tau\)完全相同,线性变换\(L^{'}\)略有不同:
32个固定参数CK为(后缀h代表16进制数):
轮函数F
F函数定义
其中T()为合成置换.
合成置换T
合成置换T接受1字的输入A,得到1字的输出C.包含非线性变换\(\tau\)和线性变换\(L\)两部分.
非线性变换\(\tau\)
非线性变换即对入参A(1字/4byte)进行S盒变换,输出结果B(1字/4byte).S盒如下:
对于输入的每个字节,使用其16进制表示,高位(即二进制高4位)作为行坐标,低位(即二进制低4位)作为列坐标,替换为S盒中对应值.
线性变换\(L\)
线性变换\(L\)使用循环左移(使用<<<符号代表)和异或,公式如下:
经过非线性变换\(\tau\)和线性变换\(L\),即完成一次合成置换T.

浙公网安备 33010602011771号