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 图帮你把整个国密家族串起来:
核心思路:不要只记算法名,要建立“标准 → 算法 → 协议 → 产品”的链路。我当年踩的坑就是只调了 SM3 接口,忘了检查底层是否通过商密认证,结果测评没通过。
1.5 实战中的标准选择思路
我建议你按以下步骤决定用哪套国密方案:
- 先看合规要求:政务、金融、医疗领域强制使用国密,且需要商密证书。
- 再选算法组合:如果只需加密通道,SM4+SM3 就够;如果需要数字签名,必须上 SM2。
- 留意版本:SM2 算法有 2012 版和 2018 版(修订了曲线参数),老版本 SDK 可能不兼容。
- 测试环境:用国家密码管理局的随机性检测工具测 SM3,我之前用过,卡了好几天才发现是因为未对齐内存。
避坑提醒:我曾经在对接时发现,某厂商的 SM2 签名接口返回值顺序不同(r, s 与 s, r 互换)。标准规定是 (r, s),但有些实现调用了 OpenSSL 的 ECDSA 封装后忘记调整。一定要用官方参考实现对比验证。
最后说一句,国密算法并不神秘。它和国际算法都是数学,只是参数和长度不同。接入手册也就那么几十页,别怕。