1. SM4算法概述与发展
大家好,咱们这门课叫《SM4并发数容量审计实操详解》。我估计你看到标题就猜到了,核心是压测、是容量、是并发。但做这些之前,有个东西绕不开——SM4算法本身。你连它是什么、怎么来的、用在哪儿都不知道,那并发数测出来也是瞎测。所以第一章,咱们先把SM4的底牌翻清楚。
1.1 算法背景:为什么我们需要自己的国密标准?
早些年,国内大量商用密码系统用的都是AES、DES这类国际算法。说实话,AES本身没毛病,但有个隐患——你控制不了标准。万一哪天国际形势一变,人家在算法层面留个后门,或者干脆不让你用了,你怎么办?
说白了,这是国家信息安全自主可控的战略需求。我2010年刚接触密码领域时,很多金融客户还在用3DES,我当时就跟他们聊过:“万一哪天被断供,你的核心交易系统怎么办?”很多人觉得我危言耸听。后来大家也看到了,中美贸易摩擦、实体清单……嗯,自主密码标准的重要性一下子就凸显了。
所以中国密码管理局牵头,组织了一批专家,参照国际经验,结合国内实际需求,搞了一套商用密码算法体系——SM系列。咱们今天要讲的SM4,就是其中的对称分组密码算法。
核心定位: SM4是国密对称分组密码,对标AES-128,用于数据加密/解密。它不是替代AES,而是在合规场景下必须选用的算法。
1.2 标准发布历程
SM4最早其实不叫SM4。它2006年就被公开了,当时叫“SMS4”,是中国无线局域网安全标准里的一部分。我记得当时很多搞无线的朋友都在研究它,但直到2012年,它才正式成为国标——GB/T 32907-2012。从那天起,它才有了正式名分:SM4。
后来的发展也很快:
| 时间 | 事件 |
|---|---|
| 2006年 | 作为SMS4在无线局域网标准中公开 |
| 2012年 | 成为国标GB/T 32907-2012,正式命名SM4 |
| 2016年 | 纳入ISO/IEC 18033-3国际标准(部分采纳) |
| 2020年 | 国密局发布SM4的GCM等模式规范 |
你注意看2020年那个节点——模式规范。 SM4最早只定义了ECB和CBC,后来才加了GCM、CCM等认证加密模式。这在实际系统中特别重要,因为纯粹的CBC没法防篡改。我曾经在某个政府项目中吃过亏:只用了SM4-CBC加密,结果被攻击者通过密文替换改了部分数据,幸好及时发现,否则后果不堪设想。从那以后,我只要是做数据传输加密,必上GCM模式。后面讲到并发测试时,模式不同,性能差异巨大,这点你先记住。
1.3 SM4算法核心参数速览
做性能测试之前,你得先知道它长什么样。我列一个关键参数表,后面所有压测数据都基于这个表理解。
| 参数 | 值 | 说明 |
|---|---|---|
| 分组长度 | 128 bit | 每次加密/解密处理16字节数据 |
| 密钥长度 | 128 bit | 固定128位,不可变长 |
| 轮数 | 32轮 | 比AES多两轮(AES-128是10轮) |
| 密钥扩展 | 32轮子密钥 | 通过非线性变换生成 |
为什么我要强调轮数?因为轮数直接决定了计算量。你想想看,SM4做一次块加密要跑32轮,而AES-128只要10轮。虽然每轮的计算复杂度略有不同,但平均下来,SM4的每次运算指令数大约是AES的2~3倍。这个结论直接影响了并发数容量——同样的硬件,SM4的吞吐量天生比AES低一截。后面咱们做压测时,你会亲眼看到这个差距。
一个坑: 很多人以为国密算法一定比国际算法慢很多,其实未必。SM4的轮函数设计比较精简,纯软实现时,现代CPU的SIMD指令能让它跑得很快。我曾经在Intel Xeon上做过对比,SM4-GCM的吞吐量大约能达到AES-128-GCM的60%~70%,并不是想象中那么惨。但商密硬件加速卡的支持度确实不如AES,这点你也要有心理准备。
1.4 应用领域:你会在哪些场景遇到SM4?
SM4现在已不是“备胎”了,它是强制要求的。特别是涉及政务、金融、能源、通信这些关键基础设施,等保三级以上基本都要求使用国密算法。我列几个最常见的场景:
- 金融交易系统——银行核心交易、支付接口、数字人民币钱包等,SM4用于敏感字段加密(如卡号、身份证号)。
- 电子政务——公文流转、行政审批、数据共享平台,使用SM4保证数据存储和传输的保密性。
- VPN与安全通信——IPSec VPN、SSL VPN的国密改造,用SM4做数据通道加密。
- 物联网与智能终端——智能电表、车联网、工业控制设备,用SM4做轻量级加密。不过要注意,SM4的软实现比AES重,在低算力IoT设备上需要谨慎评估性能。
- 数据库加密——TDE(透明数据加密)场景,很多国产数据库已支持SM4作为加密算法选项。
你发现没有,这些场景绝大多数都是高并发、高吞吐的。银行的每秒交易量轻松上万,政务平台在高峰期几万并发也正常。所以才会催生出这门课——你不把SM4的并发上限摸清楚,线上出问题就晚了。我见过不止一个项目,开发阶段只用单连接测了几轮加密,觉得挺快,结果上线没两天就撑爆了。原因很简单:多核并发时,SM4的密钥扩展调度、内存带宽、锁竞争,每一个都可能成为瓶颈。
1.5 知识体系结构图
下面这张图帮你把本章的内容串起来。你看它就能知道SM4从哪儿来、长什么样、要用在哪儿。
1.6 为什么要在并发场景下特地去审计SM4?
这个问题很关键。你可能会想:“SM4不就是个算法嘛,我调个接口就行了,跟并发数有什么关系?”
有关系,而且关系大了。我这么多年做性能测试,发现很多人对密码算法的并发容量有个误区——以为CPU主频高、核数多,并发就能线性提升。但实际测下来,SM4的并发瓶颈往往不在计算本身,而在:
- 密钥扩展操作的串行化: 每次加密都要先做一轮密钥扩展。如果大量并发短连接频繁建立,密钥扩展会成为热点函数,锁竞争急剧上升。
- 内存带宽与缓存失效: SM4的S盒查找表如果被多个核心同时访问,可能导致缓存颠簸。我在一次项目中实测,当并发线程数超过CPU物理核数时,SM4的吞吐量反而下降,就是因为L2缓存被频繁换入换出。
- 模式选择的性能差异: ECB、CBC、GCM、CCM……它们的并行化潜力完全不同。CBC不能并行加密,但GCM可以。同样的SM4,在GCM模式下并发容量可能比CBC高一个数量级。
所以,千万不能以为SM4的批量加密性能好,就等于并发性能好。后面我会带你用JMeter、wrk、自定义压测工具,一步步把这些问题测出来,然后优化。
⚠️ 重要提醒: 本章只是开局,让你知道SM4的基本盘。从下一章开始,我们就要动手搭压测环境、写测试脚本了。但你必须先把这些基础概念刻在脑子里——因为你之后的每一个压测结果,都要拿它们来解释原因。
1.7 本章小结(不预告下一章)
咱们把这一章的核心收一下:
- SM4是中国自主的分组密码标准,128位分组+128位密钥,32轮迭代。
- 它从2006年走来,2012年正式国标化,2020年补充了GCM等模式。
- 应用范围极广:金融、政务、VPN、数据库加密……这些都是高并发场景。
- 并发性能不只看算法本身,还要看密钥扩展、缓存效应、模式并行度。
嗯,心里有底了。记住这些参数和概念,后面咱们才好真刀真枪地干SM4并发容量审计。