1. SM4 算法概述

说起 SM4,得先从国密算法的大背景聊起。你可能听说过“商用密码”这个词——2000 年前后,国内金融、政务系统开始意识到不能用国外算法一条道走到黑。当时我们团队参与了一些行业标准评审,我记得最头疼的事就是:每个行业自己搞一套对称算法,互不兼容。后来国家密码管理局出手了,把 SMS4(SM4 的前身)定为无线局域网标准里的核心算法。

核心要点:SM4 是国密对称分组密码标准,密钥 128 位,分组 128 位,32 轮迭代。

1.1 发展历史

2006 年,国家发布 SMS4 算法规范,主要用于 WAPI 无线安全。说实话,那时候我在做无线芯片的协议栈,第一次看到 SMS4 的 S 盒设计,心里还犯嘀咕——

“这玩意儿跟 AES 比到底行不行?”

后来跑了几轮仿真,发现它硬件实现面积比 AES 小了将近 30%,功耗也低。嗯,这里要注意,国标 SM4 的轮函数结构是 Feistel 变种,加解密路径几乎一样,实现起来很友好。

时间事件我的体会
2006 年发布 SMS4 标准(无线局域网用)首次接触国密对称算法,感觉设计保守但稳定
2012 年SM4 成为国家密码行业标准 GM/T 0002-2012参与过金融 IC 卡方案评审,开始大量用国密
2016 年正式成为国家标准 GB/T 32907-2016看到越来越多国外芯片开始支持 SM4 硬件加速
2021 年进入 ISO/IEC 18033-3国际互认信号,出海项目省了不少沟通成本

我个人习惯把 SM4 的发展分成三个阶段:行业定制期(2006~2011)、国标推广期(2012~2020)、国际互认期(2021 至今)。你在做密钥刷新方案时,一定要清楚你的系统用的是哪个版本的 SM4——老版本 SMS4 的 S 盒和轮数跟新国标一样,但密钥扩展细节略有差异,我在一个老旧嵌入式项目中就踩过这个坑。

避坑指南:我曾经在升级固件时,把 SMS4 的密钥扩展程序直接用到 SM4 上,结果加解密一致性测试挂了一片。后来逐行比对 GM/T 0002-2012 才发现,密钥扩展的更新函数里有一个常数不同。改完就好了。

1.2 国家标准

SM4 对应的国标号是 GB/T 32907-2016,全称《信息安全技术 SM4 分组密码算法》。说白了,这就是一份“使用说明书”加“安全约束清单”。你想想看,一个算法要成为国标,至少得把下面这几件事说清楚:

  • 算法结构:128 位 Feistel 变种,32 轮非线性迭代
  • S 盒:固定的 8×8 查表,共 16 个 S 盒(其实是同一个,只是位置不同)
  • 密钥扩展:128 位主密钥 -> 32 个 32 位轮密钥
  • 加解密流程:相同结构,只是轮密钥使用顺序相反
  • 工作模式:ECB、CBC、CTR、OFB、CFB(GCM 后来也纳入了国密系列)

我尤其想提一下 密钥扩展 部分。SM4 用了 128 位的系统参数 FK 和固定参数 CK,这些参数在国标里是定死的。你做密钥轮换时,如果直接复用主密钥扩展会引入安全隐患——轮密钥和主密钥之间的代数关系太清晰。所以后面章节我们专门讲“边界刷新”,就是要在会话密钥生成时切断这种线性关联。

注意:国标中 SM4 的 S 盒设计是公开的,但不要因为它公开就放松差分分析防御。32 轮迭代已经提供了足够的安全余量,但在密钥刷新场景中,如果会话密钥的子轮泄露多于 4 轮,理论上有被攻击的可能。

1.3 典型应用场景

国密 SM4 现在几乎覆盖了“全栈”加密需求。我给你列几个我实际参与过的场景:

  1. 金融 IC 卡:银行卡个人化、脱机数据认证。我做过一个密钥管理子系统,SM4 用在卡片和 POS 终端的会话加密上。当时遇到的最大问题是 密钥生命周期管理——卡片一发行就是三五年,中间必须支持会话密钥在线更新。
  2. 无线局域网(WAPI):这是 SM4 的“老本行”。无线传输容易丢包,你设计的会话密钥刷新方案必须支持 无状态恢复(也就是接收方能通过计数器的值算出当前用哪个密钥片)。
  3. VPN 网关:IPSec 里的国密改造。记得有一次要对接 C/S 架构的加密机,我发现对方用的 SM4 是 ECB 模式直接加密会话密钥……吓得我赶紧建议改成 CTR 模式,避免了重放攻击。
  4. 移动支付:手机端和服务器之间的安全通道。这里有个细节:手机的 SM4 实现通常是软件(ARM NEON 指令加速),而服务器是硬件加速或 OPAQUE 协议——你的密钥轮换算法要考虑两端性能不对称。
  5. 物联网安全模块:比如电表、水表、车联网 T-Box。SM4 的硬件实现面积小、功耗低,很适合资源受限设备。我见过一个低功耗方案,把会话密钥存在 SRAM 里,每次上电用 PUF 派生——这里边界刷新就特别关键,否则攻击者能通过电压毛刺读走敏感数据。
一句话总结 SM4 的定位:国密对称算法的“基座”,没有它,上层 PKI、数字信封、身份认证全是空中楼阁。

1.4 SM4 算法知识体系

下面这张图帮你快速建立本章的知识骨架。注意看 发展历史、标准体系、应用场景 三条主脉怎么汇聚到“会话密钥边界刷新与轮换”这个课程主题上的。

SM4 算法知识体系 发展历史 国家标准 应用场景 SMS4(2006) 行标 GM/T 0002 国标 GB/T 32907 ISO/IEC 18033-3 算法结构 S盒 / 密钥扩展 工作模式 安全强度要求 金融 IC 卡 WAPI / VPN 移动支付 物联网设备 SM4 会话密钥边界刷新与轮换

从这张图能看出来,SM4 的三大支柱最终都指向同一个工程问题:密钥怎么安全、高效地轮到?历史告诉我们要兼容国标升级,标准告诉我们要遵守密钥扩展规范,场景告诉我们不同设备有不同约束。接下来 29 章,就是一步步拆解这个核心问题。