1. 国密算法概述与标准体系介绍

先问一个问题:你平时开发用的 RSA、AES、SHA-256,在国内合规场景里还跑得通吗?

说实话,我入行时也以为算法是通用的。直到第一次对接政务系统,对方说“必须用国密”,我才开始认真啃这套标准。今天咱们就把国密算法和它的标准体系捋清楚。

1.1 国密算法到底是什么

国密算法是国家密码管理局发布的一系列商用密码算法。说白了,就是咱们自己的加密标准。核心四件套:

  • SM2 – 椭圆曲线公钥密码算法,替代 RSA/ECDSA
  • SM3 – 密码杂凑算法,替代 SHA-256
  • SM4 – 分组对称密码算法,替代 AES
  • SM9 – 基于标识的密码算法,适合无证书场景

我记得最初接触 SM2 时,被它的曲线参数搞蒙了。后来才发现,它的安全强度比 RSA-2048 还高一点,但签名速度更快。

一个小经验:如果你只需要做哈希和加解密,SM3+SM4 是性价比最高的组合。SM2 主要用于数字签名和密钥交换,别滥用。

1.2 标准体系架构

国密标准不是孤立的几张纸,而是一套完整的体系。我用一个表帮你快速理清层级:

层级 代表标准号 典型内容
基础算法 GM/T 0003-2012(SM2)、GM/T 0004-2012(SM3) 算法定义、参数、接口
协议/应用 GM/T 0009-2012(SM2 密码语法)、GM/T 0010-2012(SM2 加密签名消息) 密钥封装、证书格式
设备/接口 GM/T 0018-2012(智能密码钥匙)、GM/T 0020-2012(证书应用接口) 密码卡、UKey 接入规范
检测/管理 GM/T 0005-2012(随机数检测)、GM/T 0060-2018(产品安全等级) 算法实现质量要求

你想想看,标准号前面的“GM/T”就是“国密推”的意思。2012 年那一波集中发布,后来陆续补充。我在项目中常用到的是 GM/T 0003(SM2)和 GM/T 0004(SM3),这两个最基础也最关键。

1.3 各算法核心能力对比

为了帮你快速决策,我做了一张对比表:

算法 适用场景 密钥长度 安全强度(等效) 性能特点
SM2 签名、密钥交换、加密 256 bit ≈ RSA-3072 签名慢于 ECDSA,加密较快
SM3 哈希、消息认证 输出 256 bit ≈ SHA-256 软件实现稍慢,硬件有优化
SM4 对称加密 128 bit ≈ AES-128 分组长度 128 bit,轮数 32 轮
SM9 基于标识的加密/签名 256 bit 系统参数 ≈ SM2 同等级 无需证书,适合 IoT

嗯,这里要注意——SM9 在政务云场景用得多,因为减少证书管理成本。但我个人建议,核心交易系统还是用 SM2 更稳妥,SM9 的标准还在完善中。

1.4 国密算法的整体关系图

下面这张 SVG 图帮你把整个国密家族串起来:

国密算法体系结构 国家密码管理局(商用密码标准) SM2(公钥) SM3(哈希) SM4(对称) SM9(标识) GM/T 0009/0010 TLCP(传输层密码) PKI / 数字证书 密码卡、UKey、HSM Java/Go/C SDK 封装 从标准到产品,每层都有对应的 GM/T 规范
核心思路:不要只记算法名,要建立“标准 → 算法 → 协议 → 产品”的链路。我当年踩的坑就是只调了 SM3 接口,忘了检查底层是否通过商密认证,结果测评没通过。

1.5 实战中的标准选择思路

我建议你按以下步骤决定用哪套国密方案:

  1. 先看合规要求:政务、金融、医疗领域强制使用国密,且需要商密证书。
  2. 再选算法组合:如果只需加密通道,SM4+SM3 就够;如果需要数字签名,必须上 SM2。
  3. 留意版本:SM2 算法有 2012 版和 2018 版(修订了曲线参数),老版本 SDK 可能不兼容。
  4. 测试环境:用国家密码管理局的随机性检测工具测 SM3,我之前用过,卡了好几天才发现是因为未对齐内存。
避坑提醒:我曾经在对接时发现,某厂商的 SM2 签名接口返回值顺序不同(r, s 与 s, r 互换)。标准规定是 (r, s),但有些实现调用了 OpenSSL 的 ECDSA 封装后忘记调整。一定要用官方参考实现对比验证。

最后说一句,国密算法并不神秘。它和国际算法都是数学,只是参数和长度不同。接入手册也就那么几十页,别怕。