国密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)