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 本章知识体系总览

为了帮你快速建立全局认知,我画了一张图,把国密算法的整体结构和它们之间的关系梳理了出来。你可以把它当成一张“导航地图”,后续每一章都会落到图里的某个具体节点上。

国密算法知识体系总览 国密算法体系 (SM系列) SM2 公钥密码 SM3 密码杂凑 SM4 对称加密 数字签名 密钥协商 完整性校验 消息摘要 数据加密 数据解密 数据传输加密 身份认证与签章 政策驱动:密码法 + 等保2.0 + 商密认证 ⚠ 算法组 = 基础设施 ⚠ 认证是门票

从图上你可以清楚地看到:SM2、SM3、SM4 组成技术底座,各自承担不同的密码职能;它们之上是传输加密和身份认证等具体场景;最下面一层是政策合规,驱动了整个体系的上线。

你想想看,以后的接口改造无非就是在这张图上找到对应的模块,然后进行代码层面的替换和集成。嗯,后面几章我们会逐一深入,把每个模块的实现拆开来看。准备好了吗?我们直接进第二章,从 SM2 密钥生成开始练手。