1. 国密算法概述:从趋势到实战,你得先看懂这张图
做接口开发这些年,我见过太多团队在密码算法上踩坑。有的人直接用国际算法,完全不考虑合规;有的人想用国密,但搞不清 SM2、SM3、SM4 到底该怎么选。说实话,我以前也迷糊过。
2019 年有个项目,客户要求接口必须走国密。我当时第一反应是:“喏,把 AES 换成 SM4 不就行了?”结果审核没通过,因为数字签名用的还是 RSA。嗯,国密不是这么玩的——它是一个完整的体系,牵一发动全身。这一章,我们先把国密算法这个摊子铺开看,搞清楚它到底是什么,为什么非用不可。
1.1 国密算法体系全景
国密,全称是国家商用密码算法。它不是一个算法,而是一套标准。就像你打开工具箱,里头有钳子、扳手、螺丝刀——每种工具干每种活。
我个人习惯把国密体系拆成四大块:对称密码、公钥密码、哈希算法、随机数生成。你想想看,任何安全通信都离不开这四类。下面这张表可以帮你快速建立概念。
| 算法分类 | 国密标准 | 国际对应算法 | 核心用途 |
|---|---|---|---|
| 对称密码 | SM4 | AES | 数据加密 / 解密 |
| 公钥密码 | SM2 | RSA / ECDSA | 密钥交换 / 数字签名 |
| 哈希算法 | SM3 | SHA-256 | 完整性校验 / 摘要 |
| 随机数生成 | SM3(派生) | HMAC_DRBG | 密钥派生 / 盐值生成 |
我的经验:你在接口联调中遇到最多的,应该是 SM4 和 SM3。SM2 做签名和密钥交换,实际调用频率没那么高,但一旦用错,整个握手就废了。
1.2 核心算法速览:SM2、SM3、SM4
这三个是你今后最常看到的。我们简单过一遍,后面每章都会有实战细节。
SM2 是椭圆曲线公钥密码算法。说白了,它负责两件事:一、帮你安全地交换密钥;二、为数据签名,防止被人篡改。我记得有次做接口优化,对方要求一次握手就完成双向认证,SM2 的密钥协商协议正好派上用场——比传统 RSA 少了两轮交互。
SM3 是密码杂凑算法,输出 256 位的摘要值。你可以把它理解成数据的“指纹”。在接口签名场景中,我最常用 SM3 来防止参数被串改。举个简单示例:
// Java 示例:使用 SM3 计算摘要
import org.bouncycastle.crypto.digests.SM3Digest;
public byte[] sm3Digest(byte[] input) {
SM3Digest digest = new SM3Digest();
digest.update(input, 0, input.length);
byte[] result = new byte[digest.getDigestSize()];
digest.doFinal(result, 0);
return result;
}
这段代码很短,但几乎每个国密接口都会用到类似的逻辑。你想想看,参数签名、防重放、数据校验——SM3 是绕不开的基础设施。
SM4 是对称分组密码算法。为什么叫对称?因为加密和解密用的是同一个密钥。SM4 的密钥长度是 128 位,分组也是 128 位。你在接口中传输敏感数据(比如身份证、手机号)时,大概率会用 SM4 加密后再传。
注意:SM4 有 ECB、CBC、CTR 等多种模式。我曾经看过有人在生产环境直接用 ECB 模式加密一条短信验证码,结果相同明文每次都得到相同密文,被攻击者猜出了规律。CBC 或 GCM 模式相对安全,务必按场景选择。
1.3 应用场景:你在哪里会遇到国密?
这个问题,我建议你从三个层次来理解:
- 数据传输层:用 SM2 做握手、SM4 做加密、SM3 做校验。典型场景是 HTTPS 的国密改造,也叫国密 TLS。嗯,这也是我们这课程后面要重点练的。
- 数据存储层:数据库敏感字段加密。比如用户密码先用 SM3 哈希后存储,内部日志用 SM4 加密归档。
- 身份认证层:数字证书、电子签章、人脸比对时的数据传输。政务、金融、公安系统现在基本都要求走国密链路。
为什么会有这么多场景?说白了,政策在推。2019 年《密码法》实施以后,关键信息基础设施必须使用国密算法。如果你做的系统涉及政府、银行、社保、电力、医疗这些行业,绕不开国密接口。
1.4 政策背景与合规要求
这里我需要讲清楚一个概念:合规 = 必须使用国密算法模块。不是说你写代码时调一下 SM4 加密就完事了。你调用的底层密码库,必须是经过国家密码管理局认证的(简称“商密认证”)。
我遇到过不少团队,直接用开源的 Bouncy Castle 把国密算法跑通了,结果合规审核被打回。为什么?因为 Bouncy Castle 没有商密认证。正规做法是采购硬件密码模块(HSM),或者调用经过认证的软件密码中间件。
| 知识点 | 具体内容 | 影响范围 |
|---|---|---|
| 《密码法》 | 2019 年 10 月通过,2020 年 1 月起实施 | 所有商用密码应用 |
| GM/T 系列标准 | 国密算法技术规范(如 GM/T 0003-2012) | SM2 签名、SM3 杂凑、SM4 加密 |
| 等保 2.0 | 等级保护制度中明确要求密码合规 | 政务、金融、社保、医疗 |
| 商密认证 | 密码模块必须取得《商用密码产品认证证书》 | 硬件 HSM 或软件密码中间件 |
一句话总结:国密接口开发,不仅仅是技术的切换,更是合规的落地。SM2、SM3、SM4 是工具箱,政策是说明书,认证是门票。三者缺一不可。
1.5 本章知识体系总览
为了帮你快速建立全局认知,我画了一张图,把国密算法的整体结构和它们之间的关系梳理了出来。你可以把它当成一张“导航地图”,后续每一章都会落到图里的某个具体节点上。
从图上你可以清楚地看到:SM2、SM3、SM4 组成技术底座,各自承担不同的密码职能;它们之上是传输加密和身份认证等具体场景;最下面一层是政策合规,驱动了整个体系的上线。
你想想看,以后的接口改造无非就是在这张图上找到对应的模块,然后进行代码层面的替换和集成。嗯,后面几章我们会逐一深入,把每个模块的实现拆开来看。准备好了吗?我们直接进第二章,从 SM2 密钥生成开始练手。