分组密码(二) — 密码学复习(五)

写在前面:

  最近好久没更了,因为前面复习的时候觉得自己之前的手写笔记实在太难看了,然后就趁着复习重新写了一本密码学笔记。把密码学引论过了一遍之后,去复习了一遍谢希仁的计网,复习完之后现在有着四本新笔记(密码学一本,计网三本)。学习路还长,慢点没关系,要一步步走得踏实。让我秀一下我的四本笔记哈哈哈哈 O(∩_∩)O~

 

  废话说多了,下面回归正题。开始密码学复习之旅。前面分组密码讲到了S-P网络结构和Feistel结构,不记得的点这回顾。我们都知道DES是Feistel结构,AES是S-P网络结构。但下面先不讲这两个具体的算法。先把还剩的两个结构讲完。

  这篇主要讲滑动窗口结构Lai-Massey结构。滑动窗口结构的应用实例是SM4国密算法,而Lai-Massey结构的应用实例是IDEA算法。在简单介绍完后,会对SM4国密算法进行简单介绍,至于IDEA将不展开来讲,会在最后附上一些链接。

  5.1 滑动窗口结构

  滑动窗口的结构特点:

  仍然是轮函数迭代结构但是,具有密文链接的特点,每轮加密产生的最后一个密文字加入到下一轮的加密过程中,第一个密文字退出加密,相当于一个窗口在移动。因此形象地称为滑动窗口型。

  优点:

容易得到对合的密码算法。

  缺点:

迭代轮数多;

目前实例较少。

 

  5.2 Lai-Massey结构

  结构特点:

  采用三个代数群:

⊕,16位按位异或群;

⊙,16位mod 216+1乘法群(216+1为素数)

   16位mod 216乘法群

  这三种运算的任意两种都不满足分配律和结合律,不构成群。(注:不构成群有利于增强密码的安全性)

  混合运用这三种运算,获得了很好的非线性和混淆的特性,确保密码的安全性。

  优点:

容易得到对合的密码算法。

  缺点:

结构扩展不方便,因为216+1为素数,mod 216+1构成乘法群,所以可构成IDEA,但232+1不为素数,mod 232+1不构成乘法群,所以不能构成32位的IDEA。

  应用实例:

目前只有IDEA采用这种结构。

 

  5.3 中国商用密码算法SM4

  2006年2月公布了分组密码SM4.

  2011年2月公布了椭圆曲线密码SM2和杂凑函数SM3.

  5.3.1 SM4的概况

  ① 分组密码

  数据分组(明文、密文)长度 = 128位  密钥长度 = 128位

  数据处理单位: 字节(8位)、字(32位)

  ② 密码算法特点

  对合运算:解密算法和加密算法相同

  子密钥生成算法和加密算法结构类似

  ③ 密码结构

  不是SP结构,也不是Feistel结构,是一种新的结构——滑动窗口结构

  5.3.2 基本运算

  ① 模2加,⊕,32比特异或运算;

  ② 循环移位,<<<i,把32位字循环左移i位。

  5.3.3 基本密码部件

  ① 非线性字节变换部件 S盒

  •   8位输入,8为输出
  •   本质上是8位的非线性置换

  输入8位可用2个16进制数表示,前面表示行,后面表示列。

  说明:在主要密码学指标达到最佳,与AES的S盒相当。

  ② 非线性字变换τ :32位字的非线性变换

  •   4个S盒并行置换
  •   设输入字A=(a0,a1,a2,a3),输出字B=(b0,b1,b2,b3)

  B = τ(A) = (S_box(a0),S_box(a1),S_box(a2),S_box(a3))

  ③ 字线性部件L变换

  •   32位输入,32为输出
  •   设输入为B,输出为C,表示为:C=L(B)

  运算规则:

  C = L(B) = B ⊕ (B<<<2) ⊕ (B<<<10) ⊕ (B<<<18) ⊕ (B<<<24)

  ④ 字合成变换 T 

  •   由非线性变换τ线性变换L复合而成的:

  T(X) = L(τ(X))

  先S盒变换,后L变换。

 5.3.4 轮函数 F

  输入数据:(X0,X1,X2,X3),128位,四个32位字

  输入轮密钥:rk,32位字

  输出数据:32位字

  轮函数 F :

F(X0,X1,X2,X3,rk) = X0⊕ T(X1⊕X2⊕X3⊕rk)

 5.3.5 加密算法

  输入明文:(X0,X1,X2,X3),128位,四个32位字

  输入轮密钥:rki,i=0,1,...,31,共32个轮密钥

  输出密文:(Y0,Y1,Y2,Y3),128位,四个32位字

  算法结构:轮函数32轮迭代,每一轮使用一个轮密钥

  加密算法:

Xi+4 = F(Xi,Xi+1,Xi+2,Xi+3,rki) = Xi⊕ T(Xi+1⊕Xi+2⊕Xi+3⊕rki) , i=0,1,...,30,31.

(Y0,Y1,Y2,Y3) = (X35,X34,X33,X32)

  5.3.6 解密算法

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

  输入密文:(Y0,Y1,Y2,Y3),128位,四个32位字

  输入轮密钥:rki,i=31,30,...,1,0,共32个轮密钥

  输出明文:(X0,X1,X2,X3),128位,四个32位字

  算法结构:轮函数32轮迭代,每一轮使用一个轮密钥

  解密算法:

Yi+4 = F(Yi,Yi+1,Yi+2,Yi+3,rki) = Yi⊕ T(Yi+1⊕Yi+2⊕Yi+3⊕rki) , i=31,30,...,1,0.

(X0,X1,X2,X3) = (Y35,Y34,Y33,Y32)

  5.3.7 密钥扩展算法

  ① 常数 FK

    在密钥扩展中使用一些常数:

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

  ② 固定参数 CK

    32个固定参数 CKi,i=0,1,...,30,31.

    产生规则:CKij = (4i+j)×7 mod 256, i=0,1,...,30,31, j=0,1,...,30,31.

  输入加密密钥:MK = (MK0,MK1,MK2,MK3)

  输出轮密钥:rki,i=0,1,...,30,31.

  中间数据:Ki,i=0,1,...,34,35.

  密钥扩展算法:

① (K0,K1,K2,K3) = (MK0⊕FK0,MK1⊕FK1,MK2⊕FK2,MK3⊕FK3)

② for i = 0,1,...,31,32 do                  

  rk= Ki+4 = Ki⊕T'(Ki+1⊕Ki+2⊕Ki+3⊕CKi)

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

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

  5.3.8 SM4的安全性

  ① 国家专业机构设计,算法简洁,以字和字节为处理单位,对合运算,符合当今分组密码主流;

  ② 专业机构进行了充分的密码分析,因此是安全的;

  ③ 民间学者对21轮SM4进行了差分密码分析;

  ④ 尚需经过更进一步的应用实践检验。

posted @ 2021-09-15 16:36  不爱学习的Shirley  阅读(1233)  评论(3编辑  收藏  举报