SM4算法是一种由中国国家密码管理局于2012年发布的分组密码算法,属于对称加密算法(即加密和解密使用相同的密钥)。它是中国商用密码标准之一,主要用于保护数据的机密性。
SM4是一种分组密码算法,其分组长度为128位(即16字节,4字),密钥长度也为128位(即16字节,4字)。其加解密过程采用了32轮迭代机制(与DES、AES类似),每一轮需要一个轮密钥(与DES、AES类似)。
一、算法结构
SM4采用Feistel网络结构(与DES类似),但经过改进以增强安全性。其加密和解密流程相同,仅轮密钥的使用顺序相反。

加密步骤:
-
输入处理:
-
明文分组为128位,拆分为4个32位字:
,
。
-
与32个轮密钥 rki(0≤i<32)进行32轮迭代。
-
-
轮函数(F):
每轮的运算如下:
Xi+4=F(Xi,Xi+1,Xi+2,Xi+3,rki)=Xi⊕T(Xi+1⊕Xi+2⊕Xi+3⊕rki)- ⊕:32位异或运算。
- T(⋅):由非线性变换 ττ 和线性变换 LL 复合而成。
-
核心变换 T 的组成:
-
非线性变换 τ:
将输入的32位字拆分为4个8位字节,每个字节通过固定的S盒替换(类似AES的S盒,但设计不同)。 -
线性变换 L:
L(B)=B⊕(B⋘2)⊕(B⋘10)⊕(B⋘18)⊕(B⋘24)
对 ττ 的输出进行扩散,公式为:其中 ⋘ 表示循环左移。
-
-
最终输出:
-
经过32轮后,得到 X35,X34,X33,X32,反序组合为密文。
-
解密:
解密过程与加密完全一致,只需将轮密钥按逆序使用(即 rk31,rk30,…,rk0)。
二. 密钥扩展算法
将128位主密钥 MK 扩展为32个轮密钥 rki:
-
将 MK 拆分为4个32位字:MK0,MK1,MK2,MK3。
-
通过固定参数 FK 和 CK(系统常量)生成中间密钥:
Ki=MKi⊕FKi(0≤i<4) -
通过类似轮函数的方式生成 rki:
rki=Ki+4=Ki⊕T′(Ki+1⊕Ki+2⊕Ki+3⊕CKi)
- T′ 与加密中的 T 类似,但线性变换改为 L′(B)=B⊕(B⋘13)⊕(B⋘23)。
三. 安全性特点
-
抗差分/线性攻击:S盒和线性变换的设计可有效抵抗差分和线性密码分析。
-
混淆与扩散:S盒提供非线性混淆,线性变换确保密钥和明文位的充分扩散。
-
效率:单轮操作简单,适合硬件实现(如智能卡、物联网设备)。
5. 应用场景
-
中国商用密码体系:广泛应用于金融、政务、通信等领域。
-
国际标准:已被纳入ISO/IEC 18033-3国际标准(2018年)。
四、 对比其他算法
| 特性 | SM4 | AES-128 | DES |
|---|---|---|---|
| 分组长度 | 128位 | 128位 | 64位 |
| 密钥长度 | 128位 | 128/192/256位 | 56位(实际) |
| 轮数 | 32轮 | 10/12/14轮 | 16轮 |
| 结构 | Feistel改进 | SPN | Feistel |
五、总结
SM4是一种高效、安全的分组密码算法,其设计兼顾了理论安全性和实际性能,尤其适合需要国产密码标准的场景。与AES相比,它在硬件实现上可能更具优势,但安全性相当。
1万+

被折叠的 条评论
为什么被折叠?



