一、国密算法概述:从实战角度理解国产密码体系
各位同学好,我是你们这门课的老周。今天咱们正式开篇,聊聊国密算法。
说实话,我在信息安全这行摸爬滚打了十几年,早年做项目时,客户一开口就是 RSA、AES、SHA-256,国密?那会儿真没人提。但最近五六年,风向完全变了——等保 2.0 一推,密评一上,国密成了硬门槛。我去年帮一家银行做身份认证改造,光 SM2 证书替换 RSA 证书这一项,就折腾了两个月。嗯,这里面的坑,后面我会慢慢讲。
这一章,我们先搭好地基。搞清楚国密是什么、跟国际算法比差在哪、以及为什么你现在必须学它。
1.1 国密算法体系:SM2 / SM3 / SM4 三剑客
国密算法,全称是中国商用密码算法标准。由国家密码管理局发布,目前最核心的就是三个:SM2、SM3、SM4。我习惯把它们叫做「国密三件套」。
- SM2 —— 非对称加密 + 数字签名。对标 RSA 和 ECDSA。基于椭圆曲线密码学(ECC),但曲线参数是国产自研的。
- SM3 —— 密码杂凑算法。对标 SHA-256。输出 256 位摘要,用于完整性校验和数字签名。
- SM4 —— 对称分组加密算法。对标 AES。密钥长度 128 位,分组长度 128 位,用于数据加密。
你可能会问:为什么要有三个?其实很简单——一个完整的密码应用场景,通常需要这三类算法配合。比如你做身份认证:SM2 用来签名和密钥协商,SM3 用来做摘要防篡改,SM4 用来加密传输的会话数据。缺一个都不行。
核心记忆点:SM2 管「你是谁」和「密钥怎么换」,SM3 管「数据有没有被改」,SM4 管「数据怎么藏起来」。三者各司其职,缺一不可。
1.2 国密 vs 国际算法:一张表看懂差异
很多同学刚接触国密时,总喜欢拿它跟 RSA、AES 硬比。我的建议是:别纠结谁更强,要关注「场景适配」。下面这张表是我自己整理的,你在别处不一定能看到这么细。
| 对比维度 | SM2 | RSA (2048位) | SM3 | SHA-256 | SM4 | AES-128 |
|---|---|---|---|---|---|---|
| 算法类型 | 椭圆曲线非对称 | 大整数分解非对称 | 杂凑 | 杂凑 | 分组对称 | 分组对称 |
| 密钥长度 | 256 位 | 2048 位 | — | — | 128 位 | 128 位 |
| 签名速度 | 快(ECC 优势) | 慢 | — | — | — | — |
| 安全强度 | ≈ RSA 3072 | 中等 | 256 位抗碰撞 | 256 位抗碰撞 | 128 位安全 | 128 位安全 |
| 合规要求 | 国密必选 | 密评不通过 | 国密必选 | 密评不通过 | 国密必选 | 密评不通过 |
| 典型场景 | 数字签名、密钥交换 | 旧系统兼容 | 完整性校验 | 国际通用 | 数据加密 | 国际通用 |
我的经验:SM2 在同等安全强度下,密钥比 RSA 短得多,计算量也更小。我在物联网项目里用 SM2 做设备身份认证,比 RSA 快将近 3 倍。但要注意,SM2 的曲线参数是国密标准规定的,不能自己随便改,否则验签会失败。
1.3 国密算法的应用场景:不只是「合规」两个字
很多人觉得上国密就是为了过密评、应付检查。说实话,早期确实有这种风气。但这两年不一样了——国密在性能、安全性上已经能打,而且有些场景比国际算法更合适。
我举几个真实场景:
- 政务系统身份认证:比如「互联网+政务服务」平台,用户登录必须用 SM2 证书做双向认证。我去年参与的一个省级政务项目,所有 API 网关的 TLS 握手都换成了国密套件。
- 金融交易签名:银行的核心交易系统,转账指令必须用 SM2 签名,SM3 做摘要。我记得有一次,某银行因为用了 RSA 签名被密评打了「高风险」,连夜改代码。
- 物联网设备身份:智能电表、车联网终端,资源受限,SM2 的短密钥和低计算量优势非常明显。我在一个智慧水务项目里,用 SM2 给每个水表做了唯一身份证书。
- 数据存储加密:数据库敏感字段加密,比如身份证号、手机号,用 SM4 做列级加密。SM4 的加解密速度跟 AES 几乎一样,但合规上更安全。
避坑指南:我曾经在一个项目中,直接用 OpenSSL 的 SM2 实现做签名,结果验签时发现跟国密硬件加密机对不上。后来排查了半天,才发现是 SM2 的签名编码格式问题——国标要求的是 DER 编码,而 OpenSSL 默认输出的是原始 R||S 拼接。这种细节,文档里不会写,踩过坑才知道。
1.4 合规要求:密评到底在查什么?
说到合规,就绕不开「密评」——商用密码应用安全性评估。这是国密落地的硬约束。我见过太多项目,技术方案写得天花乱坠,一到密评就被打回来。核心原因就三个:
- 算法不对:该用 SM2 的地方用了 RSA,该用 SM4 的地方用了 AES。直接扣分。
- 密钥管理混乱:SM4 密钥硬编码在代码里,或者 SM2 私钥明文存储。这在密评里属于「严重风险」。
- 证书链不完整:SM2 证书没有跟国密 CA 对接,自签名证书不被认可。
目前,等保三级及以上的系统,基本都要求通过密评。金融、政务、能源、交通这些行业,更是「一票否决」——密评不过,系统不能上线。
一句话总结:国密不是选择题,而是必答题。你可以不喜欢它,但你不能绕过它。
1.5 国密算法体系全景图
下面这张 SVG 图,是我自己画的国密算法体系结构。你可以把它当作这一章的「知识地图」。后面每一章,都会在这张图上展开。
1.6 本章小结:你该带走什么?
这一章的内容,说白了就是三件事:
- 国密三件套:SM2 签名换密钥、SM3 防篡改、SM4 藏数据。记住这个口诀,后面写代码时你会感谢我。
- 跟国际算法的差异:不是谁替代谁,而是场景不同。国密在合规上是必选,在性能上也不输。
- 合规不是终点:密评只是门槛,真正的价值在于用国密构建更安全的系统。我见过太多「为了合规而合规」的项目,最后反而因为密钥管理混乱出了安全事件。