一、国密算法概述:从一次“被卡脖子”的经历说起

我记得那是2018年,我参与的一个金融核心系统要过等保三级测评。评审专家看了一眼我们的加密模块——全是RSA、AES、ECDSA,直接给了个“不符合”。

当时我还有点不服气:这些国际算法用得好好的,性能也稳定,凭什么不行?后来仔细研究了政策文件才明白,关键信息基础设施领域,国密算法是硬性要求。说白了,这不是技术选型问题,是合规红线。

从那以后,我花了大量时间研究国密算法体系,也踩了不少坑。今天这一章,我就把国密算法的家底给你捋一遍。

1.1 国密算法体系全景

国密算法,全称“国家商用密码算法”,由国家密码管理局发布。目前最核心的四个算法是:SM2、SM3、SM4、SM9。它们各自对标国际算法,但设计思路和实现细节有不少差异。

核心要点:国密算法不是“重新发明轮子”,而是在国际算法基础上做了针对性优化,尤其考虑了我国实际应用场景中的安全需求和性能约束。

下面这张图,是我个人习惯用来给团队新人做培训的——国密算法体系全景图,一看就明白它们各自的位置:

国密算法体系全景图 国密算法体系全景图 国密算法体系 公钥密码算法 对称密码算法 密码杂凑算法 SM2(椭圆曲线) 签名/密钥交换/加密 SM4(分组密码) 数据加密/解密 SM3(杂凑算法) 消息摘要/完整性校验 SM9(标识密码) 基于标识的密码体制 典型应用场景 电子政务 · 金融交易 · 物联网安全 · 身份认证 · 数据加密存储 注:SM2 同时覆盖签名、密钥交换和加密三种功能,是国密体系中最核心的公钥算法

1.2 四大算法逐个说

SM2——国密的“全能选手”

SM2 基于椭圆曲线密码学(ECC),对标国际上的 ECDSA 和 ECDH。但有个关键区别:SM2 使用的椭圆曲线参数是国密局自主定义的,不是 NIST 曲线。

我在项目中遇到过一个问题:某厂商的硬件加密机只支持 NIST P-256 曲线,不支持 SM2 曲线。结果我们不得不额外加一层软件适配层,性能直接掉了 30%。所以选型时一定要确认硬件对 SM2 的原生支持。

避坑指南:SM2 的密钥长度是 256 位,但它的安全强度相当于 RSA 3072 位。同样的安全等级,SM2 的密钥更短、计算更快。我曾经在嵌入式设备上做过对比测试,SM2 签名比 RSA 2048 快 5 倍以上。

SM3——比 SHA-256 更“保守”的哈希

SM3 的输出长度也是 256 位,结构上类似 SHA-256。但 SM3 的消息扩展函数更复杂,轮数也更多(64 轮 vs SHA-256 的 64 轮,但每轮操作更密集)。

你想想看,为什么国密局不直接采用 SHA-256?我个人理解是:SHA-256 虽然目前安全,但它是美国标准。在关键基础设施里,用别人的标准总归有隐患。SM3 在设计上留了更多安全余量,比如它的压缩函数对差分攻击的抵抗性更强。

SM4——轻量级的分组密码

SM4 是国密体系里唯一的对称加密算法,分组长度 128 位,密钥长度也是 128 位。结构上它用了非平衡 Feistel 网络,和 AES 的 SPN 结构完全不同。

嗯,这里要注意:SM4 的加解密流程是对称的——解密就是加密的逆过程,密钥编排也一样。这意味着实现起来比 AES 简单,但软件实现时要注意查表法的侧信道攻击防护。我曾经在某个项目中因为用了不安全的查表实现,被安全审计打回来重写。

SM9——基于标识的密码体制

SM9 是国密体系里最“年轻”的算法,2016 年才发布。它最大的特点是:不需要数字证书。用户的公钥可以直接用身份标识(比如手机号、邮箱)计算出来,省去了 PKI 证书管理的麻烦。

我在物联网项目中特别喜欢用 SM9——设备数量动辄几十万,管理证书太痛苦了。SM9 的密钥生成中心(KGC)可以批量生成私钥,设备端只需要安全存储自己的私钥就行。

1.3 与国际算法的全面对比

下面这个表格是我做迁移方案时必用的参考,直接对比了国密和国际算法的核心差异:

对比维度 国密算法 国际算法 关键差异
公钥加密 SM2(256位椭圆曲线) RSA(2048/3072位) SM2 密钥更短,计算更快;RSA 兼容性更广
数字签名 SM2(基于ECC) ECDSA(基于ECC) 曲线参数不同,SM2 签名流程略有差异
对称加密 SM4(128位分组) AES(128位分组) 结构不同,SM4 软件实现略慢于 AES-NI
哈希算法 SM3(256位输出) SHA-256(256位输出) SM3 安全余量更大,但性能略低
标识密码 SM9(基于双线性对) 无直接对标 SM9 省去证书管理,但需要 KGC 基础设施

重要提醒:不要简单认为“国密算法就是国际算法的换皮”。SM2 的签名流程、SM4 的密钥编排、SM3 的压缩函数都有独特设计。直接拿国际算法的实现改参数就跑,大概率会出问题。我曾经见过有人把 ECDSA 的代码直接改成 SM2 曲线参数,结果签名验证死活过不了——因为 SM2 的签名哈希计算顺序和 ECDSA 不一样。

1.4 应用场景与政策背景

国密算法的推广,背后有明确的政策驱动。我整理了几个关键时间节点:

  • 2012年:SM2/SM3/SM4 正式成为国家标准(GB/T 32918、GB/T 32905、GB/T 32907)
  • 2017年:《网络安全法》实施,明确关键信息基础设施应使用自主可控的密码技术
  • 2020年:《密码法》施行,规定商用密码产品必须符合国密标准
  • 2023年:金融、政务、能源等行业陆续出台细则,要求存量系统完成国密改造

说白了,现在做系统设计,如果不考虑国密算法,等保测评这关就过不去。我参与的几个银行核心系统改造项目,时间表都卡得很紧——监管要求 2025 年底前完成全部国密迁移。

具体到应用场景,我总结了三个主要方向:

  1. 电子政务:公文流转、电子签章、身份认证。SM2 签名 + SM3 摘要是最常见的组合。
  2. 金融交易:支付指令加密、交易签名、密钥协商。SM4 用于数据加密,SM2 用于签名。
  3. 物联网安全:设备身份认证、固件升级校验、数据加密传输。SM9 在这里特别有优势。

我的建议:如果你正在做一个新项目,直接上国密算法,不要走“先国际后迁移”的弯路。迁移的成本远高于一开始就适配的成本——我见过太多项目因为前期用了国际算法,后期改造时接口不兼容、性能下降、测试返工,折腾了大半年。

1.5 本章小结

国密算法不是“政治任务”,它是一套经过严格设计的密码学方案。SM2、SM3、SM4、SM9 各有定位,组合起来可以覆盖绝大多数安全场景。理解它们和国际算法的差异,是做好迁移适配的第一步。