1. SM4算法概述
说起SM4,得先聊聊国密标准。我入行那会儿,国内对称加密基本被AES包圆了,直到2012年SM4正式成为国家标准。嗯,咱们自己有了能打的算法。
SM4的分组长度128位,密钥长度也是128位。它跟AES最大的区别?轮数不同,SM4用了32轮非线性迭代。我刚开始调试SM4硬件时总觉得32轮有点多,后来跑通性能测试才发现,迭代轮数恰好是安全与实现的平衡点。
核心概念:SM4是中国国家密码管理局公布的商用密码分组密码算法,标准号为GB/T 32907-2016。说白了,它是官方认证的对称加密方案,用于替代金融、政务、物联网等场景里的国际算法。
国密标准体系
国密不止SM4一个。我记得还有个SM1,但SM1是芯片级算法,对外不公开。真正能让人上手做研发的,就是SM2(公钥密码)、SM3(哈希)、SM4(对称加密)这三兄弟。
- SM2:基于椭圆曲线的公钥密码,对标RSA/ECDSA
- SM3:密码杂凑算法,输出256位哈希,对标SHA-256
- SM4:分组对称加密,对标AES
- SM9:基于标识的密码算法,对标IBC方案
你在做性能巡检的时候,经常要交叉验证多个国标。我遇到过客户拿SM3当加密用,结果哈希长度不够——嗯,避坑指南来了:SM3是哈希,不是加密,不能直接存储敏感数据。
发展历程:从实验室到生产环境
咱们用表格快速捋一下关键节点:
| 时间 | 事件 | 我的观察 |
|---|---|---|
| 2006 | SM4算法雏形公开(原名SMS4) | 那时候文档都是中文的,很少人敢用 |
| 2012 | 成为国家标准GB/T 32907 | 终于有法可依了 |
| 2016 | 更新为GB/T 32907-2016 | 修正了部分描述,我推荐看这个版本 |
| 2020 | 被纳入国际ISO/IEC 18033-3 | 国产算法的里程碑,出国项目也能用了 |
| 至今 | 芯片级、软件级全面铺开 | 大部分密码卡都支持,性能巡检已是刚需 |
为什么2016年更新版本很重要?我做过一次老版本实现和新版本的对比,发现轮常数向量有微小差异。虽然功能上没影响,但做性能巡检时如果拿错参考实现,吞吐量数据会偏差2%~3%。
注意:不同版本的SM4实现可能存在细节差异。性能巡检前务必确认你使用的库或芯片遵循GB/T 32907-2016标准。我曾经踩过坑:用某个开源库跑分,死活比芯片慢一倍,后来发现是库实现了早期草案版本。
应用场景:我在哪里见过SM4?
你可能会觉得SM4只用在政务系统里。其实不然。我来列几个我实际接触过的场景:
- 金融IC卡:银联PBOC标准里SM4是强制选项。我做过一个发卡项目,芯片必须同时支持SM4和3DES。
- 物联网终端:LoRa、NB-IoT模组里加SM4协处理器。我记得调试时发现32轮迭代在低主频MCU上能吃满20ms,性能巡检得卡着这条线。
- VPN网关:国密IPSec里用SM4做隧道加密。客户要求千兆线速,我们被迫上了硬件加速卡。
- 数据库加密:TDE透明加密场景,SM4的扩散特性好,做列加密时安全性高于AES-CBC——我个人认为。
- 移动支付:微信支付和支付宝的国密版本后台已切换SM4。你做巡检时注意证书和密钥管理的性能开销。
我的经验:SM4加密速度在软件实现上约为AES-128的60%~80%,但在硬件实现中两者几乎持平。所以巡检时一定要区分软实现和硬实现场景,否则对标数据没有参考价值。
上面这张图把SM4的脉络串起来了。你做性能巡检时,首先要确认你手里的SM4是哪个版本的实现、跑在什么硬件上、用于哪种场景。不然的话,测出来的数据可能自己都解释不通。
说到这,我想起有一次产线反馈SM4加密卡速度不达标。我追踪了一整天,最后发现是驱动里把轮密钥扩展代码写进了热点路径——每加密一次就重新扩展一次。嗯,这就是典型的实现坑。性能巡检不光要测,还得懂算法本身才能定位问题。