SM4
我国国家密码管理局在20012年公布了无线局域网产品使用的SM4密码算法——商用密码算法。
它是分组算法当中的一种,算法特点是设计简沽,结构有特点,安全高效。
数据分组长度为128比特,密钥长度为128 比特。加密算法与密钥扩展算法都采用32轮迭代结构。
SM4密码算法以字节(8位)和字(32位)作为单位进行数据处理。
SM4密码算法是对合运算,因此解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
SM4基本算法
SM4密码算法使用的基本运算为异或和循环移位。
-
异或:⊕,32位异或运算
-
循环移位:<<<i,把32位字循环左移i位
-
字:(32位)
SM4基本密码部件
- S盒
SM4的S盒是一种以字节为单位的非线性代替变换,它的密码学作用是可以起到混淆的作用。S盒的本质是8位的非线性置换,输入和输出都是8位的字节。设输入字节为a,输出字节为b, 则S盒的运算可表示为:
b=S_Box(a) (2-10)
- 非线性变换τ
SM4的非线性变换τ的本质是S盒的一种并行应用,它由4个S盒并置构成,是用字来作为单位的一种非线性代替变换。
设输入的字为A=(a0,a1,a2,a3),输出的字为B=(b0,b1,b2,b3),则
B=τ(A)=(S_box(a0),S_box(al),S_box(a2),S_box(a3)) (2-20)
- 线性变换部件L
线性变换部件L的密码学作用为可以起到扩散。它是以字来作为处理单位的线性变换部件,输入输出的字都是32位。
设L的输入为字B,输出为字C,则
C=L(B)=B⊕(B<<<2)⊕ B<<<10)⊕(B<<<18)⊕(B<<<24) (2-21)
- 合成变换T
合成变换T的数据处理单位为字,是由非线性变换τ和线性变换部件L两者复合而组成的。设输入的字为X,则需要先对X进行一个非线性τ变换,然后再进行线性L变换,可记为
T(X)=L(τ(X)) (2-22)
合成变换T由于是非线性变换τ和线性变换部件L两者的一个复合,因此它可以同时起到混淆以及扩散的作用,由此可以大大地加强了密码的安全性。
SM4的轮函数
SM4密码算法的结构采用了对基本轮函数进行迭代,它的一个轮函数可以由以上这些基本的密码部件来构成,这是一种用字来作为处理单位的密码函数。
设轮函数F的输入为(X0,X1,X2, X3),四个32位字,一共有128位。轮密钥为rk ,rk也是一个32位的字。轮函数F的输出也是一个32位的字。轮函数F的运算由式(2-23)给出:
F(X0,X1,X2,X3,rk)=X0⊕T(X1⊕X2⊕X3⊕rk) (2-23)
根据式(2-22),
F(X0,X1,X2,X3,rk)=X0⊕L(τ(X1⊕X2⊕X3⊕rk))
简记B=(X1⊕X2⊕X3⊕rk),根据式(2-20)和(2-21),有
F(X0,X1,X2,X3,rk)=X0⊕[S_box(B)]⊕[S_box(B)<<<2]⊕[S_box(B)<<<10]⊕[S_box(B)<<<18]⊕[S_box(B)<<<24]
轮函数的结构可以用图2-14来表示,其中S为S盒变换。
SM4的加密算法
SM4密码算法德的数据分组长度为128比特,密钥长度也是128比特,是分组算法当中的一种。它采用32轮迭代结构来作为它的加密算法,每轮使用一个轮密钥。设输入的明文为四个字(X0,X1,X2, X3),一共有128位。输入轮密钥为rki,i=O,1,…,31,一共32个字。输出密文为四个字(Y0,Y1,Y2, Y3),128位。则这个加密算法可描述如下。
加密算法:
SM4加密算法的框图为图2-15所示
SM4的加密算法和DES、AES的结构一样,均采用了基本函数迭代,但SM4也有一些不同的加密迭代处理特点。由图2-15可以看出,SM4的加密法代处理方式具有密文反馈连接和流密码的某一些特点,前一轮加密的结果与前一轮的加密数据拼接起来供下一轮加密处理。一次加密处理四个字,然后产生一个字的中间密文,这个中间密文和前三个字拼接起来后再供下一次加密处理,一共会迭代加密处理32轮,产生出四个字的密文。这个加密处理的整个过程就像一个宽度为4个字的窗口在滑动,加密处理完一轮,窗口就滑动一个字,窗口一共滑动32次后加密迭代就结束了。
SM4的解密算法
由于SM4密码算法的运算是对合运算,所以它的解密算法结构是和加密算法的结构一样的,不同的是轮密钥的使用顺序,解密和加密的是相反的,也就是说解密的轮密钥是加密的轮密钥的逆序。
设输入的密文为(X0,X1,X2, X3),输入轮密钥为rki,i=31,30,…,1,0,输出的明文为(Y0,Y1,Y2, Y3)。则这个姐密算法可描述如下。
解密算法:
SM4的密钥扩展算法
SM4密码算法采用32轮的迭代加密结构,拥有128位加密密钥,一共使用32轮密钥,每一轮的加密使用32位的一个轮密钥。SM4算法的特点使得它需要使用一个密钥扩展算法,在加密密钥当中产生32个轮密钥。在这个密钥的扩展算法当中有常数FK、固定参数CK这两个数值,利用这两个数值便可完成它的这一个扩展算法。
- 常数FK
密钥扩展当中使用的常数为以下几个:
FK0=(A3B1BAC6),FK1=(56AA3350),FK2=(677D9197), FK3=(B27022DC)。
- 固定参数CK
一共使用有32个固定参数CKi,这个CKi,是一个字,它的产生规则是:
设cki,j为CKi的第j字节(i=0,1,…,31;j=0,1,2,3),即CKj=(cki,0,cki,1,cki,2,cki,3),
则 cki,j=(4i+j)×7(mod 256) (2-26)
这32个固定参数如下(十六进制) :
00070e15, 1c232a31, 383f64d, 545b6269,
70777e85, 8c939aa1, a8afb6bd, c4cbd2d9,
e0e7eef5, fc030a11, 181f262d, 343b4249,
50575e65, 6c737a81, 888f969d, a4abb2b9,
c0c7ced5, dce3eafl, f8ff060d, 141b2229,
30373e45, 4c535a61, 686f767d, 848b9299,
a0a7aeb5, bcc3cad1, d8dfe6ed, f4fb0209,
10171e25, 2c333a41, 484f565d, 646b7279。
- 密钥扩展算法
假设输入的加密密钥为MK= (MK0,MK1,MK2,MK3 ),输出的轮密钥为rki, i=0,1…,30,31,中间的数据为Ki=0,1,…,34,35。则密钥扩展算法可描述如下。
密钥扩展算法:
①(K0,K1,K2,K3)=(MK0⊕FK0,MK1⊕FK1,,MK2⊕FK2,MK3⊕FK3)
②For i=0,1,…,30,31 Do
rki=K(i+4)=Ki⊕T'(K(i+1)⊕K(i+2)⊕K(i+3)⊕CKi)
说明:其中的T’变换与加密算法轮函数中的T基本相同,只将其中的线性变换L修改为以下的L’:
L'(B)=B⊕(B<<<13)⊕(B<<<23)
从密钥扩展算法中我们分析后可以发现,密钥扩展算法与加密算法在算法结构方面类似,同样都是采用了32轮类似的迭代处理。
需要特别注意的是密钥扩展算法采用了非线性变换τ,这个措施将会使密钥扩展的安全性大大地加强了。在这方面上SM4和AES密码类似,而DES的子密钥生产算法并没有采用这种类似措施。
SM4 的安全性
SM4密码算法在我国,是用来做商用密码算法的,它由我国专业的密码机构设计,主要在无线局域网产品的安全保密这方面上使用。经过我国专业密码机构的充分分析测试,SM4密码算法可以抵抗差分攻击、线性攻击等现有攻击,因此它是安全的。