分组密码(二) — 密码学复习(五)
写在前面:
最近好久没更了,因为前面复习的时候觉得自己之前的手写笔记实在太难看了,然后就趁着复习重新写了一本密码学笔记。把密码学引论过了一遍之后,去复习了一遍谢希仁的计网,复习完之后现在有着四本新笔记(密码学一本,计网三本)。学习路还长,慢点没关系,要一步步走得踏实。让我秀一下我的四本笔记哈哈哈哈 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
rki = 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进行了差分密码分析;
④ 尚需经过更进一步的应用实践检验。