📍基本概念
SM4原名是SMS4,该算法最早于2006年1月公布,用于无线局域网产品的分组对称密码算法。
SM4分组长度和密钥长度为128比特数据处理单位:字(32位),字节(8位)
密码算法结构:Feistel结构,与DES不同的是,SM4采用非对称的Feistel结构,一边1个字,另一边为3个字。(滑窗结构)
SM4密码算法属于对合运算,加密与解密算法的结构相同
SM4共迭代32轮
📍流程
- 每个分组128位明文分组分为4个32位的字
- 经过32轮迭代变换
- 再将4个字反序变化后
-
📍运算符号
⊕ 表示32比特异或运算
<<< i 表示32比特循环左移i位📍密码部件
📌S盒:非线性字节变换部件
含义
8位输入、8位输出
- 本质上,8位的非线性置换
- 设输入位 a ,输出位 b ,表示为: b=S_Box(a)
-
规则
S盒中的数据都是十六进制表示的,它的置换规则是:以输入的前半字节为行号,后半字节为列号,行列交叉点出的数据即为输出。
📌字变换τ:4个S盒并行置换
含义
32位字的非线性变换
- 设输入字 A=(a ,a ,a ,a) ,输出字 B=(b ,b ,b ,b),
B= τ(A)=(S_box(a), S_box(a), S_box(a), S_box(a))
📌字线性变换L:字线性变换部件
含义
- 32位输入,32位输出
- 设输入位 B,输出位 C,表为:C=L ( B )
运算规则: C=L ( B ) =B ⊕(B<<<2) ⊕(B<<<10) ⊕(B<<<18) ⊕(B<<<24)
📌字合成变换T:可逆变换
含义
由 非线性变换τ 和 线性变换L 复合而成;
-
📍轮函数F
📌概念
输入数据: ( X, X, X, X ) ,128位,四个32位字
- 输入轮密钥: rk ,32位字
- 输出数据:32位字
- 轮函数 F :
F ( X, X, X, X, rk ) = X ⊕T ( X ⊕ X ⊕ X ⊕ rk )
📌F ( X, X, X, X, rk ) = X ⊕ T ( X ⊕ X ⊕ X ⊕ rk )
rk 是轮密钥,合成变换T是一个可逆变换,由 非线性变换τ 和 线性变换L 构成
F 的计算过程:输入数据的 X 与合成置换T的输出做异或运算即可。📍加密算法
输入明文: ( X, X, X, X ),128位,四个字
输入轮密钥:rk ,i=0 ,1 ,… ,31,共32个字
输出密文:( Y, Y, Y, Y ),128位,四个字
算法结构:轮函数的32轮迭代,每轮使用一个轮密钥
加密算法:
X = F( X, X, X, X, rk )
= Xi ⊕ T ( X ⊕ X ⊕ X ⊕ rk ),i=0,1…31
( Y, Y, Y, Y )= ( X, X, X, X )📍解密算法*无须掌握
📌步骤
输入加密密钥:MK= ( MK , MK , MK , MK )
- 输出轮密钥: rk,i=0,1,…,30,31
- 中间数据: K, i=0,1,…,34,35
- 密钥扩展算法:
- ① ( K, K, K, K ) = ( MK ⊕ FK , MK ⊕ FK , MK ⊕ FK , MK ⊕ FK )
- ② For i=0,1, … ,30,31
- Do ik =K+4 =K ⊕T’( K ⊕ K ⊕ K ⊕CK )
- 说明: T’变换 与 加密函数中的 T 基本相同,只将其中的 线性变换 L 修改为以下 L’
- L’(B)=B⊕(B<<<13) ⊕(B<<<23)
- 其中, FK=( FK , FK , FK , FK ) 为系统参数, CK=(CK , CK , … , CK ) 为固定参数,用于密钥扩展算法,其中 FK (i=0 , … , 3)、CK (i=0 , … , 31) 为字
📌定义
- 输入密文: ( X, X, X, X )
- 输入轮密钥: rki , i=31,30,…,1,0,共32个字
- 输出明文: ( Y, Y, Y, Y )
- 算法结构:轮函数的32轮迭代,每轮使用一个轮密钥。
- 解密算法:
X = F ( X, X, X ,X , rk )
= X ⊕T ( X ⊕ X ⊕ X ⊕rk ) , i=31, …, 1, 0
(Y, Y, Y, Y )= (X, X, X, X )
📍密钥扩展
📌常数
在密钥扩展中使用一些常数
FK = ( A3B1BAC6 ) , FK = ( 56AA3350 ) ,
FK = ( 677D9197 ) , FK = ( B27022DC) 。
📌固定参数 CK
CK是32位, 00070e15是用16进制数表示的,
算法是:Ck = ( 4i+j) × 7( mod 256) , i=0,1,2,…,31 , j=0,1,…,3
i是外循环共32轮,j是内循环共4次,
例:i=0,j=0,Ck 00 =0,16进制表示为:00
i=0,j=1,Ck =7,16进制表示为:07
i=0,j=2,Ck =14,16进制表示为:0e
i=0,j=3,Ck =21,16进制表示为:15
00 07 0e 15,拼在一起00070e15 ,即CK
i=1,j=0,Ck =28,16进制表示为:1c
i=1,j=1,Ck =35,16进制表示为:23
i=1,j=2,Ck =42,16进制表示为:2a
i=1,j=3,Ck =49,16进制表示为:31
1c 23 2a 31,拼在一起为1c232a31 ,即CK
📍SM4的安全性
①国家专业机构设计。算法简洁,以字和字节为处理单位,对和运算,符合当今分组密码主流。
②专业机构进行了密码分析,因此是安全的。
③民间学者对21轮SMS4进行了差分密码分析。
④尚需经过实践检验。