国密SM4的分组长度128bit,密钥长度:128bit。
1、特点
是一种滑动窗口结构;
加密算法解密算法相同;
经过32轮轮函数;
2、算法结构
3、基本算法部件
(1) 非线性变换部件S盒
8比特出入--->S盒--->8比特输出
b=S_box(a);其中a为8比特的输入,b为8比特的输出;
S盒的置换规则:
把一个字节转换成十六进制的xy,x为S盒第x行,y为S盒的第y列;
(2) 32位字的非线性变换t
4个S盒并行输出,其中a0、a1、a2、a3为输入,b0、b1、b2、b3为输出
b0=S_box(a0)
b1=S_box(a1)
b2=S_box(a2)
b3=S_box(a3)
记B=(b0,b1,b2,b3)
(3) 字线性变换,循环向左移动
C=L(B)
=B⊕(B<<<2)⊕(B<<<10)⊕(B<<<18)⊕(B<<<24);
(4)字合成变换T
T(X)=L(t(X))
4、轮函数
输入4个32位字,X0,X1,X2,X3;
输入轮密钥rk,32位;
输出32位;
F(X0,X1,X2,X3,rK)=X0⊕T(X1⊕X2⊕X3⊕rK)
把128bit明文分为4个32位字(X0,X1,X2,X3)
X1,X2,X3,rK相互异或得到32位字
将这32位字并行输入5*4个S盒,输出的结果再进行循环左移;
最后与X0进行异或。
5、加密过程,滑动窗口结构
128bit(X0,X1,X2,X3)的明文经过一次轮函数输出32位字(X4),并将输出结果添加到明文的最后一个字后,进入第二次轮函数……直到第32轮函数执行完毕。最后四次经过轮函数得到的(X35X34X333X32)4个32位字即为密文。
6、密钥扩展算法
用到4个常数
用到32个参数
输入加密密钥MK=(MK0,MK1,MK2,MK3)
(K0,K1,K2,K3)=(MK0⊕FK0,MK1⊕FK1,MK2⊕FK2,MK3⊕FK3)
For i=0,1…,30,31
Do
iki=Ki+4=Ki⊕T’(Ki+1⊕Ki+2⊕Ki+3⊕CKi)
说明:T’变换与加密算*函数中的T基本相同,只将其中的线性变换L修改为以下:L’(B)=B⊕(B<<<13)⊕(B<<<23)