SM4算法:中国国家密码局对称标准详解
SM4算法是中国自主设计的分组密码算法,主要用于数据加密保护,是国家密码标准(GB/T 32907-2016)的核心组成部分。
一、SM4算法核心特性
- 算法类型:属于分组密码,采用Feistel结构(轮函数迭代),加密和解密过程结构相同,仅轮密钥使用顺序相反。
- 核心参数:
- 分组长度:固定为128位,即每次处理16字节的数据。
- 密钥长度:固定为128位,确保高强度加密。
- 迭代轮数:共32轮,每轮通过S盒(非线性变换)和线性变换实现数据混淆与扩散。
- 安全等级:能有效抵抗差分攻击、线性攻击、代数攻击等主流密码分析方法,经国家密码管理局认证,可满足政务、金融等关键领域的安全需求。
二、SM4算法实现
SM4算法流程基于Feistel结构,核心分为密钥扩展和数据加密/解密两部分,加密与解密流程结构完全一致,仅轮密钥使用顺序相反。
A、核心前提:轮密钥扩展
128位初始密钥需先生成32个128位的轮密钥(rk0
-rk31
),供32轮迭代使用,步骤如下:
- 初始准备:将128位初始密钥拆分为4个32位字(
K0
-K3
),与4个固定的32位系统参数(FK0
-FK3
)分别异或,得到初始密钥字(K4
-K7
)。 - 迭代生成轮密钥:从
K8
开始,每生成1个密钥字需经过3步:- 对前1个密钥字(如
K7
)进行循环左移、S盒非线性变换、异或固定参数(CK
)的复合操作,得到临时值t
。 - 将
t
与前4个密钥字(如K4
)异或,得到新密钥字(如K8
)。 - 重复此过程,直至生成
K4
-K39
,其中K8
-K39
即为32个轮密钥(rk0
-rk31
)。
- 对前1个密钥字(如
B、数据加密流程(128位明文→128位密文)
- 初始变换(IP):将128位明文拆分为4个32位字(
X0
-X3
),与第1个轮密钥rk0
结合,进入首轮迭代。 - 32轮迭代(Feistel结构):每轮迭代对4个输入字(
Xi
-Xi+3
)执行固定操作:- 对
Xi+3
进行循环左移、S盒变换、线性变换的复合操作,得到中间值F
。 - 将
F
与Xi
、轮密钥rki
异或,得到新字Xi+4
。 - 4个输入字依次右移(
Xi+1
→Xi
,Xi+2
→Xi+1
,Xi+3
→Xi+2
,Xi+4
→Xi+3
),进入下一轮。
- 对
- 逆初始变换(IP⁻¹):32轮迭代结束后,将最终4个输出字(
X32
-X35
)按X35
、X34
、X33
、X32
的顺序拼接,得到128位密文。
C、数据解密流程(128位密文→128位明文)
解密流程与加密流程结构完全相同,唯一区别是轮密钥的使用顺序相反:
- 加密时按
rk0
→rk1
→…→rk31
的顺序使用轮密钥。 - 解密时按
rk31
→rk30
→…→rk0
的顺序使用轮密钥。
三、安全性分析
- 密钥空间:128位密钥提供
2^128
种可能,远超暴力破解的计算能力(需约10^38
年)。 - 抗攻击能力:
- 差分攻击:最佳差分路径概率≤
2^-126
,需2^126
次选择明文攻击,实际不可行。 - 线性攻击:线性逼近概率≤
2^-64
,攻击复杂度超过2^128
。 - 侧信道攻击:硬件实现中通过冗余塔域(RTF)等技术防护,例如将S盒运算映射到AES的冗余塔域框架,降低功耗泄露风险。
- 差分攻击:最佳差分路径概率≤
- 国际认证:2021年成为ISO/IEC国际标准(ISO/IEC 18033-3:2021/AMD1:2021),表明其设计通过国际密码学界审查。
四、与AES的对比
特性 | SM4 | AES-128 |
---|---|---|
结构 | 非平衡Feistel网络,32轮 | SPN结构,10轮 |
S盒设计 | 自主构造的8×8置换表 | GF(2⁸)求逆+仿射变换 |
扩散机制 | 线性变换L(循环移位+异或) | 列混淆(MixColumns)矩阵乘法 |
密钥扩展 | 与加密流程相似,生成32个轮密钥 | 独立密钥扩展算法,生成11个轮密钥 |
硬件优化 | 边扩展边加密,节省存储资源 | 流水线架构,侧重吞吐率 |
安全性 | 抗差分/线性攻击能力与AES相当 | 抗代数攻击能力更强 |
SM4在资源受限设备(如物联网传感器)上表现更优,而AES在通用计算平台上性能略高。
五、应用场景
- 金融领域:银行卡交易加密、移动支付安全(如中国银联的SM4-GCM标准)。
- 政务通信:公文传输加密、电子证照保护。
- 物联网:智能家居设备间的通信加密(如华为鸿蒙系统的SM4集成)。
- VPN与云安全:虚拟专用网络数据加密、云端存储敏感字段保护。
六、总结
SM4算法通过S盒非线性混淆、线性变换全局扩散和密钥扩展的伪随机性,实现了高效且安全的对称加密。其设计既符合国际密码学标准,又满足国产化替代需求,在政务、金融、物联网等关键领域发挥核心作用。随着量子计算技术的发展,SM4的后量子安全性优化(如融合格密码)成为未来研究重点,但目前其128位密钥和32轮迭代足以抵御现有攻击手段。
SM4 算法处理固定长度为 128 位(16 字节)的数据块,使用 128 位(16 字节)的密钥。在实际应用中,对于长度超过 128 位的数据,需要使用分组密码的工作模式(如 CBC、CTR 等)进行处理。
更多
SM4算法配合不同模式用于具体的场景,比如IPSec的国密场景CBC(SM4)+SM3, 磁盘加密的XTS(SM4),NTLS(国密传输层安全协议)加密的GCM(SM4)等。
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。
博客地址: https://fishmwei.github.io
掘金主页: https://juejin.cn/user/2084329776486919