第1章 国密算法概述:SM2/SM3/SM4/SM9 算法家族及应用场景

说实话,搞国密这些年,最常被问的问题就是:「SM2、SM3、SM4、SM9 到底啥关系?用的时候怎么搭?」 很多人一上来就把这些算法当「零件」看,觉得能用就行。但我个人习惯是——先搭架子,再填零件。所以这一章,我们先把这个「架子」看清楚。

1.1 国密算法核心成员

国密算法家族目前公开的主力算法其实就四位:SM2、SM3、SM4、SM9。每个算法各自有擅长的领域,有点像厨房里的刀、案板、锅、灶——各有各的活儿。

算法 类型 核心能力 对标国际
SM2 公钥密码(椭圆曲线) 数字签名、密钥交换、加密 ECDSA / ECDH
SM3 密码哈希 数据完整性、消息摘要 SHA-256
SM4 对称分组密码 数据加密、解密 AES
SM9 标识密码(基于双线性对) 数字签名、密钥封装、加密 IBC(Identity-Based Cryptography)
个人经验: 我曾在项目中看到有人用 SM4 给证书私钥加密,但密钥管理本身却用了明文存——这就像锁了保险柜,钥匙却挂在门外。算法选对只是第一步,密钥边界设计才是真正的大坑。

1.2 算法家族总览图

先别急细节,我们看一张整体关系图,把四个算法及其典型应用场景串起来。这是我经常在方案里画的一张图,能帮团队快速对齐上下文。

国密算法家族总览 国密算法家族核心关系与典型应用场景 SM2 公钥密码 SM3 密码哈希 SM4 对称密码 SM9 标识密码 公钥基础设施(PKI / IBC) | 对称加密 | 哈希摘要 数字签名 数据加密 密钥协商 身份认证 SSL/TLS 国密套件 | 电子签章 | 区块链 | 物联网安全 使用说明 SM2 和 SM9 都支持数字签名,但 SM9 基于用户标识(如邮箱、手机号),无需数字证书。 SM3 常作为 SM2 签名的哈希预处理;SM4 用于大数据量对称加密。 虚线表示 SM3 辅助作用,实线表示直接能力映射。

说白了,这张图就是告诉你:SM2 和 SM9 解决「谁是谁」的问题(身份与签名),SM3 解决「改没改」的问题(完整性),SM4 解决「怎么藏」的问题(机密性)。 后面的课程会反复回到这张图来对齐边界。

1.3 应用场景归纳

每个算法都不是孤立存在的,实际工程中经常组合出现。我根据自己踩过的坑,列几个典型场景:

  • 电子签章 / 合同: SM2 签名 + SM3 摘要。注意!签名前一定要用 SM3 算哈希,否则大数据签名性能会崩。我曾经见过有人直接把整个合同原文用 SM2 签名——结果跑了一分钟还没出来。
  • SSL/TLS 国密套件: 握手阶段用 SM2 交换密钥,然后用 SM4 加密封装会话。SM3 则用于握手消息的完整性校验。
  • 标识密码场景(无证书环境): SM9 可以直接用用户手机号或域名做公钥,适合 IoT、邮件加密等不需要 PKI 的场景。但注意——SM9 的密钥托管是个双刃剑,小心设计分发策略。
  • 区块链: 哈希用 SM3,账户签名用 SM2,交易数据加密用 SM4。简单直接。
核心观点: 密钥边界兼容性设计的本质,就是搞清楚「哪个算法该管哪一段密钥」。例如 SM2 私钥只能在签名客户端使用,SM3 不需要密钥,SM4 的密钥必须由 SM2 或 SM9 协商分发——这个逻辑链条不能乱。

1.4 避坑指南

嗯,这里我要多说几句。我曾经在某个政务项目中,发现团队把 SM4 密钥直接用 SM3 哈希后当作会话密钥——这其实是不安全的,因为 SM3 是单向摘要,不是密钥派生函数(KDF)。

警告: SM3 不能替代密钥派生算法(如 KDF2)。如果你需要从共享密钥中派生多个会话密钥,请使用标准密钥派生函数,不要直接用 SM3 裸算。否则密钥之间可能产生关联性,被侧信道攻击利用。

还有一点:SM9 的私钥由密钥生成中心(KGC)生成,这在某些合规场景下可能涉及「密钥托管」问题。如果客户要求私钥完全由自己控制,那 SM2 才是正确选择。

1.5 一句话总结本章

国密算法家族四个成员:SM2 公钥、SM3 哈希、SM4 对称、SM9 标识。每个都有自己最擅长的位置,组合使用时,先画关系图,再定谁的密钥归谁管。你想想看,密钥边界不清,后期改起来有多痛苦?还是早规划早安心。