第3章 国密算法概览:SM2、SM3、SM4 原理与场景
做国密改造这么多年,我遇到最多的问题就是——这三种算法到底该用在哪?有人把 SM4 当哈希用,有人拿 SM2 去加密大文件,结果性能惨不忍睹。其实它们分工非常明确,就像工具箱里的三把扳手,各管各的活。
这一章我带大家走一遍核心原理,顺便聊聊我在实际对接中踩过的坑。你想想看,搞懂了底层逻辑,后面 KMS 对接才不至于抓瞎。
SM2:椭圆曲线公钥密码
SM2 是国内标准 GB/T 32918 定义的椭圆曲线公钥算法。说白了,它替代 RSA 用的。一条椭圆曲线上的点构成一个群,点加法运算的两倍用于密钥交换和数字签名。它的核心优势是 密钥更短、性能更好——256 位 SM2 相当于 3072 位 RSA 的安全强度。
典型场景:数字签名(比如 PDF 签章)、密钥协商(TLS 握手)、小数据加密(报文摘要的加密)。
我个人习惯把 SM2 看作“签名工具箱”。有一次给政务系统做 KMS 对接,对方要求用 SM2 做身份认证,结果发现他们只导入了公钥,没把私钥安全放硬件加密机里。嗯,这里要注意——SM2 的私钥必须隔离存储,否则签名就等于裸奔。
SM2 签名流程(简写版)
- 生成随机数 k,计算椭圆曲线点 (x1, y1) = k * G。
- 计算 r = (e + x1) mod n,若 r=0 或 r+k=n 则重试。
- 计算 s = ((1 + dA)^-1 * (k - r * dA)) mod n。
- 输出签名 (r, s)。
SM3:密码杂凑函数
SM3 对应国际的 SHA-256。它把任意长度的消息压缩成 256 位(32 字节) 的摘要。算法采用 Merkle-Damgård 结构,消息分组 512 位,经过 64 轮迭代压缩。我参与过一个等保三级项目,对方坚持要用 SM3 代替 SHA-256——其实 SM3 和 SHA-256 安全性相当,但国密支持是合规硬要求。
有个坑我得提一下:SM3 不能当加密用。前端时间有个同事想用 SM3 摘要当作密钥去加密文件,这完全不对——摘要不可逆,但密钥需要可派生。我曾经在培训时反复强调:哈希就是哈希,别乱用。
SM3 适用场景
- 完整性校验(文件校验、固件签名)
- 数字签名中的消息摘要(配合 SM2)
- 密码存储的哈希(加盐后)
- 彩虹表防护(SM3 速度适中,比 MD5 安全)
SM4:分组对称密码
SM4 是国密标准里的对称加密算法,分组长度 128 位,密钥长度也是 128 位。它的结构是 32 轮非平衡 Feistel 网络。说人话:把明文分成两半,每轮用轮函数处理左半部分并与右半部分异或,再交换。
我最早接触 SM4 是在做数据库透明加密(TDE)的时候。当时选型纠结用 AES 还是 SM4——后来发现 SM4 在软件实现上比 AES 慢一点,但硬件支持已经很成熟了。我记得在 X86 上跑 OpenSSL 的 SM4,吞吐量大约 1.2 Gbps,够用。
SM4 工作模式对比
| 模式 | 特点 | 适用场景 |
|---|---|---|
| ECB | 每个分组独立加密,并列快 | 小数据块,不推荐(模式弱) |
| CBC | 需要 IV,链式依赖 | 文件加密、消息加密 |
| CTR | 可并行,支持随机读写 | 磁盘加密、网络流加密 |
| GCM | 带认证加密,防篡改 | KMS 数据密钥保护、传输加密 |
三种算法知识体系结构
下面这张图是我自己画的知识地图,帮你理清 SM2、SM3、SM4 在整个密码体系中的位置。
三剑客对比总结
| 属性 | SM2 | SM3 | SM4 |
|---|---|---|---|
| 密码类型 | 非对称公钥 | 哈希 | 分组对称 |
| 密钥长度 | 256 位 | — | 128 位 |
| 输出长度 | 签名 512 位 (r,s) | 256 位摘要 | 128 位密文块 |
| 主要场景 | 签名、密钥交换、小数据加密 | 完整性、消息摘要 | 批量数据加密、传输加密 |
| 性能(软件) | 较慢(点乘运算多) | 中等(64轮迭代) | 较快(32轮Feistel) |
| 常见使用模式 | C1C3C2(加密)/ SM2Sign | SM3WithSM2(签名中) | ECB/CBC/CTR/GCM |
核心要点:很多人问“我能不能只用 SM4 搞定一切”?答案是 no。非对称、哈希、对称三大类各司其职。你想想看,签名需要私钥验证公钥,哈希需要不可逆,加密需要可解密——缺一个就构不成完整的安全链路。做 KMS 对接时,我通常这样组合:SM2 签名协商会话密钥 → SM3 校验握手消息 → SM4-GCM 加密业务数据,这才是一个国密齐套的合格系统。
嗯,这一章信息量不小,但你只要记住一句话:SM2 管信任、SM3 管指纹、SM4 管内容。后面实战章节里,我会带你一步步把这些算法塞进 KMS 的钥匙洞里。