对称加密算法性能对比:AES、SM4、ChaCha20 归纳总结
对称加密是加密性能调优的硬仗。我个人这些年折腾过不少项目,从嵌入式到高并发网关,选对称加密时基本就是在 AES、SM4 和 ChaCha20 这三家里挑。很多人上来就问“哪个最快”,其实答案取决于你的硬件平台和数据场景。你想想看,同样的算法,在 Intel 上跑和在 ARM 上跑,差距能差出一倍去。
1. 三大算法简介
| 算法 | 标准/背景 | 密钥长度 | 分组模式 |
|---|---|---|---|
| AES | NIST 标准,全球最广泛 | 128 / 192 / 256 bits | ECB、CBC、CTR、GCM 等 |
| SM4 | 中国国家密码标准(GB/T 32907) | 128 bits 固定 | ECB、CBC、CTR、GCM 等 |
| ChaCha20 | 流密码,伯恩斯坦设计 | 256 bits 固定 | ChaCha20 + Poly1305 |
说个我踩过的坑:早期做物联网网关时,以为 SM4 是国密就必须选用,结果发现片上没有硬件加速,纯软件跑 SM4 比 AES-128-GCM 慢了将近 3 倍。后来换成 ChaCha20,配合 Poly1305 验证,吞吐量直接翻番。所以“国密”不一定慢,但要看平台是否支持加速指令集。
2. 性能关键因素
同样是 AES,为什么我测出来和网上数据对不上?其实原因很直接:
- 硬件加速指令:AES-NI(Intel)、ARMv8 Crypto Extensions、SM4 专用指令(部分国产芯片)
- 数据块大小:小包(<256B)带宽损耗大,大包(>4KB)更能发挥算法优势
- 加密模式:GCM 附带认证,比纯 CTR 多算一个 GHASH,吞吐量下降 20%~40%
- 密钥派生与初始化:一次密钥展开开销,短链接场景影响明显
我记忆中,有一次优化 WebRTC 媒体加密,用了 ChaCha20-Poly1305 而不是 AES-GCM,原因是移动设备上 AES-NI 指令不可用,而 ChaCha20 的纯软件实现非常均衡。效果很明显,1080p 视频帧的加密延迟从 1.2ms 降到了 0.4ms。
3. 实测对比数据
| 算法 + 模式 | 平台 | 数据大小 | 吞吐量 (MB/s) |
|---|---|---|---|
| AES-128-GCM | Intel Xeon (AES-NI) | 64KB | 4800 |
| AES-256-GCM | Intel Xeon (AES-NI) | 64KB | 4100 |
| SM4-CBC | Intel Xeon (纯软件) | 64KB | 850 |
| SM4-GCM | RISC-V (无加速) | 1KB | 120 |
| ChaCha20-Poly1305 | ARM Cortex-A72 | 64KB | 1900 |
注意:SM4 在支持国密指令的芯片上(如鲲鹏 920)能达到 AES-NI 级别的吞吐,约 4000+ MB/s。所以选型前一定先查目标 CPU 的指令集支持,别凭感觉。
警告:千万不要在生产环境直接复用网上的性能数据。我见过一个团队,照着某个博客写的“AES-256-GCM 比 AES-128-GCM 慢 30%”就下了结论,结果自己测出来只慢 8%。原因是测试用的数据块大小和模式不一样。每个项目,你必须自己在目标硬件上跑一遍 benchmark。
4. 选型建议:场景决定一切
我习惯把它们分成三类场景来考虑:
- 高性能服务端(x86/ARM v8+):首选 AES-GCM,硬件加速加持下吞吐最高,生态最完整。
- 需要合规的国内项目:必须用 SM4,但尽量选支持国密指令集的芯片(海光、鲲鹏、飞腾),否则纯软件性能很惨。
- 物联网、移动端、软实现:ChaCha20 是王者。它没有复杂 S 盒,不依赖硬件加速,代码量小,常量时间实现也容易。
嗯,再说一句实话:如果让我选“最无脑”的对称加密,我会选 ChaCha20-Poly1305。为什么呢?因为它的安全性论证非常干净,而且没有 GCM 里那些 GHASH 的侧信道隐患。当然,这只是我自己的偏好,大厂里还是 AES 的天下。
小技巧:当你需要在小包高频传输(比如每秒几万条消息)中提升性能,别只盯着算法。试试把多个小包拼成一个大的 ciphertext 再加密,能减少密钥派生和模式切换开销。我之前在消息队列做优化,拼包后 QPS 提升了 3 倍。
5. 核心流程对比图
下面这张图帮我理清了这三个算法在不同场景下的适用关系,你也可以把它当作选型决策参考:
你看,这张图其实已经把决策路径画清楚了。别小看这个选择,我在一个项目中就是因为没注意 ARM 上 AES-GCM 的 GHASH 消耗,结果延迟超标,最后切到 ChaCha20 才达标。这些细节,你实际碰一次就记住了。
核心要点:
- 性能排名没有,平台指令集是最大的变量。
- 小包场景下,ChaCha20 的初始化开销更低,优势更明显。
- SM4 在纯软件下的效率约为 AES 的 1/5 ~ 1/4,请谨慎评估。
- 永远拿自己的数据说话——跑一遍
openssl speed -evp aes-128-gcm只要 10 秒。
我记得第一次做加密选型对比时,花了整整一周测了十几个组合。最后发现,与其纠结那 5% 的性能差异,不如把精力花在密钥管理和认证完整性上。对称加密本身很快,真正的瓶颈往往在 I/O 和协议设计上。嗯,这是后话了,我们先把这三个算法的底摸清楚再说。