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 图帮你理清国密算法的分类、关系和典型应用。你可以把它当作本章的知识地图。

国密算法知识体系图 国密算法知识体系 SM2 公钥密码 SM3 密码杂凑 SM4 分组密码 加密 签名 密钥交换 完整性校验 摘要生成 ECB/CBC CTR/GCM 密钥扩展 物联网身份认证 TLS 国密套件 安全存储加密 图:国密算法分类、子功能与典型应用场景 提示:在 TrustZone 中,SM2 用于身份认证和密钥协商,SM4 用于数据加密,SM3 用于完整性校验

2.5 本章小结

这一章我们覆盖了 SM2、SM3、SM4 的核心标准,对比了它们与国际算法的差异,也看了几个实际应用场景。记住一点:国密算法不是简单的“替换”,而是有自己设计哲学的一套体系。在 TrustZone 中用好它们,需要理解每个算法的特性,以及它们如何配合安全世界的隔离机制。