SM4 分组密码的 GCM 认证加密模式原理

算法原理 · 2026-06-01

概述

SM4-GCM 是将国密 SM4 分组密码与 GCM(Galois/Counter Mode)工作模式结合的认证加密模式。GCM 模式由 McGrew 和 Viega 于 2004 年设计,同时提供机密性(加密)和完整性(认证),属于 AEAD(Authenticated Encryption with Associated Data)模式。

GCM 模式已被 NIST 标准化(SP 800-38D),并广泛应用于 IPSec、TLS 1.3、SSH 等协议。SM4-GCM 是将 GCM 框架应用于国密 SM4 算法的产物,目前已在 GM/T 0024-2023(SSL VPN 技术规范)和 GM/T 0022-2023(IPSec VPN 技术规范)中被引用。

GCM 模式基本原理

GCM 由两个核心组件构成:

  • CTR 模式加密(Counter Mode):提供机密性
  • GHASH(Galois Hash):提供完整性认证
两者协同工作,在加密的同时生成认证标签(Authentication Tag)。

数学基础

GCM 的核心数学结构建立在 GF(2¹²⁸) 有限域上的乘法运算。该域使用不可约多项式:

$$x^{128} + x^7 + x^2 + x + 1$$

即十六进制表示 0x100000000000000000000000000000087

算法参数

参数SM4-GCMAES-128-GCMAES-256-GCM说明
分组密码SM4AES-128AES-256底层算法
分组长度128 bit128 bit128 bit相同
密钥长度128 bit128 bit256 bitSM4 仅 128-bit
IV 长度96 bit(推荐)96 bit(推荐)96 bit(推荐)标准推荐值
Tag 长度32-128 bit32-128 bit32-128 bit通常取 128 bit
AAD 长度任意任意任意关联数据

CTR 模式加密

加密流程

CTR 模式将分组密码转换为流密码,通过将计数器加密后与明文异或:

$$C_i = P_i \oplus E_K(Counter_i)$$

对于 SM4-GCM,计数器构造如下:

CODE
if len(IV) == 96:
    Counter_0 = IV || 0^31 || 1      // 用于生成密钥流(初始值)
    Counter_i = IV || 0^(32-3) || i   // i 为 32-bit 大端序整数
else:
    Counter_0 = GHASH(IV || 0^64 || len(IV))  // IV 非 96-bit 时用 GHASH 处理

完整加密过程

GHASH 认证函数

GHASH 是 GCM 的核心认证组件,基于 GF(2¹²⁸) 上的多项式乘法。

GHASH 算法

其中乘法为 GF(2¹²⁸) 上的运算,$H = E_K(0^{128})$ 是哈希子密钥。

GF(2¹²⁸) 乘法

GCM 的乘法采用位反射(bit-reflected)表示法:

$$A \cdot B = (a_{127}x^{127} + \cdots + a_0) \cdot (b_{127}x^{127} + \cdots + b_0) \bmod x^{128} + x^7 + x^2 + x + 1$$

实际实现中通常使用 Intel 的 PCLMULQDQ 指令或查表优化。

SM4-GCM 与 AES-GCM 的对比

结构相似性

SM4-GCM 与 AES-GCM 在模式层面完全一致——GCM 模式是算法无关的,可以应用于任何 128-bit 分组密码。因此:

维度SM4-GCMAES-128-GCM
GCM 模式相同相同
GHASH 结构相同相同
GF(2¹²⁸) 乘法相同相同
Tag 生成相同相同
安全性证明相同框架相同框架

差异点

维度SM4-GCMAES-128-GCM
底层算法SM4(非平衡 Feistel)AES(SPN)
密钥长度128 bit128 bit
轮数3210
硬件加速有限(需专用指令)AES-NI 广泛支持
软件性能通常较慢通常较快
标准化程度国密标准引用NIST SP 800-38D

性能对比

场景SM4-GCMAES-128-GCM说明
短消息(64B)较慢较快AES-NI 优势明显
长消息(1KB+)接近基准加密开销主导
无 AES-NI接近较慢软件实现下差距缩小
硬件加速取决于实现快 10x+AES-NI 是杀手级特性
注意:以上为定性对比,具体性能取决于 CPU 架构、编译器优化和实现方式。在没有 AES-NI 的环境中(如部分嵌入式系统),SM4-GCM 与 AES-GCM 的性能差距会显著缩小。

安全性分析

GCM 的安全性质

  • 机密性:在 nonce 不重复的前提下,CTR 模式提供 IND-CPA 安全性
  • 完整性:GHASH 提供不可伪造性(existential unforgeability)
  • 组合安全性:GCM 整体满足 AEAD 安全定义

Nonce 重用问题

GCM 最严重的安全风险是 nonce 重用(nonce reuse):

如果相同的 (K, IV) 被用于加密两条不同消息:

  • 攻击者可以通过异或两个密文得到两个明文的异或
  • GHASH 的密钥 $H$ 被泄露(通过解 GF(2¹²⁸) 上的线性方程)
  • 认证机制完全失效
防御措施
  • 使用 96-bit IV 时,确保 IV 不重复(随机或计数器方式)
  • 限制每个密钥下的加密次数(通常 $2^{32}$ 次以内)
  • 密钥轮换策略

标签长度与安全强度

Tag 长度伪造概率适用场景
32 bit$2^{-32}$低安全需求
64 bit$2^{-64}$中等安全需求
96 bit$2^{-96}$较高安全需求
128 bit$2^{-128}$高安全需求(推荐)
建议:生产环境应使用 128-bit 认证标签。较短的标签虽然减少传输开销,但显著增加伪造风险。

应用场景

1. TLS 1.3 国密密码套件

RFC 8998 定义了 TLS 1.3 中的国密密码套件:

CODE
TLS_SM4_GCM_SM3  -- 密码套件 ID: 0x00, 0xC6

该套件使用 SM4-GCM 进行加密,SM3 进行哈希。

2. IPSec ESP

GM/T 0022-2023 定义了 IPSec ESP 中 SM4-GCM 的使用方式:

CODE
ESP Transform Identifier:
  SM4-GCM: 待定(参考 GM/T 0022)

3. 数据加密

SM4-GCM 适用于需要同时保证机密性和完整性的场景:

  • 数据库字段级加密
  • 文件加密
  • 通信数据保护

参考来源

相关实践