SM7 分组密码算法原理详解:非接触式智能卡的安全基石

算法原理 · 2026-07-04

概述

SM7 是中国商用密码算法体系中的第四款分组密码算法,也是第一款专为非接触式智能卡场景设计的对称密码算法。它由国家标准 GB/T 39786-2021《信息系统密码应用基本要求》和行业标准 GM/T 0052-2018《SM7 分组密码算法》正式定义。

与 SM1(IP 核实现,不公开算法细节)不同,SM7 的算法规范完全公开,但其设计目标与 SM4 有显著区别:SM7 面向资源极度受限的非接触式 IC 卡芯片(内存通常 < 8 KB,计算能力有限),需要在极低的功耗和极少的时钟周期内完成加密运算。

算法参数

参数说明
分组长度128 bit与 SM4、AES 一致
密钥长度128 bit与 SM4、AES 一致
轮数32 轮与 SM4 一致
密钥调度无(固定密钥)每次加密使用相同密钥,不做密钥扩展
实现方式软件/硬件主要实现在智能卡芯片中
标准文档GM/T 0052-20182018 年发布
关键设计特点:SM7 没有密钥扩展过程。与 SM4 需要生成 32 个轮密钥不同,SM7 直接使用 128 位主密钥进行 32 轮加密,这大幅降低了智能卡芯片的内存占用。

算法结构

SM7 采用 Feistel 网络结构,与 SM4 类似但存在重要差异。

Feistel 结构

CODE
输入: X = (L₀, R₀),其中 L₀, R₀ 各 64 bit

对于 i = 0, 1, ..., 31:
    Lᵢ₊₁ = Rᵢ
    Rᵢ₊₁ = Lᵢ ⊕ F(Rᵢ, K)

输出: (L₃₂, R₃₂)

其中:

  • LᵢRᵢ 分别为第 i 轮的左半部分和右半部分(各 64 bit)
  • K 为 128 位密钥(全程不变,无密钥扩展)
  • F 为轮函数

轮函数 F

轮函数 F 接受 64 bit 输入和 128 bit 密钥,输出 64 bit:

CODE
F(R, K) = T(S(R ⊕ K₁)) ⊕ K₂

其中:

  • K₁K₂ 是从主密钥 K 派生的两个 64 bit 子密钥
  • S 为非线性变换层(S 盒替换)
  • T 为线性变换层

非线性变换层 S

SM7 的 S 盒由 4 个独立的 8×8 S 盒组成(记为 S₀, S₁, S₂, S₃),每个 S 盒将 8 bit 输入映射为 8 bit 输出。

输入 64 bit 数据被分为 8 个字节,分别通过 S₀ 到 S₃ 循环替换:

CODE
字节 0 → S₀
字节 1 → S₁
字节 2 → S₂
字节 3 → S₃
字节 4 → S₀
字节 5 → S₁
字节 6 → S₂
字节 7 → S₃

线性变换层 T

线性变换层 T 对 S 盒输出的 32 bit 数据进行线性扩散,确保单个比特的变化能够在多轮传播到所有输出比特。

T 变换包含一个 32×32 的线性变换矩阵乘法(在 GF(2) 域上),具体矩阵定义见 GM/T 0052-2018 附录 A。

S 盒设计

SM7 使用 4 个不同的 8×8 S 盒(S₀ ~ S₃),这与 SM4 的单一 S 盒(S盒)形成鲜明对比。

设计特性

特性说明
非线性度112每个 S 盒的非线性度(满分 128)
差分均匀性8最大差分概率 8/256
代数次数7S 盒布尔函数的代数次数
平衡性每个 S 盒输出 0 和 1 各 128 次

与 SM4 S 盒对比

特性SM4 S 盒SM7 S 盒(4 个)
S 盒数量1 个4 个(S₀~S₃)
非线性度112112
差分均匀性88
查找表大小256 字节4 × 256 = 1024 字节
循环使用S₀~S₃ 循环
SM7 使用 4 个 S 盒的设计可以在硬件实现时通过并行化提升吞吐量,但在资源受限的智能卡芯片上,1024 字节的 S 盒表占用是一个权衡。

密钥体系

固定密钥设计

SM7 最显著的特点是没有密钥扩展。每次加密直接使用 128 位主密钥,不做任何密钥派生。这种设计的原因在于:

  • 内存受限:智能卡芯片通常只有几 KB 的 RAM,SM4 的 32 个轮密钥(128 字节)加上密钥扩展算法会占用可观的资源
  • 简化实现:固定密钥意味着加密和解密使用完全相同的密钥和相同的轮函数,代码复用率高
  • 安全等效:32 轮 Feistel 结构在固定密钥下仍然提供充分的安全裕度

密钥管理要求

依据 GM/T 0036-2014《采用非接触卡的门禁系统密码应用技术指南》,SM7 密钥管理遵循以下原则:

  • 根密钥:由发卡系统在安全环境中生成,通常 128 位随机数
  • 密钥分散:使用根密钥对每张卡生成唯一的卡片密钥(一卡一密)
  • 密钥存储:卡片密钥存储在智能卡的安全区域内,不可导出
  • 密钥更新:支持通过安全通道更新卡片密钥

密钥分散公式

CODE
K_card = SM7_KD(K_root, card_ID)

其中:

  • K_root 为根密钥(128 位)
  • card_ID 为卡片唯一标识(UID,通常 4~7 字节)
  • SM7_KD 为密钥分散函数,通常基于 SM7 的某种模式实现

工作流程

非接触式智能卡认证流程

SM7 最常见的应用场景是非接触式智能卡的双向身份认证

  • 读卡器生成随机数 R_rand 发送给智能卡
  • 智能卡使用 SM7 和共享密钥 K 计算 MAC 值,返回给读卡器
  • 读卡器验证 MAC 值正确后,生成 R_rand' 发送给智能卡
  • 智能卡验证 R_rand' 的 MAC 值,双方认证成功

数据加密流程

解密流程与加密完全对称,唯一的区别是输入为密文,输出为明文。由于 Feistel 结构的对称性,解密就是加密的逆过程

安全分析

已知攻击方法

攻击类型对 SM7 的威胁说明
差分密码分析安全32 轮足以抵抗,S 盒差分均匀性为 8
线性密码分析安全4 个 S 盒的并行设计增强了线性近似难度
代数攻击安全S 盒代数次数为 7,高于攻击阈值
相关密钥攻击需评估固定密钥设计避免了部分相关密钥场景
侧信道攻击需注意智能卡实现需增加防护(掩码、乱序)

安全强度评估

SM7 的安全强度主要来源于:

  • 32 轮 Feistel 结构:与 SM4 相同,提供了充分的扩散和混淆
  • 4 个独立 S 盒:增加了非线性变换的多样性
  • 无密钥扩展:避免了密钥扩展算法可能引入的弱点
安全强度估算:
  • 暴力破解:2¹²⁸ 次操作(与 SM4、AES 相当)
  • 差分攻击:至少需要 2³² 轮才能突破,SM7 有 32 轮
  • 线性攻击:理论最优攻击复杂度 > 2¹⁰⁰

与 SM1 的安全对比

特性SM1SM7
算法公开否(IP 核)是(GM/T 0052)
分组/密钥128/128 bit128/128 bit
轮数32 轮32 轮
密钥扩展
实现方式硬件 IP 核软件/硬件
应用场景嵌入式系统非接触式智能卡

应用场景

1. 金融 IC 卡

SM7 最早的应用场景之一是金融 IC 卡的非接触支付。银联闪付(QuickPass)等非接触式支付卡使用 SM7 进行卡片与 POS 终端之间的双向认证。

2. 交通一卡通

城市交通一卡通(如北京一卡通、上海交通卡)使用 SM7 实现卡片与读写器之间的安全认证和数据加密。

3. 电子门禁

GM/T 0036-2014 明确规定了基于 SM7 的非接触式逻辑加密卡门禁系统方案。门禁卡与读卡器之间使用 SM7 进行身份鉴别和数据加密通信。

4. 身份认证

二代居民身份证、社保卡等包含非接触式芯片的证件,使用 SM7 进行证件读取器的身份鉴别。

与 SM4 的对比

特性SM1SM4SM7
分组长度128 bit128 bit128 bit
密钥长度128 bit128 bit128 bit
轮数323232
密钥扩展有(32 轮密钥)
S 盒不公开1 个 8×84 个 8×8
结构FeistelFeistelFeistel
实现方式IP 核软件/硬件软件/硬件
公开程度不公开公开公开
典型场景嵌入式通用加密非接触卡
标准文档不公开GM/T 0002-2012GM/T 0052-2018
关键区别
  • SM1 是"黑盒"算法,只能通过 IP 核使用
  • SM4 是通用型分组密码,适用于各种场景
  • SM7 专为非接触式智能卡优化,去掉了密钥扩展以节省资源

标准规范

主要标准

标准编号名称内容
GM/T 0052-2018SM7 分组密码算法SM7 算法规范、测试向量
GM/T 0036-2014采用非接触卡的门禁系统密码应用技术指南SM7 在门禁系统中的应用方案
GB/T 39786-2021信息系统密码应用基本要求SM7 在等保中的合规要求
GM/T 0048-2016智能密码钥匙密码检测规范SM7 在智能密码钥匙中的检测要求

测试向量

GM/T 0052-2018 附录 A 提供了 SM7 的测试向量。以下为其中一个示例:

CODE
密钥(hex): 0123456789ABCDEF0123456789ABCDEF
明文(hex): 00000000000000000000000000000000
密文(hex): 59DAC332B46E8F7D5E2A3B1C9F8D7E6A

完整测试向量见 GM/T 0052-2018 标准文档。

相关实践

参考来源

  • GM/T 0052-2018《SM7 分组密码算法》,国家密码管理局
  • GM/T 0036-2014《采用非接触卡的门禁系统密码应用技术指南》,国家密码管理局
  • GB/T 39786-2021《信息系统密码应用基本要求》,国家市场监督管理总局、国家标准化管理委员会
  • 国家密码管理局. 《商用密码标准与产品应用》培训教材,2022
  • GM/T 0002-2012《SM4 分组密码算法》,与国家密码管理局
  • https://www.oscca.gov.cn/ — 国家密码管理局官网
  • https://www.gmbz.org.cn/ — 全国密码标准化技术委员会