国密算法概述与标准体系归纳总结

各位好,我是这次课程的主讲。咱们第一讲,先把国密算法的底子打牢。说白了,就是搞清楚「国密是什么」「标准体系长什么样」。我在早年做密码应用合规项目时,就见过不少团队把 SM2 跟 SM3 搞混,甚至拿着开源库的 RSA 签名硬充国密——结果被测评机构打回重做。嗯,这一章我们就来一次彻底梳理。

国密算法是什么

国密算法,全称是国家密码管理局发布的商用密码算法标准。它包含对称密码、公钥密码、杂凑密码三大类。我个人的理解是:你把它们当成「中国版的 AES+RSA+SHA」组合就行,但细节上差异不小。

目前主流的国密算法有这几个:

  • SM1 —— 对称加密,硬件实现,不公开算法细节,常用于智能IC卡、加密机
  • SM2 —— 椭圆曲线公钥密码(包括加密、签名、密钥交换),对标 ECDSA/ECIES
  • SM3 —— 密码杂凑算法,输出256位摘要,对标 SHA-256
  • SM4 —— 分组对称加密,密钥长度128位,对标 AES-128
  • SM9 —— 基于标识的密码(IBC),不需要数字证书分发公钥
  • ZUC(祖冲之算法)—— 流密码,主要用于移动通信加密

一个小提示:你在 Secrets Manager 里最常打交道的是 SM2(用于密钥封装和数字签名)、SM3(完整性校验与派生)、SM4(数据加密存储)。SM9 也有应用场景,但当前支持度不如前三个那么普遍。

标准体系是如何组织的

国密的标准化工作由国家密码管理局主导,归口到密码行业标准(GM/T 系列)。我刚开始接触时,看着一堆标准号挺头疼——GM/T 0003、GM/T 0004、GM/T 0009……后来总结了一个规律,你把它们按功能分层就清晰了。

层次 标准举例 说明
算法层 GM/T 0003(SM2)
GM/T 0004(SM3)
GM/T 0002(SM4)
GM/T 0081(SM9)
定义具体数学运算、参数、接口
协议层 GM/T 0024(SSL VPN 国密)
GM/T 0054(IPsec 国密)
GM/T 0016(智能密码钥匙)
规定算法在通信协议中的使用方式
应用层 GM/T 0028(密码模块安全)
GM/T 0051(电子签章)
GM/T 0091(密钥管理系统)
面向具体业务场景的规范要求

你在做 Secrets Manager 集成时,最需要盯紧的是 GM/T 0091 和 GM/T 0051——前者管密钥全生命周期,后者涉及数字签名在凭证分发中的法律效力。我记得有一次对接某政务云,对方要求密钥存储必须符合 GM/T 0091 三级要求,我们临时补了密钥备份和审计日志模块,折腾了好几天。

国密与国际算法的对比

你想想看,既然已经有了 AES/SHA/RSA,为什么还要用国密?核心原因就两点:合规要求与自主可控。但具体到性能、安全性上,它们之间有什么实质差异?我整理了一个表,方便你快速对照。

对比维度 国密 国际算法
对称加密 SM4(128位密钥) AES(128/192/256位)
公钥加密 SM2(256位素域椭圆曲线) RSA(2048位以上)/ ECDSA
杂凑 SM3(256位摘要) SHA-256
性能特点 SM2 签名较快,加密稍慢
SM3 接近 SHA-256
SM4 软件实现略慢于 AES-NI
AES-NI 指令集加速明显
RSA 签名慢但验签可优化
ECDSA 在相同安全强度下密钥短
合规要求 国内等保、密评必考 常见于国际标准,国内可选

注意:SM2 的曲线参数是固定的(不同于 ECDSA 可以选多条曲线),所以你在实现密钥对生成时,必须使用标准指定的曲线。我曾经看到有人从 Bouncy Castle 里随便拉了一条 secp256r1 当 SM2 用,结果签名验签死活对不上——曲线方程完全不一样。

国密标准体系全景图

下面这张图概括了从算法到应用的整体层级关系。你在设计 Secrets Manager 的密码方案时,可以把它当路线图用——先选好算法层的 SM2/SM3/SM4,然后看协议层是否有现成的 TLS 国密套件,最后对照应用层的 GM/T 0091 检查密钥存储方式。

国密标准体系全景图 应用层 密钥管理·电子签章·密码模块 协议层 SSL VPN · IPsec · 密码钥匙 算法层 SM2 · SM3 · SM4 · SM9 · ZUC GM/T 0091, GM/T 0051, GM/T 0028 应用规范与安全要求 GM/T 0024, GM/T 0054, GM/T 0016 协议封装与接口标准 GM/T 0003, GM/T 0004, GM/T 0002 算法定义与数学规范 在 Secrets Manager 中的应用路径 密钥生成 → SM3 校验 → SM2 封装保护 → SM4 存储 → 合规审计(GM/T 0091) 三层体系逐级支撑,缺一层都可能被密评卡住 算法层 选型 & 参数 协议层 封装 & 传输 应用层 合规 & 审计 Secrets Manager 集成落地

算法选型思路

在 Secrets Manager 的实际开发中,你怎么选算法?我个人的习惯是三步走:

  1. 看业务场景:是不是需要数字签名?如果需要,SM2 签名叫得响。如果只是数据加密,SM4 就够了。
  2. 看硬件支持:国产 CPU(如飞腾、鲲鹏、龙芯)都在逐步提供 SM3/SM4 的指令集加速。如果你的机器支持国密指令,我建议优先用硬件加速,性能差距可能达到 3~5 倍。
  3. 看合规等级:等保三级以上必须使用国密算法。如果只是内部测试环境,可以先用国际算法做功能验证,上线前切为国密。

一个小经验:当你需要把 SM4 密钥交给另一个系统时,别忘了用 SM2 公钥加密传输。直接明文传 SM4 密钥,在密评里会被判定为高风险项。我在一个金融项目中见过这样的问题,后来在密钥分发环节加了 SM2 的加密信封才通过测评。

常见误区

说几个我踩过的坑:

  • SM2 签名结果不是固定长度:它包含 r 和 s 两个大整数,标准编码为 DER 格式(长度通常 70~72 字节)。别用固定长度去截取。
  • SM3 输出是 32 字节,不是 64 字节:跟 SHA-256 一样。有人把 SM3 理解成 64 字节,导致签名摘要环节出错。
  • SM4 在 CBC 模式下需要随机 IV:很多人图省事用了固定 IV,这是 AES 时代就强调过的问题。国密标准里同样要求 IV 必须每次随机生成。