SM4算法
2012年3月,国家密码管理局正式公布了包含SM4分组密码算法。与DES和AES算法类似,SM4是一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。SM4算法加/解密算法是对合运算,只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序。加密算法与密钥扩展算法均采用32轮非线性迭代结构(Feistel),以字(32位)为单位进行加密运算,每一次迭代运算均为一轮变换函数F。
注:明文、密文、密钥128位
数据处理单位为:字节(8位)、字(32位)
SM4算法流程
密钥扩展算法
加密算法的轮密钥由加密密钥通过密钥扩展算法生成,从而生成32个32位的轮密钥。
加密密钥MK=(MK0 , MK1 , MK2 , MK3 ),MKi∈ ,i=0,1,2,3;
令Ki∈ ,i=0,1,…,35,轮密钥为rki∈
,则轮密钥生成方法为:
(K0 ,K1 ,K2 ,K3 )=(MK0⊕FK0 ,MK1⊕FK1 ,MK2⊕FK2 ,MK3⊕FK3 )
然后,对i=0,1,…,31:
注意:
1)T’变换与加密算法轮函数中的T基本相同,只将其中的线性变换 L 修改为以下 :
L’ (B)=B⊕ (B<<< 13)⊕ (B<<< 23);
2)密钥扩展参数
FK:系统参数 FK 的取值,采用 16 进制表示为:
FK0=(A3B1BAC6),FK1=(56AA3350),
FK2=(677D9197),FK3=(B27022DC);
CK:固定参数CK的取值方法为:设cki,j 为CKi的第j字节(i=0,1,…,31;j=0,1,2,3),即CKi= (cki,0,cki,1,cki,2,cki,3) ∈ ,则cki,j = (4i+j)×7(mod 256)。32个固定参数CKi ,其16进制表示为(i:第i个参数;j:参数第j个字节):
00070e15, 1c232a31, 383f464d, 545b6269,
70777e85, 8c939aa1, a8afb6bd, c4cbd2d9,
e0e7eef5, fc030a11, 181f262d, 343b4249,
50575e65, 6c737a81, 888f969d, a4abb2b9,
c0c7ced5, dce3eaf1, f8ff060d, 141b2229,
30373e45, 4c535a61, 686f767d, 848b9299,
a0a7aeb5, bcc3cad1, d8dfe6ed, f4fb0209,
10171e25, 2c333a41, 484f565d, 646b7279
密钥及密钥参量:SM4分组密码算法的加密密钥长度为128bit,表示为MK=(MK0,MK1,MK2,MK3),其中MKi(i=0,1,2,3)为32bit。
轮密钥:(rk0,rk1,···,rk31),其中rki(i=0,1,···,31)为32bit,轮密钥由加密密钥生成。
系统参数:FK=(FK1,FK2,FK3,FK4),其中FKi(i=0,1,···,3),
固定参数:CK=(CK0,CK1,···,CK31),用于密钥扩展算法,均为32bit。
轮函数F
本算法采用非线性迭代结构,以字为单位进行加密运算,称一次迭代运算为一轮变换。
设输入为(X0,X1,X2,X3)∈ ,轮密钥为rki∈
,则轮函数 F 为:
SM4算法进行32轮轮函数运算得到密文。
字合成变换T; --
,是一个可逆变换,进行32轮轮函数运算得到密文。字合成变换T 由非线性变换τ和线性变换L复合而成,即:T(*)=L(τ(*));先进行τ变换,再进行L变换。
轮函数部件分解如下:
S盒:S 盒中数据均采用 16 进制表示。高4位为行号,低4位为列号,交叉点为输出;S盒是非线性字节变换,起到混淆作用,8位输入,8位输出:
非线性变换τ:τ由4个并行S盒构成(4*8),起混淆作用;
设输入为A=(a0,a1,a2,a3)∈ , 输出为B=(b0,b1,b2,b3)∈
,则B=τ(A)= (b0,b1,b2,b3)=( Sbox(a0), Sbox(a1), Sbox(a2), Sbox(a3))
字线性变换L变换:非线性变换 τ有32位输入,32位输出,起扩散作用;非线性变换 τ 的输出是线性变换 L 的输入。设输入为 ,输出为C∈
,则C=L(B)=B⊕(B <<<2)⊕(B <<<10)⊕(B <<<24)。
加密与解密
定义反序变换R为:
R(A0,A1,A2,A3)=(A3,A2,A1,A0),Ai∈ ,i=0,1,2,3;
设明文输入(X0,X1,X2,X3)∈ ,密文输出(Y0,Y1,Y2,Y3)∈
,轮密钥rki∈
,i=0,1,2…31,则算法的加密变换为:
(Y0,Y1,Y2,Y3)=R(X32,X33,X34,X35)=(X35,X34,X33,X32)
SM4算法的加密与解密变换结构相同,不同的仅是轮密钥的使用顺序。
加密轮密钥:(rk0,rk1,…,rk31);
解密轮密钥:(rk31,rk30,…,rk0)。
SM4算法特点
SM4与DES算法都采用Feistel结构,但是SM4采用非对称Feistel结构,DES算法中参与交换的两个数据块的长度是相等的,SM4中参与交换的两个数据块的长度是不相等的。
注:
如有错误、侵权,请联系笔者更改、删除!!!