📍基本概念

SM4原名是SMS4,该算法最早于2006年1月公布,用于无线局域网产品的分组对称密码算法。
SM4分组长度和密钥长度为128比特数据处理单位:字(32位),字节(8位)
密码算法结构:Feistel结构,与DES不同的是,SM4采用非对称的Feistel结构,一边1个字,另一边为3个字。(滑窗结构)
SM4密码算法属于对合运算,加密与解密算法的结构相同
SM4共迭代32轮

📍流程

image.pngimage.png

  • 每个分组128位明文分组分为4个32位的字
  • 经过32轮迭代变换
  • 再将4个字反序变化后
  • 得到128位密文

    📍运算符号

    ⊕ 表示32比特异或运算
    <<< i 表示32比特循环左移i位

    📍密码部件

    📌S盒:非线性字节变换部件

    含义

  • 8位输入、8位输出

  • 本质上,8位的非线性置换
  • 设输入位 a ,输出位 b ,表示为: b=S_Box(a)
  • S盒为固定的8比特输入8比特输出的置换,记为S(.)

    规则

  • S盒中的数据都是十六进制表示的,它的置换规则是:以输入的前半字节为行号,后半字节为列号,行列交叉点出的数据即为输出。

    image.png

    📌字变换τ: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))
image.png

📌字线性变换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变换

    📍轮函数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 )
    image.png

    📍解密算法*无须掌握

    📌步骤

  • 输入加密密钥: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) 为字

image.png

📌定义

  • 输入密文: ( 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进行了差分密码分析。
④尚需经过实践检验。