2. 国密算法家族简介:SM2、SM3、SM4、SM9 各自的解密场景
好,咱们这一章聊点接地气的。国密不是一棵树,而是一整片林子。SM2、SM3、SM4、SM9 这四个家伙,各有各的看家本事。你想想看,要优化解密延迟,总得先知道每个算法都在哪干活吧。
我个人习惯把国密算法分成四类:公钥密码、密码杂凑、对称密码、标识密码。别急,咱们一个一个拆开说。
2.1 SM2 —— 公钥密码体系
SM2 是国家密码管理局发布的椭圆曲线公钥密码算法标准。说白了,它干的事跟 RSA 差不多,但密钥更短,安全强度更高。
它的解密场景主要有三个:
- 数字签名与验证:确保消息来源的不可否认性。我在项目中遇到过,很多电子政务系统用 SM2 签章。签名快,验签慢——这是椭圆曲线的特点。优化时应优先关注验签性能。
- 密钥协商:双方安全地建立一个共享密钥。SM2 密钥协商协议,我建议你记住它的握手次数,比传统 ECDH 多一步,延迟自然高一些。
- 数据加密:用接收方公钥加密数据,只有对方能用私钥解密。嗯,这里要注意,SM2 加密后的密文比原文长不少,网络传输时带宽也要算进去。
2.2 SM3 —— 密码杂凑算法
SM3 是国密的哈希函数。输出 256 位(32 字节)。它本身没有“解密”这一说,但它是很多解密流程的前置步骤。
应用场景其实很明确:
- 完整性校验:文件下载后算一遍 SM3 摘要,跟原始值对比。
- 消息认证码(MAC):配合密钥,确保消息没有被篡改。
- 数字签名的组成部分:SM2 签名前,先对消息算 SM3 摘要。你想想看,一个签名操作,SM3 要算一遍,SM2 要算一笔,两个延迟是叠加的。
我个人习惯在优化时,先看 SM3 是否成了木桶最短的那块板。它的压缩函数运算量大,数据依赖强,想要快必须走硬件加速或 SIMD 指令优化。
2.3 SM4 —— 对称密码算法
SM4 是分组密码,分组长度 128 位,密钥长度 128 位。说白了,就是国标的 AES。
它的解密场景更直接:
- 大量数据加密与解密:视频流、数据库加密、文件存储加密。
- 通信加密:SSL/TLS 国密套件中的对称加密部分。
SM4 的解密跟加密几乎一样快——但有一个关键点:密钥扩展。每次切换密钥,都需要重新计算 32 轮密钥。我记得在某项目里,客户端频繁切换连接,开销大部分花在密钥扩展上。优化点很清楚:缓存常用密钥的扩展结果。
另外,SM4 支持 ECB、CBC、CTR 等模式。不同模式带来的延迟差异很大:
| 工作模式 | 解密特点 | 延迟敏感度 |
|---|---|---|
| ECB | 可并行,每块独立 | 低(建议大量数据使用) |
| CBC | 解密可并行,但依赖前一个密文块 | 中 |
| CTR | 加密解密完全对称,可预计算密钥流 | 低(我最推荐) |
| GCM | 带认证的加密,有额外运算 | 中高 |
2.4 SM9 —— 标识密码算法
SM9 是基于双线性对的标识密码体系。最酷的地方在于:用户的公钥就是自己的标识——手机号、邮箱、身份证号。
它的解密场景集中在:
- 标识签名与验签:不需要证书链,直接验。
- 标识加密与解密:直接用接收方标识加密,私钥在密钥生成中心(KGC)拿到。
SM9 的解密(私钥运算)比 SM2 慢非常多。为什么?因为它用了双线性对(Tate 对或 Weil 对)。这玩意儿的计算量,我这么说吧——一次 SM9 解密耗时大约是 SM2 的 5 到 10 倍。
2.5 四种算法解密场景总结
截止到这里,我觉得可以给个表格把各家解密的优劣势摆一摆。
| 算法 | 解密典型场景 | 性能特点 | 延迟优化空间 |
|---|---|---|---|
| SM2 | 加密数据、签名验签、密钥协商 | 点乘运算敏感 | 预计算、批处理、硬件加速 |
| SM3 | 完整性校验、摘要运算 | 压缩函数、流水线 | SIMD、硬件协处理 |
| SM4 | 批量加解密、通信加密 | 密钥扩展、轮函数 | 密钥缓存、CTR预计算 |
| SM9 | 标识加密、标识签名 | 双线性对计算 | 对运算优化、减少调用 |
嗯,说到这里,你应该对这四个家伙的背景和场景有个清晰认识了。后面的章节里,我们会深入每个算法的实现细节,带你看看到底是哪几行代码最吃性能。别急,一步一步来。