第1章 国密算法概述:SM2/SM3/SM4/SM9 算法原理、应用场景与合规要求
各位同学,咱们这门课叫《国密算法证书配置与接口适配技巧实战》。开篇第一章,我不打算上来就扔一堆枯燥的数学公式。咱们先聊聊国密到底是什么,以及为什么你现在必须得重视它。
说白了,国密就是国家密码管理局制定的一套商用密码算法标准。包括 SM2、SM3、SM4、SM9 这几个核心成员。我最早接触国密是在 2018 年,当时一个金融客户要求所有新上线的交易系统必须支持国密 TLS。说实话,那时候文档少,坑多,踩了不少雷。今天我把这些经验梳理出来,帮你少走弯路。
核心认知:国密不是替代国际算法,而是提供一套自主可控的密码体系。在等保 2.0、密评、关键信息基础设施保护等合规场景下,它是必选项,不是可选项。
1.1 国密算法家族全景
先看一张总览图,把四个算法的定位搞清楚。
这张图你应该存下来。四个算法各司其职:SM2 管公钥体系,SM3 管哈希校验,SM4 管对称加密,SM9 管标识密码。我习惯把它们类比成国际算法中的 ECC、SHA-256、AES 和 IBE,但细节差异很大,千万别直接套用。
1.2 SM2:椭圆曲线公钥密码算法
SM2 是国密体系里的核心公钥算法。它基于椭圆曲线密码学,密钥长度 256 位,安全强度相当于 RSA-3072。为什么选 256 位?因为椭圆曲线在同等安全强度下,密钥比 RSA 短得多,计算效率也更高。
SM2 包含三个子功能:
- 数字签名:用于身份认证和抗抵赖。我在项目中遇到过客户把 SM2 签名结果直接当 RSA 签名去验,结果验不过——因为 SM2 签名输出是 DER 编码的 (r, s) 对,不是单纯的字节拼接。
- 公钥加密:用于密钥分发和数据加密。注意 SM2 加密输出比原始数据长 96 字节(C1C3C2 结构),设计缓冲区时一定要留够空间。
- 密钥协商:用于双方安全地协商出会话密钥。SM2 密钥协商协议比 ECDH 多了一步身份确认,安全性更高。
实战经验:SM2 签名验签的性能大约是 RSA-2048 的 2-3 倍,但密钥生成速度远快于 RSA。如果你在做高并发签名服务,优先考虑 SM2。
1.3 SM3:密码杂凑算法
SM3 是国密标准的哈希算法,输出 256 位摘要。它的设计思路和 SHA-256 类似,但内部结构做了优化。我做过对比测试:SM3 的软件实现速度比 SHA-256 慢约 10%-15%,但硬件实现差距很小。
SM3 的主要应用场景:
- 数字签名中的消息摘要(配合 SM2)
- 完整性校验(文件校验、固件校验)
- 密码存储(替代 MD5/SHA-1)
- 随机数生成(作为熵源的一部分)
避坑指南:我曾经在项目中遇到一个坑——SM3 的初始向量 IV 和 SHA-256 不同,有人直接拿 SHA-256 的 IV 去初始化 SM3 上下文,结果摘要全错。记住:SM3 的 IV 是 0x7380166F 开头的那一串,别搞混。
1.4 SM4:分组对称密码算法
SM4 是国密标准的对称加密算法,分组长度 128 位,密钥长度 128 位。它采用 32 轮非线性迭代结构,和国际上的 AES 对标。但 SM4 的 S 盒设计、密钥扩展算法都和 AES 不同,不能互换。
SM4 支持的工作模式:
| 模式 | 说明 | 典型场景 |
|---|---|---|
| ECB | 电子密码本模式,每个分组独立加密 | 不建议使用,安全性差 |
| CBC | 密文分组链接模式,需要 IV | 文件加密、数据库加密 |
| CTR | 计数器模式,可并行计算 | 网络通信加密、流媒体 |
| GCM | 伽罗瓦计数器模式,带认证 | TLS 加密、API 加密(推荐) |
我个人强烈建议:新系统优先使用 SM4-GCM 模式。它同时提供加密和完整性校验,能有效防止密文篡改攻击。我在一个物联网项目中用过 SM4-CBC,结果被重放攻击搞得很狼狈,换成 GCM 后问题解决。
1.5 SM9:标识密码算法
SM9 是国密体系里最年轻、也最有特色的算法。它基于双线性对(Weil 对 / Tate 对),允许直接用用户的标识(如邮箱、手机号、身份证号)作为公钥。这意味着不需要数字证书和 PKI 体系,密钥管理成本大幅降低。
SM9 的核心优势:
- 无需证书:公钥就是标识,省去证书签发、验证、吊销的麻烦
- 密钥托管:私钥由密钥生成中心(KGC)生成,适合企业内部场景
- 加密模式灵活:支持一对一加密、一对多加密(广播加密)
注意:SM9 的密钥托管特性既是优点也是风险。KGC 掌握所有用户的私钥,一旦 KGC 被攻破,整个系统的安全性归零。所以 SM9 更适合受控的企业内网,不适合公开互联网环境。
1.6 合规要求与落地现状
国密算法的合规要求主要来自以下几个法规和标准:
- 《密码法》(2020 年实施):明确要求关键信息基础设施必须使用国密算法
- 等保 2.0:三级及以上系统,密码模块需达到 GM/T 0028 标准
- 密评(商用密码应用安全性评估):每年必须评估,不合格要整改
- 金融、政务、医疗等行业规范:各自有细化要求
目前国密改造的推进速度很快。我接触过的银行、证券、政务云项目,基本都在 2023 年前完成了核心系统的国密改造。但坦白说,很多改造只是「表面合规」——证书换成国密证书,底层算法还是国际算法。这种「换皮不改芯」的做法,在密评中很容易被查出。
我的建议:做国密改造,不要只盯着证书配置。要从算法层、协议层、应用层三层同时推进。算法层选对 SM2/SM3/SM4/SM9,协议层适配国密 TLS(GB/T 38636),应用层改造签名验签、加密解密接口。三层都到位了,密评才能过。
1.7 本章小结
这一章我们梳理了国密算法的全貌。SM2 管公钥、SM3 管哈希、SM4 管对称加密、SM9 管标识密码。每个算法都有自己的定位和最佳实践场景。记住:国密不是简单的「替换」,而是一套需要重新设计的密码体系。
下一章开始,我们会深入具体的证书配置和接口适配技巧。但在此之前,我建议你把本章的算法对比表存下来,做项目时随时对照。
| 算法 | 类型 | 密钥长度 | 对标国际算法 | 主要用途 |
|---|---|---|---|---|
| SM2 | 公钥密码 | 256 位 | ECC / RSA | 签名、加密、密钥协商 |
| SM3 | 哈希算法 | 256 位摘要 | SHA-256 | 完整性校验、消息摘要 |
| SM4 | 对称密码 | 128 位 | AES-128 | 数据加密、通信加密 |
| SM9 | 标识密码 | 256 位 | IBE | 无证书加密、签名 |
嗯,第一章就到这里。内容不算多,但都是基础中的基础。后面的章节我们会一步步深入,从证书生成、TLS 配置、API 适配到性能优化,把国密改造的每个环节都讲透。