2. 国密算法概述:SM2/SM3/SM4 标准、对比与应用场景
各位同学,欢迎来到第二章。这一章我们聊聊国密算法本身。很多工程师一听到“国密”,第一反应就是“替换 AES/RSA”。其实没那么简单。国密算法在设计上有很多巧思,尤其适合嵌入式环境。我在几个物联网安全项目里用过它们,有些坑今天一并讲清楚。
2.1 SM2/SM3/SM4 算法标准
国密算法家族里,最核心的就是 SM2、SM3 和 SM4。它们分别对标 RSA、SHA-256 和 AES。但注意,不是简单照搬,而是有自主改进。
2.1.1 SM2 椭圆曲线公钥密码算法
SM2 是基于椭圆曲线(ECC)的公钥算法。它支持加密、签名和密钥交换。我个人习惯把它看作“国密版的 ECDSA + ECDH”。
- 曲线参数:使用一条 256 位的素数域椭圆曲线。参数是公开的,但经过精心挑选,避免了一些已知的弱曲线。
- 性能优势:相比 RSA-2048,SM2 的密钥更短(256 位 vs 2048 位),计算量更小。在 TrustZone 的安全世界里,这很宝贵。
- 签名流程:SM2 签名算法与 ECDSA 不同,它使用了类似 Schnorr 的机制,但加入了用户标识符,防止签名重放。
关键点:SM2 的签名输出是 64 字节(r + s),而 RSA-2048 签名是 256 字节。在带宽受限的 IoT 场景下,这个差距很明显。
2.1.2 SM3 密码杂凑算法
SM3 是哈希算法,输出 256 位摘要。它的结构与 SHA-256 类似,但消息扩展和压缩函数有差异。我记得第一次看 SM3 的规范时,发现它的迭代轮数是 64 轮,和 SHA-256 一样,但每一步的布尔函数和置换不同。
- 安全性:SM3 的设计强度不低于 SHA-256。目前没有公开的有效攻击。
- 性能:在 ARM Cortex-A 系列上,SM3 的软件实现速度大约是 SHA-256 的 70%~80%。但在硬件加速下,差距可以忽略。
- 用途:SM3 常用于完整性校验、数字签名中的摘要生成、以及密钥派生。
我的经验:在 TrustZone 的安全存储中,我常用 SM3 对关键配置做哈希校验。这样即使普通世界篡改了数据,安全世界也能发现。
2.1.3 SM4 分组密码算法
SM4 是对称加密算法,分组长度 128 位,密钥长度 128 位。它采用 32 轮非线性迭代结构。说白了,它和 AES 是同一类东西,但轮函数不同。
- 轮函数:SM4 的每一轮使用一个 32 位的 S 盒,以及线性变换 L。AES 用的是 8 位 S 盒和列混合。
- 密钥扩展:SM4 的密钥扩展算法与加密算法结构相同,这简化了硬件实现。
- 模式支持:SM4 支持 ECB、CBC、CTR、GCM 等常见模式。在 TrustZone 中,我建议优先使用 GCM 模式,因为它同时提供加密和完整性校验。
注意:SM4 的 S 盒是固定的,不像 AES 那样可以动态生成。这意味着在侧信道攻击面前,SM4 的防护需要额外设计。我曾经在项目中遇到过功耗分析攻击,后来加了掩码才解决。
2.2 国密算法与 AES/RSA/SHA 的对比
很多同学会问:“既然 AES 和 RSA 已经很好用了,为什么还要用国密?” 原因有三:合规性、自主可控、以及在某些场景下的性能优势。下面这张表可以帮你快速对比。
| 对比维度 | SM2 | RSA-2048 | SM3 | SHA-256 | SM4 | AES-128 |
|---|---|---|---|---|---|---|
| 密钥长度 | 256 位 | 2048 位 | — | — | 128 位 | 128 位 |
| 签名/加密输出 | 64 字节 | 256 字节 | 32 字节 | 32 字节 | 16 字节 | 16 字节 |
| 计算速度(软件) | 较快 | 慢 | 中等 | 快 | 快 | 快 |
| 侧信道防护难度 | 中等 | 高 | 低 | 低 | 中等 | 中等 |
| 合规性(中国) | 强制 | 不推荐 | 强制 | 不推荐 | 强制 | 不推荐 |
你想想看,在 TrustZone 的安全世界里,密钥存储和计算资源都很宝贵。SM2 的短签名意味着安全存储区可以放更多密钥。SM4 的硬件实现面积比 AES 小约 20%,这对芯片成本敏感的项目很友好。
2.3 国密算法的应用场景
国密算法不是空中楼阁。它在实际系统中已经大规模落地。我挑几个典型的场景说说。
2.3.1 物联网设备身份认证
每个 IoT 设备出厂时,会烧录一个 SM2 密钥对。设备向云端发起连接时,用 SM2 签名证明身份。云端用 SM3 校验签名摘要。整个过程不需要传输明文密钥。
- 优势:SM2 签名短,适合窄带网络。
- 避坑:我曾经遇到过设备随机数生成器太弱,导致 SM2 签名重复。后来强制要求使用硬件 TRNG。
2.3.2 安全通信信道(TLS 国密套件)
国密 TLS 套件使用 SM2 做密钥交换,SM4 做数据加密,SM3 做消息认证。这在政务、金融系统中很常见。
- 握手流程:客户端和服务端交换 SM2 公钥,协商 SM4 会话密钥,然后用 SM3 校验握手消息完整性。
- 性能:相比国际 TLS 套件,国密套件的握手延迟略高(因为 SM2 计算比 ECDHE 慢一点),但数据面加密速度相当。
2.3.3 数据存储加密
在 TrustZone 的安全存储中,SM4 常用于加密敏感数据(如密钥、证书、生物特征模板)。SM3 用于校验数据完整性。
推荐做法:使用 SM4-GCM 模式,一次调用同时完成加密和完整性校验。不要单独用 SM4-CBC + SM3,那样容易引入时序攻击。
2.4 国密算法知识体系图
下面这张 SVG 图帮你理清国密算法的分类、关系和典型应用。你可以把它当作本章的知识地图。
2.5 本章小结
这一章我们覆盖了 SM2、SM3、SM4 的核心标准,对比了它们与国际算法的差异,也看了几个实际应用场景。记住一点:国密算法不是简单的“替换”,而是有自己设计哲学的一套体系。在 TrustZone 中用好它们,需要理解每个算法的特性,以及它们如何配合安全世界的隔离机制。