国密算法入门:SM2/SM3/SM4/SM9/ZUC 是什么、谁在用、怎么落地
国密是什么
国密算法 = 中国国家密码管理局发布的商用密码(SM = 商密)算法标准集。它不是一套新密码学理论——算法原理与国际算法同源(椭圆曲线、杂凑、分组密码),而是由中国主导设计的标准实现,用于密码自主可控与合规场景。
日常说的「上国密」,多半是指 SM2 + SM3 + SM4 三件套;SM9、ZUC 出现在标识密码与移动通信等专用栈里。标准号怎么读(GM/T、GB/T、ISO、RFC)见姊妹篇《国密标准号速查》。
五个算法各自管什么
| 算法 | 类型 | 国际对应 | 一句话用途 |
|---|---|---|---|
| SM2 | 椭圆曲线公钥 | RSA / ECDSA | 签名、密钥交换、公钥加密 |
| SM3 | 密码杂凑 | SHA-256 | 摘要、完整性校验 |
| SM4 | 分组密码 | AES-128 | 数据加密(对称) |
| SM9 | 标识密码 | IBE | 用身份(邮箱/手机号)直接做公钥 |
| ZUC(祖冲之) | 序列密码 | Snow 3G / AES-CTR | 4G/5G 通信流加密 |
开发者日常打交道的主要是前三个。把 SM3 当「加密」、用 SM2 加密大报文,是选型阶段最常见的两类走偏——下文决策树会卡住这两类错误。
与国际算法的对应关系
签名/加密层: RSA, ECDSA ←→ SM2(256 位椭圆曲线)
摘要层: SHA-256 ←→ SM3(256 位输出)
对称加密层: AES-128 ←→ SM4(128 位分组/密钥)
组合套件: TLS-RSA/AES ←→ TLCP 或 RFC 8998 ShangMi 套件
安全强度等价换算(心里有数即可):
- SM2 256 位 ≈ RSA 3072 位
- SM3 ≈ SHA-256
- SM4 ≈ AES-128
「等价」指量级可比,不表示可以互相替代:合规名单写 SM3 时,SHA-256 再强也对不上验收。
选型决策树:先角色,再算法
按业务问题选角色,再落到算法——不要先挑「听过名字的那个」:
- 要可逆保密(加密后还能解密)
- 大量/流式数据 → SM4(对称)
- 短密钥、短令牌、信封加密的「外层」→ SM2 公钥加密(明文不宜很长)
- 只要完整性 / 防篡改指纹 → SM3(无密钥、不可逆;不是加密)
- 要身份绑定的不可否认 → SM2 签名(摘要通常由 SM3 参与构造)
- 传输层整条链路国密化 → 协议层(TLCP 或 ShangMi TLS),不是在业务 JSON 里各调一次算法就完事——见《国密 HTTPS / TLCP 部署》
一个典型国密接口在一次请求里常常三件套并用:SM4 加密报文体 → SM3 做摘要 → SM2 签摘要。联调细节与排查顺序见《SM2/SM3/SM4 实战》。
谁在用国密
- 政务:电子签章、电子证照、政务云(GB/T 38540 等一串国标围着国密转)
- 金融:银行核心系统改造、银联标准、数字货币相关
- 等保 2.0:三级及以上系统被要求使用商用密码(这是最普遍的驱动力)
- 央企/关键基础设施:能源、交通、水利的信息化
- 密评:《商用密码应用安全性评估》过评要求算法合规
互联网 ToC 业务一般无硬性国密名单;驱动力来自合同、行业监管或等保/密评条款。
两条协议线:TLCP 与 RFC 8998
很多人把「国密 HTTPS」当成一个东西,实际是两条并行路径:
| 路径 | 文档锚点 | 常见语境 | 和本站工具的关系 |
|---|---|---|---|
| TLCP | GB/T 38636 等 | 密评/等保现场主流 | 浏览器工具不做握手;需 Tongsuo/GmSSL + 双证书 |
| ShangMi TLS 1.3 | RFC 8998 | 国际互通、部分网关宣传「国密 SSL」 | 记录层常用 SM4-GCM/CCM;本站 SM4 工具验证的是 ECB/CBC,不是 GCM |
算法层(SM2/SM3/SM4 原语)与协议层(握手、证书、套件协商)要分开验收:原语向量对了,不代表 TLCP 已通。部署步骤见国密 TLS 指南;标准号对照见标准号速查。
开发者怎么落地:分层视角
应用层(Java/Go/Node/前端)
- Java:BouncyCastle(
SM2/SM3/SM4在org.bouncycastle.crypto.engines)或 hutool 的 SmUtil - 前端/Node:sm-crypto(纯 JS,加解密/签名)
- Go:
github.com/tjfoc/gmssl、github.com/emmansun/gmsm
协议层(HTTPS 国密化)
标准 OpenSSL 主线不支持国密 TLS。可选:
- Tongsuo(铜锁,原 BabaSSL):蚂蚁开源,兼容 OpenSSL 语法,支持国密相关能力与双证书思路
- GmSSL:北大开源,国密 TLS(TLCP 协议线)
- 双证书 / 双栈过渡:SM2 证书与 RSA/国际栈并行,按客户端能力协商——过渡期常见做法
硬件层
生产密钥管理要求「通过国密局认证的密码产品」:PCI-E 密码卡、UKey、云密码机(云厂商的 KMS 国密版)。应用层 JS/软件实现适合开发联调,生产签名私钥不应离开密码硬件——这是密评的硬要求。
系统级选型矩阵(合规优先,性能其次)
- SM2 vs RSA/ECDSA:同类非对称替换。SM2 密钥更短,强度量级接近 P-256 / RSA-3072 区间;有没有国密名单,决定能不能继续用 RSA。
- SM3 vs SHA-256:摘要「同构不同标准」。无合规压力时跟对接方约定即可;有名单则只能 SM3。对照见《SM3 和 SHA-256》。
- SM4 vs AES:同为 128 位分组密码。库对 SM4 的 GCM 支持与硬件加速(AES-NI 普及、SM4 指令偏国产芯片)历史上常落后于 AES——大规模吞吐场景常见「边界 SM2/SM3 合规、内部 AES」的混合架构,是否允许取决于测评口径与合同,而不是个人偏好。
选型顺序建议:监管/合同名单 → 对端已实现的算法与模式 → 再谈性能。反过来容易做完才发现「算法对了、模式/证书栈错了」。
密钥管理:密评真正卡分的地方
算法写进文档只是入场券;现场发现常集中在密钥:
- 源码或配置里硬编码密钥
- 权限过宽的共享磁盘密钥文件
- 上线后从不轮换
- 在普通业务机上生成「满足密评」的签名私钥(缺少认证产品)
整改阶梯通常是:环境注入密钥(天级)→ 集中密钥管理(周级)→ 认证密码硬件生成与保管(密评高要求场景)。浏览器里生成的测试密钥只证明流程,不证明合规。
用在线工具理解算法行为——以及诚实边界
读十遍文档不如跑一次加解密。本站国密工具在浏览器本地计算,输入不上传,定位是学习、向量核对、联调对照:
- SM2 加解密与签名:密钥对 → 加密 → 解密 → 签名 → 验签;密文结构为 C1C3C2(GB/T 32918.4 推荐顺序)。老系统若是 C1C2C3,两边不互通——先对齐格式再骂算法。
- SM3 哈希计算器:标准向量
SM3("abc") = 66c7f0f4...;摘要对不上时优先查 UTF-8/GBK 与不可见字符。 - SM4 加解密:支持 ECB/CBC + PKCS#7。适合验证密钥/模式/编码;不覆盖 RFC 8998 的 SM4-GCM/CCM,也不能代替 TLCP 握手调试。
三件套联调流程与密文对不上时的排查顺序,见实战指南。
新手最常问的三个问题
Q:国密算法安全吗?还是「弱化的国产算法」?
SM2/SM3/SM4 设计经过公开国际评审(SM4 曾在 IETF RFC 8998 相关语境中作为 ShangMi 套件的组成部分被引用),公开文献中未见可实用的结构性击破。「国密=弱密码」是误解;真正的风险更常出在密钥管理、模式误用(如生产长期 ECB)和协议栈配错。
Q:我司系统必须上国密吗?
看两个信号:等保级别(三级以上基本跑不掉)+ 行业监管(政务/金融/央企)。互联网 ToC 业务一般无硬性要求。
Q:改造工作量多大?
分三档:只换算法层(代码里 RSA→SM2 调用替换)约人天级;协议层国密 TLS(Tongsuo + 国密证书)约人周级;完整密评合规(密码硬件 + 管理制度)是人月级工程。
排查清单
- 分清三件套定位:SM2 签名/短密文加密 / SM3 摘要 / SM4 对称加密
- 合规判断:等保三级 + 政务/金融 → 算法名单通常点名国密
- 分清算法层与协议层:原语向量对 ≠ TLCP/ShangMi 已通
- 联调先用在线工具固定测试向量,再查编码、密文顺序、模式与 IV
- 生产私钥进认证密码产品;软件实现只做开发验证
- 文档引用优先 GB/T 号;旧 GM/T 号与 GB/T 多半是同一算法的不同年代版本
排查注记
决策树按「先角色、再算法」设计,文内明说是为了卡住两类最常见的走偏——把 SM3 当「加密」、用 SM2 加密大报文。安全强度等价表特意补了一句「不表示可以互相替代」:合规名单写 SM3 时,SHA-256 再强也对不上验收,所以选型顺序定为名单 → 对端实现 → 性能。协议一节把 TLCP 和 RFC 8998 拆成两条线,并反复强调算法层与协议层分开验收——原语向量对了不代表 TLCP 已通;密钥管理一节开头就点破:算法写进文档只是入场券,密评现场发现常集中在密钥。
来自 ToolVault 工具匣 的开发手记。相关工具:SM2 加解密与签名、SM3 哈希、SM4 加解密。相关阅读:国密标准号速查、国密 HTTPS / TLCP、SM2/SM3/SM4 实战、SM2 和 RSA 怎么选、SM3 和 SHA-256 的区别。访问 首页 查看更多开发者工具。
相关工具
相关文章
VIN 码校验位详解:第 9 位怎么算,车架号真假一测便知
VIN 车架号 17 位的结构与校验算法详解:WMI/VDS/VIS 拆解、第 9 位校验位的转写表与权重表手算示例、第 10 位年份码 30 年循环、常见校验失败原因,附在线 VIN 校验工具。
测试数据合规使用边界:为什么测试环境用真实用户数据本身就是违法
开发测试环境引用真实用户数据违反《个人信息保护法》:PIPL 明确目的限制原则,测试属于全新处理目的。合法替代数据四来源(脱敏/合成/公开测试段/自造)、「格式合法但随机」的技术原理(国标校验位),以及红线清单。附身份证/手机号/信用代码的校验位算法表。
个保法 PIA 影响评估自查:五类触发场景、评估三要素与实操框架
《个人信息保护法》第 55-56 条的个人信息保护影响评估(PIA):哪五类处理活动必须事前评估、评估报告的三要素结构、报告留存三年的要求,以及数据地图→风险矩阵→措施核对的自查框架。附与等保/密评的三位一体关系。