1. SM4 算法概述:国密标准背景、设计目标、与 AES/DES 的比较

大家好,我是老张。今天咱们开始聊 SM4 算法。

说实话,早期我做云安全项目的时候,碰到的大多是 AES、RSA 这类国际算法。后来有一次做政务云项目,客户明确要求必须用「国密算法」—— 那种感觉,就像突然让你用中文写加密代码。当时我对 SM4 其实心里没底,总觉得它是不是 AES 的中国简化版?后来真正啃完标准文档和源码,才发现这个算法设计得很讲究,不是简单的仿制品。

这一节,我就把自己这些年对 SM4 的理解拆开来讲。不会上来就讲公式,先把背景、设计理念和它跟 AES、DES 的「打架」过程说清楚。你懂了设计者的意图,后面看代码才不会晕。

1.1 国密标准背景

SM4 算法的全称叫 SM4 分组密码算法,是中国国家密码管理局发布的商用密码标准之一。它的标准编号是 GM/T 0002-2012,2012 年正式成为国家标准。

你会问:为什么中国要搞一套自己的密码标准?

原因其实很现实。

  • 自主可控:国际密码算法(比如 AES、DES)的专利和技术都掌握在国外机构手中。关键基础设施和敏感数据,用别人设计的加密算法,始终存在后门或断供风险。这一点我在银行项目里感受特别深 —— 监管要求核心系统必须使用国密,不是技术炫技,是安全底线。
  • 合规要求:GB/T 39786、等保 2.0、密码法都明确规定了国密算法的使用场景。尤其是云平台做等保三级以上测评,SM4 几乎是必选项。
  • 产业生态:国内芯片厂商、密码机厂商、云服务商已经将 SM4 固化到硬件中。我用过几款国产密码卡,SM4 的性能已经能跟 AES 硬件引擎掰手腕了,这点进步很大。

SM4 的前身是 SMS4 算法,最早用于无线局域网标准 WAPI(还记得当年 WAPI 和 Wi-Fi 的标准之争吗)。后来经过分析和改进,2012 年正式升格为国家标准。目前它在金融、政务、公安、社保、云计算等场景中已经广泛部署。

个人小经验:如果你刚接手一个国密改造项目,别急着写代码。先去国家密码管理局官网下载《GM/T 0002-2012 SM4 分组密码算法》PDF,把算法描述和密钥扩展流程看三遍。很多坑,其实标准文档里已经写得很清楚了,只是大家总忽略它。

1.2 设计目标

SM4 在设计上有几个明确的目标。我当年读标准文档的时候,能感受到设计团队在「安全」和「效率」之间反复权衡。

  • 安全性不低于 AES-128:SM4 的密钥长度是 128 位,分组长度也是 128 位。设计时对标 AES-128,在抵抗差分密码分析和线性密码分析上有强度论证。实际攻防研究也表明,目前没有公开的有效攻击方法能威胁到 SM4 的全轮版本。
  • 适合软硬件实现:SM4 采用 32 轮非线性迭代结构,每轮的计算量相对均衡。我试过在 ARM Cortex-M3 上跑 SM4 软实现,存储开销很小,适合嵌入式环境。而在硬件实现上,它的 S 盒和线性变换可以流水线化,吞吐量能做到很高。
  • 低延迟与低功耗:与 AES 的替换-置换网络不同,SM4 的 Feistel 骨架(严格来说是「非平衡 Feistel 变体」)使得加解密结构可以高度共享。我在云原生的密钥管理服务(KMS)中看到,SM4 硬件加速模块的功耗和延迟都比同制程的 AES 略低。
  • 国内自主知识产权:这是硬性要求。算法设计不能侵犯已有的国际专利,同时要在国内生态里可落地。从结果来看,SM4 的 S 盒构造和线性置换矩阵与 AES 完全不同,没有专利纠纷风险。
注意:SM4 的密钥长度是 128 位,没有 AES 那样的 192 位和 256 位版本。这一点在云密钥管理场景中很重要 —— 如果你的合规要求是「AES-256 级别」,需要搭配 SM4 的密钥派生和使用策略来做补偿,不能只看算法本身。

1.3 与 AES/DES 的比较

我见过不少同学把 SM4 直接等同于「中国的 AES」。其实这种说法不准确。下面这张表格,我把三者的核心指标放在一起对比。你看完就明白了。

对比项 SM4 AES DES
算法结构 32 轮非线性迭代(Feistel 变体) 替换-置换网络(SPN) 16 轮 Feistel 网络
密钥长度 128 位 128 / 192 / 256 位 56 位
分组长度 128 位 128 位 64 位
轮数 32 轮 10 / 12 / 14 轮 16 轮
S 盒规模 8×8 位(1 个 S 盒) 8×8 位(1 个 S 盒,查表实现) 6×4 位(8 个 S 盒)
密钥扩展 32 轮子密钥由主密钥通过线性变换生成 128/192/256 位密钥分别使用不同的扩展策略 56 位密钥生成 16 轮子密钥,含置换与移位
软件性能 中等(查表优化后接近 AES) 高(有原生指令集 AES-NI 加持) 较低(已不被推荐使用)
硬件性能 高(适合流水线与低功耗设计) 非常高(广泛硬件加速器支持) 已基本退出硬件设计
安全强度 AES-128 等效 AES-128 ~ AES-256 已不安全(56 位密钥可被暴力破解)
专利/标准 中国国标(免费使用) 美国 FIPS(免费使用) 已过专利期,但仍不推荐
云环境适配 国内云平台原生支持度提升中 全球通用,支持最完善 仅兼容旧系统

从表格能看出几个关键结论:

  • DES 已经过时,密钥太短,分组也短,你千万别在生产环境里用。我在一个历史遗留系统里见过 DES 加密的支付数据,当时就建议立刻做数据重加密迁移。
  • AES 的算法结构是 SPN,扩散更快,每轮计算量大但轮数少。SM4 用 Feistel 变体,每轮计算量小,但轮数多到 32 轮。两种思路都能达到相似的安全边际。
  • SM4 与 AES-128 在安全强度上同等级,但 AES 支持更长的密钥,这一点在要求「抗量子安全裕度」的场景中需要注意。
  • 云环境下的差异主要在生态成熟度。AES 有 AES-NI 指令集,Intel/AMD 芯片原生支持;SM4 虽然没有通用 CPU 指令集,但国产 CPU(如飞腾、鲲鹏)和密码卡已经做到了硬件加速。
我的实际感受:在云密钥管理服务(KMS)中,如果客户只有国际应用,用 AES 没问题。但国内政务云、金融云,监管一刀切「必须使用 SM4 做数据加密」,那就只能选 SM4。这时候你发现,SM4 的密钥轮转、密钥层次设计与 AES 在接口层面差异不大,底层引擎切换一下就可以。所以从 KMS 架构来看,SM4 和 AES 并存才是最好的策略。

下面我用一张框架图,把 SM4 算法在本课程中的定位和核心知识点串起来。你以后学后面的章节也能照着图对号入座。

SM4 算法知识框架 — 第1章核心定位图 SM4 算法在云密钥管理中的知识框架(第1章) SM4 算法概述 国密标准背景 设计目标 与 AES/DES 的比较 自主可控 合规要求 产业生态 安全性不低于 AES-128 适合软硬件实现(低功耗) 国内自主知识产权 算法结构与轮数 安全强度等效对比 云生态适配度差异 ▶ 后续章节会基于此框架,逐一讲解密钥生成、工作模式、 云密钥层次设计与硬件加速实践

为什么我把这一章放在课程开头?你看完这张图就懂了。SM4 不是一个孤立的算法,它跟国密标准体系、设计方法论、现实对比紧密关联。不先把这些「周边」理清楚,后面讲密钥派生、多租户隔离、密钥轮换的时候,你很容易困惑「为什么这里要这样设计」。