SM4分组密码算法


SM4算法介绍

  • SM4.0于2013年3月被列为国家密码行业标准“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。2016年被列入国家标准(GB/T 32907-2016)
  • 在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥长度均为128bit。加密算法与密钥扩展算法都采用32轮非线性迭代结构,采用非平衡Feistel。每一轮需要一个轮密钥。以字(32bit)为单位加密。
  • M4算法加/解密算法的结构相同,只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序。

一、SM4加密流程

下图是SM4的加密流程图以及SM4轮函数的示意图。
在SM4加密的过程中经过了32轮轮函数F。
在这里插入图片描述

二、轮函数F

X0,X1 ,X2 ,X3为128bit的输入
轮函数F(Xi,Xi+1 ,Xi+2 ,Xi+3) = Xi ⊕T(Xi+1 ⊕Xi+2 ⊕Xi+3⊕rki) 。轮函数F如上图所示
经过轮函数F之后会产生一个字的结果,执行32轮迭代之后会产生36个字(X0,X1 ,…,X32,X33,X34,X35)

1.合成置换T

T是一个可逆变换,由非线性变换τ和线性变换L复合而成。
T(A)=L(τ(A))

  • 非线性变换τ是由4个S盒组成的。
  • 非线性变换τ的输出是线性变换L的输入。
    其中输入A是32bit
    第i轮A的值为:A=Xi+1 ⊕Xi+2 ⊕Xi+3⊕rki

3.非线性变换τ

S盒中的数据采用的是十六进制来表示。四个S盒一共为32bit,每个S盒为8bit。
如S盒的输入如果是EF则输出结果是第E行第F列的值。
eg:输入:A = a0,a1 ,a2 ,a3;输出B=b0,b1 ,b2 ,b3
则(b0,b1 ,b2 ,b3)=τ(A)=(Sbox( a0),Sbox( a1),Sbox( a2),Sbox( a3))
(其中A为合成置换中的输入A:A=Xi+1 ⊕Xi+2 ⊕Xi+3⊕rki

2.线性变换L

c=L(B)=B⊕(B<<<2)⊕(B<<<10)⊕(B<<<18)⊕(B<<<24)
其中B是32位的数,输出仍是32位
输入B的值为非线性变换τ输出的32的值

B<<<n:表示B循环左移n位,左边溢出的部分补到右边。
eg:B=123456。则 B<<<3 = 456123

4.加密的结果

32轮迭代后在最后会加上反序变换。
反序变换R:R(a0,a1 ,a2 ,a3)=(a3,a2 ,a1 ,a0)
密文为(Y0,Y1 ,Y2 ,Y3) =R(X32,X33 ,X34 ,X35)=(X35,X34 ,X33 ,X32)


总结

上面写的有点乱。
在EBC模式下SM4算法的流程如下:
SM4
如果有写的不对的地方欢迎指出!

猜你喜欢

转载自blog.csdn.net/qq_43589852/article/details/127994888