下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

分组密码之SM4算法的简单分析

作者:课课家教育     来源: http://www.kokojia.com点击数:2371发布时间: 2019-02-28 10:46:36

标签: 信息安全工程师密码学分组密码SM4算法

软考,您想通过吗?一次通过才是硬道理

      随着计算机运算能力的不断提高和网络并行计算技术的发展,在美国数据加密标准DES被攻破以及AES取代DES成为美国高级加密标准还有,我国公布了一个商用密码算法——SM4密码算法,这是是分组算法当中的一种,它的算法特点是设计简沽,结构有特点,安全高效。

      数据分组长度为128比特,密钥长度为128 比特。加密算法与密钥扩展算法都采用32轮迭代结构。SM4密码算法以字节(8位)和字节(32位)作为单位进行数据处理

      SM4密码算法是对合运算,因此解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。

      我国国家密码管理局在2006年公布了无线局域网产品使用的SM4密码算法。这个举措对于我国有着重大的意义和影响,因为这是我国第一次公布自己的商周密码算法。它的公开颁布向世界展示了我国在商用密码方面的研究成果,标志着我国商用密码管理更加科学化和与国际接轨,使得我国商用密码的科学研究和产业发展向世界前进一步。

      SM4基本算法

  SM4密码算法使用的基本运算为模2加和循环移位。

  ·模2加:⊕,32位异或运算

  ·循环移位:<<<i,把32位字循环左移i位

  SM4基本密码部件

  1、S盒

  SM4的S盒是一种以字节为单位的非线性代替变换,它的密码学作用是可以起到混淆的作用。S盒的本质是8位的非线性置换,输入和输出都是8位的字节。设输入字节为a,输出字节为b, 则S盒的运算可表示为:

                               b=S_Box(a)                               (2-10)

  S盒的代替规则如表2-9所示。例如,设S盒的输入为EF,则S盒的输出为表2-9中第E行与第F列交点处的值84。即,S_Box(EF)=84。

表2-9 S盒表

分组密码之SM4算法的简单分析_信息安全工程师_密码学_分组密码_SM4算法_课课家

  2.非线性变换τ

  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)

  3.线性变换部件L

  线性变换部件L的密码学作用为可以起到扩散。它是以字来作为处理单位的线性变换部件,输入输出的字都是32位。

  设L的输入为字B,输出为字C,则

                                               C=L(B)

                                             =B⊕(B<<<2)⊕ B<<<10)⊕E⊕(B<<<18)⊕(B<<<24)                  (2-21)

  4.合成变换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-19)和(2-20),有

  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的轮函数

图2-14 SM4的轮函数

  SM4的加密算法

  SM4密码算法德的数据分组长度为128比特,密钥长度也是128比特,是分组算法当中的一种。它采用32轮迭代结构来作为它的加密算法,每轮使用一个轮密钥。设输入的明文为四个字(X0,X1,X2, X3),一共有128位。输入轮密钥为rki,i=O,1,...,31,一共32个字。输出密文为四个字(Y0,Y1,Y2, Y3),128位。则这个加密算法可描述如下。

  加密算法:

            加密算法                    (2-24)

  SM4加密算法的框图为图2-15所示SM4加密算法的框图为图2-15所示

图2-15 SM4的加密算法

  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)。则这个姐密算法可描述如下。

  解密算法:

   解密算法                  (2-25)

  SM4的密钥扩展算法

  SM4密码算法采用32轮的迭代加密结构,拥有128位加密密钥,一共使用32轮密钥,每一轮的加密使用32位的一个轮密钥。SM4算法的特点使得它需要使用一个密钥扩展算法,在加密密钥当中产生32个轮密钥。在这个密钥的扩展算法当中有常数FK、固定参数CK这两个数值,利用这两个数值便可完成它的这一个扩展算法。

  1.常数FK

  密钥扩展当中使用的常数为一下几个:

  FK0=(A3B1BAC6),FK1=(56AA3350),FK2=(677D9197), FK3=(B27022DC)。

  2.固定参数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

  3. 密钥扩展算法

  假设输入的加密密钥为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

  Iki=ki+4⊕T'(Ki+1⊕Ki+2⊕Ki+3⊕CKi

  说明:其中的T'变换与加密算法轮函数中的T基本相同,只将其中的线性变换L修改为以下的L:

  L'(B)=B⊕(B<<<13)⊕(B<<<23)

  从密钥扩展算法中我们分析后可以发现,密钥扩展算法与加密算法在算法结构方面类似,同样都是采用了32轮类似的迭代处理。

  需要特别注意的是密钥扩展算法采用了非线性变换τ,这个措施将会使密钥扩展的安全性大大地加强了。在这方面上SM4和AES密码类似,而DES的子密钥生产算法并没有采用这种类似措施。

  SM4 的安全性

  SM4密码算法在我国,是用来做商用密码算法的,它由我国专业的密码机构设计,主要在无线局域网产品的安全保密这方面上使用。经过我国专业密码机构的充分分析测试,SM4密码算法可以抵抗差分攻击、线性攻击等现有攻击,因此它是安全的。

  SM4密码算法的公布引起了国际密码界的关注,很多国内外的密码学者都开始对这个密码算法进行研究分析。即使国内学者对SM4密码算法进行了21轮的差分攻击,但由于它是采用了32 轮迭代结构,所以这种差分攻击对其并不能构成实质的威胁。在所公开的文献当中,目前并未发现SM4有重要缺陷。

  以上就是小编整理的关于SM4密码算法的分析过程,它是分组密码其中的一种,与AES、DES一样都是为了保护信息安全而产生的一些密码算法。SM4密码算法所具备的某些特点和它所使用的的算法结构使得它可以抵抗很多的现有攻击,具有挺高的安全性。

赞(0)
踩(0)
分享到:
推荐查看
华为认证网络工程师 HCIE直播课视频教程