SM4 分组密码的 GCM 认证加密模式原理
概述
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):提供完整性认证
数学基础
GCM 的核心数学结构建立在 GF(2¹²⁸) 有限域上的乘法运算。该域使用不可约多项式:
$$x^{128} + x^7 + x^2 + x + 1$$
即十六进制表示 0x100000000000000000000000000000087。
算法参数
| 参数 | SM4-GCM | AES-128-GCM | AES-256-GCM | 说明 |
|---|---|---|---|---|
| 分组密码 | SM4 | AES-128 | AES-256 | 底层算法 |
| 分组长度 | 128 bit | 128 bit | 128 bit | 相同 |
| 密钥长度 | 128 bit | 128 bit | 256 bit | SM4 仅 128-bit |
| IV 长度 | 96 bit(推荐) | 96 bit(推荐) | 96 bit(推荐) | 标准推荐值 |
| Tag 长度 | 32-128 bit | 32-128 bit | 32-128 bit | 通常取 128 bit |
| AAD 长度 | 任意 | 任意 | 任意 | 关联数据 |
CTR 模式加密
加密流程
CTR 模式将分组密码转换为流密码,通过将计数器加密后与明文异或:
$$C_i = P_i \oplus E_K(Counter_i)$$
对于 SM4-GCM,计数器构造如下:
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 处理完整加密过程
输入: 密钥 K, IV, 明文 P, AAD
输出: 密文 C, 认证标签 T
1. 生成哈希子密钥 H = E_K(0^128) // 全零块加密
2. CTR 模式加密:
for i = 1 to n:
C_i = P_i ⊕ E_K(Counter_i)
3. GHASH 计算:
GHASH(AAD, C) = X_{m+n+1}
其中 X_0 = 0
X_i = (X_{i-1} ⊕ V_i) · H (V_i 为 AAD 或密文块)
4. 生成标签:
T = MSB_t(GHASH ⊕ E_K(Counter_0))
// Counter_0 是 IV || 0^31 || 1GHASH 认证函数
GHASH 是 GCM 的核心认证组件,基于 GF(2¹²⁸) 上的多项式乘法。
GHASH 算法
GHASH(H, AAD, C):
X = 0^128 // 初始值
// 处理 AAD(填充至 128-bit 的倍数)
for i = 1 to m:
X = (X ⊕ A_i) · H
// 处理密文(填充至 128-bit 的倍数)
for i = 1 to n:
X = (X ⊕ C_i) · H
// 附加长度块
len_block = len(AAD) || len(C) // 两个 64-bit 大端序整数
X = (X ⊕ len_block) · H
return X其中乘法为 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-GCM | AES-128-GCM |
|---|---|---|
| GCM 模式 | 相同 | 相同 |
| GHASH 结构 | 相同 | 相同 |
| GF(2¹²⁸) 乘法 | 相同 | 相同 |
| Tag 生成 | 相同 | 相同 |
| 安全性证明 | 相同框架 | 相同框架 |
差异点
| 维度 | SM4-GCM | AES-128-GCM |
|---|---|---|
| 底层算法 | SM4(非平衡 Feistel) | AES(SPN) |
| 密钥长度 | 128 bit | 128 bit |
| 轮数 | 32 | 10 |
| 硬件加速 | 有限(需专用指令) | AES-NI 广泛支持 |
| 软件性能 | 通常较慢 | 通常较快 |
| 标准化程度 | 国密标准引用 | NIST SP 800-38D |
性能对比
| 场景 | SM4-GCM | AES-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 中的国密密码套件:
TLS_SM4_GCM_SM3 -- 密码套件 ID: 0x00, 0xC6该套件使用 SM4-GCM 进行加密,SM3 进行哈希。
2. IPSec ESP
GM/T 0022-2023 定义了 IPSec ESP 中 SM4-GCM 的使用方式:
ESP Transform Identifier:
SM4-GCM: 待定(参考 GM/T 0022)3. 数据加密
SM4-GCM 适用于需要同时保证机密性和完整性的场景:
- 数据库字段级加密
- 文件加密
- 通信数据保护
参考来源
- NIST SP 800-38D — Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM)
- GM/T 0024-2023 — SSL VPN 技术规范
- GM/T 0022-2023 — IPSec VPN 技术规范
- RFC 8998 — ShangMi (SM) Cipher Suites for TLS 1.3
- McGrew & Viega — The Galois/Counter Mode of Operation (GCM)
- GB/T 32907-2016 — SM4 分组密码算法
相关实践
- 如需了解 SM4-GCM 在 TLS 1.3 中的部署,请参阅《SM2 国密算法实战:从密钥生成到 TLS 完整部署》
- 如需了解 SM4 的基本加密模式实现,请参阅《SM4 国密对称加密实战:CBC/ECB/GCM 模式与性能调优》
- 如需了解 IPSec VPN 中的国密应用,请参阅《IPSec VPN 国密协议详解》