ZUC 序列密码算法原理与 LTE 应用剖析
概述
序列密码(Stream Cipher)是密码学中最古老的加密形式之一。与分组密码不同,序列密码不需要填充(padding),可以逐字节或逐字(word)加密数据流,天然适合对实时性要求高、数据长度不固定的通信场景。
ZUC(祖冲之算法)是中国国家密码管理局发布的商用序列密码算法,标准编号为 GM/T 0001-2012。它是中国自主设计的第一个公开序列密码算法,也是 3GPP(第三代合作伙伴计划)4G LTE 空口安全算法的核心组件。
ZUC 的设计目标非常明确:在硬件实现效率(门电路面积)和软件实现效率(吞吐量)之间取得平衡,同时提供 128 位的安全强度。理解 ZUC,不仅是理解中国商用密码体系的重要一环,也是理解移动通信安全基础的关键。
算法设计思想
ZUC 采用了一种模块化设计,由三个独立的组件构成:
- 线性移位寄存器(LFSR):提供长周期和良好的统计特性
- 非线性函数 R(Bit Reorganization + F 函数):引入非线性,破坏线性结构
- 比特重组(Bit Reorganization):将 LFSR 状态重新排列,产生输出和 F 函数的输入
设计目标
- 安全强度:128 位密钥,提供至少 2^128 的安全边界
- 软件性能:在通用处理器上达到数十 Mbps 的吞吐
- 硬件效率:低门电路面积,适合移动终端实现
- 灵活性:支持 128 位和 256 位两种密钥长度(ZUC-128 和 ZUC-256)
ZUC 算法结构
ZUC 的整体结构分为三层:LFSR 层、非线性函数 F、比特重组层。
1. LFSR(线性移位寄存器)
LFSR 是 ZUC 的核心组件,提供算法的周期性(period)和伪随机性基础。
ZUC 的 LFSR 定义在有限域 GF(2^31 - 1) 上,其中 2^31 - 1 = 2147483647 是一个梅森素数(Mersenne prime)。
LFSR 包含 16 个 31 位的寄存器单元(s₀, s₁, ..., s₁₅),每个单元在 GF(2^31 - 1) 上运算。
LFSR 的递推关系由以下公式定义:
s₁₆ = (2^15 · s₁₅ + 2^17 · s₁₄ + 2^21 · s₁₁ + 2^20 · s₇ + (1 + 2^8) · s₀) mod (2^31 - 1)其中所有运算都在 GF(2^31 - 1) 上进行。
LFSR 的初始状态由密钥(Key)和初始向量(IV)通过初始化过程加载。
LFSR 的工作模式:
- 初始化模式:加载密钥和 IV,运行 32 步(无输出)
- 工作模式:每步产生一个 32 位输出字,同时更新状态
2. 非线性函数 F
F 函数引入非线性,是 ZUC 安全性的核心保障。F 函数包含两个 8 位的 S 盒(S₀ 和 S₁)和一个线性变换。
F 函数的输入为三个 32 位字(x₀, x₁, x₂),输出为一个 32 位字:
F(x₀, x₁, x₂) = (x₀ ⊕ ROTL(S₁, 24) ⊕ ROTL(S₀, 16)) ·₂ x₁其中:
- S₀ 和 S₁ 是两个 8 位输入/输出的 S 盒(替换盒)
- ROTL 表示循环左移
- ·₂ 表示模 2^32 乘法
ZUC 的 S 盒采用 AES S 盒作为基础,通过仿射变换生成。具体构造方式为:
S(x) = A · (AES_S(x)) ⊕ c其中 A 是一个 8 × 8 的二进制矩阵,c 是一个 8 位常数向量。
S 盒的设计目标是:
- 高非线性度(Nonlinearity ≥ 112)
- 低差分均匀性(Differential Uniformity ≤ 4)
- 代数次数 ≥ 7
- 无固定点(S(x) ≠ x 对所有 x)
3. 比特重组(Bit Reorganization)
比特重组层将 LFSR 的 16 个 32 位寄存器单元重新排列,产生 4 个 32 位的输出字,供 F 函数和最终输出使用。
重组规则(从 LFSR 状态中提取):
x₀ = (s₀^L || s₁^R) // 取 s₀ 的高 16 位和 s₁ 的低 16 位
x₁ = (s₂^L || s₃^R)
x₂ = (s₄^L || s₅^R)
x₃ = (s₆^L || s₇^R)其中上标 L 表示高 16 位,R 表示低 16 位。
4. 完整算法流程
ZUC 每步产生一个 32 位的密钥字 Z:
1. 比特重组:从 LFSR 状态中提取 x₀, x₁, x₂
2. 计算 F 函数:W = F(x₀, x₁, x₂)
3. 输出密钥字:Z = W ⊕ x₃
4. 更新 LFSR:运行一步 LFSR 递推初始化过程
ZUC 的初始化将 128 位密钥 K 和 128 位初始向量 IV 加载到 LFSR 状态中。
密钥和 IV 格式
密钥 K 和 IV 均为 128 位(16 字节),表示为:
K = k₀ || k₁ || ... || k₁₅ (kᵢ 为 8 位字节)
IV = iv₀ || iv₁ || ... || iv₁₅初始化步骤
- 密钥加载:将密钥和 IV 的每个字节加载到 LFSR 的 16 个寄存器单元中:
s₀ = k₀ || 0x00 || k₁ || k₂
s₁ = k₃ || 0x00 || k₄ || k₅
...
s₁₅ = k₁₃ || 0x00 || k₁₄ || k₁₅每个寄存器单元为 31 位(4 字节 - 1 位,最高位补 0)。
- IV 注入:将 IV 与 LFSR 状态进行混合:
s₀ = s₀ ⊕ iv₀ || 0x00 || iv₁ || iv₂
...- 运行 32 步初始化:执行 32 步 LFSR 更新(无输出),使密钥和 IV 充分扩散到 LFSR 状态中。
128-EEA1:LTE 机密性算法
128-EEA1 是基于 ZUC 的机密性算法,用于保护 LTE 用户面和控制面数据。
算法参数
| 参数 | 长度 | 说明 |
|---|---|---|
| KEY | 128 位 | 加密密钥(从 KASME 派生) |
| COUNT | 32 位 | 帧号/包计数器 |
| BEARER | 5 位 | 无线承载标识 |
| DIRECTION | 1 位 | 上行/下行方向 |
| LENGTH | 可变 | 明文长度 |
密钥流生成
128-EEA1 使用 ZUC 生成密钥流:
- 构造 IV:
IV = COUNT || BEARER || DIRECTION || 0...0(填充至 128 位) - 使用 KEY 和 IV 初始化 ZUC
- 生成 ⌈LENGTH/32⌉ 个 32 位密钥字
- 将密钥字与明文逐位异或
加密流程
密钥流 = ZUC(KEY, IV, LENGTH)
密文 = 明文 ⊕ 密钥流解密过程与加密相同(异或操作的对称性)。
128-EIA1:LTE 完整性算法
128-EIA1 是基于 ZUC 的完整性算法,用于验证 LTE 信令消息的完整性。
算法原理
128-EIA1 使用 ZUC 生成消息认证码(MAC):
- 构造 IV:
IV = COUNT || BEARER || DIRECTION || 0...0 - 初始化 ZUC
- 对消息的每一位(bit),ZUC 产生一个 32 位密钥字
- 根据消息位选择密钥字的特定比特
- 将所有选中的比特进行异或,得到 32 位 MAC-I
MAC 计算
T = 0
for i = 0 to LENGTH-1:
if MESSAGE[i] == 1:
T = T ⊕ Z_i // Z_i 是第 i 步 ZUC 的输出字
MAC-I = T ⊕ Z_{LENGTH} // 最终异或安全特性
- 不可伪造性:不知道密钥的情况下,无法构造有效的 MAC
- 抗重放:COUNT 参数确保每条消息的 MAC 独立
- 消息完整性:任何消息比特的修改都会以 50% 的概率翻转 MAC 的每一位
ZUC-256:增强版本
ZUC-256 是 ZUC 的增强版本,使用 256 位密钥和 256 位 IV,提供更高的安全强度。
主要变化
- 密钥长度:256 位(32 字节)
- IV 长度:256 位
- LFSR 状态:扩展到 32 个寄存器单元
- 输出:每步产生 64 位密钥字
安全性分析
已知攻击
对 ZUC 的安全性分析主要集中在以下几个方面:
#### 1. 相关攻击(Correlation Attack)
LFSR 的线性特性使其容易受到相关攻击。攻击者尝试利用输出序列与 LFSR 状态之间的统计相关性恢复密钥。
防护:F 函数的非线性破坏了输出与 LFSR 状态之间的线性关系。分析表明,ZUC 对相关攻击的安全边际充足。
#### 2. 代数攻击(Algebraic Attack)
将密码系统建模为多元多项式方程组,通过求解方程组恢复密钥。
防护:ZUC 的 S 盒具有高代数次数(≥7),使得代数攻击的复杂度极高。
#### 3. 时间-内存权衡攻击(Time-Memory Tradeoff)
通过预计算和查表来加速密钥恢复。
防护:128 位密钥空间使得此类攻击不现实(2^128 次操作)。
#### 4. 侧信道攻击(Side-Channel Attack)
通过分析功耗、电磁辐射或执行时间推断密钥信息。
防护:硬件实现中采用掩码(masking)和隐藏(hiding)技术。
安全强度评估
截至 2026 年,ZUC 没有已知的实际攻击(practical attack)能够恢复完整密钥。最佳理论攻击的复杂度仍远高于 2^100 次操作,保持了充足的安全边际。
性能特征
软件实现
在通用处理器(ARM Cortex-A 系列)上,ZUC 的软件实现性能:
| 平台 | 时钟频率 | 吞吐量 | 代码大小 |
|---|---|---|---|
| ARM Cortex-A9 | 1 GHz | ~200 Mbps | ~2 KB |
| Intel x86 (32 位) | 1 GHz | ~300 Mbps | ~3 KB |
硬件实现
ZUC 的硬件实现效率极高:
- 门电路面积:约 30,000 等效门(在 65nm 工艺下)
- 工作频率:可达 500 MHz
- 吞吐量:单实例可达 16 Gbps(500 MHz × 32 位)
与 SNOW 3G 对比
| 特性 | ZUC | SNOW 3G |
|---|---|---|
| 设计国家 | 中国 | 欧洲 |
| 密钥长度 | 128 位 | 128 位 |
| 结构 | LFSR + F + BR | LFSR + FSM |
| 软件性能 | ~200 Mbps | ~150 Mbps |
| 硬件面积 | ~30K 门 | ~35K 门 |
| 标准 | GM/T 0001-2012 | 3GPP TS 35.202 |
ZUC 在 5G 中的应用
在 5G 独立组网(SA)中,ZUC 仍然是可选的完整性算法。5G 安全架构(TS 33.501)支持以下算法:
- 128-NEA1:基于 SNOW 3G 的机密性算法
- 128-NEA2:基于 AES-CTR 的机密性算法
- 128-NEA3:基于 ZUC 的机密性算法
- 128-NIA1:基于 SNOW 3G 的完整性算法
- 128-NIA2:基于 AES-CMAC 的完整性算法
- 128-NIA3:基于 ZUC 的完整性算法
总结
ZUC 序列密码算法是中国商用密码体系中的重要组成部分,其设计平衡了安全性、硬件效率和软件性能。通过 LFSR 提供长周期和良好统计特性,通过 F 函数引入非线性,通过比特重组实现充分扩散,ZUC 在移动通信安全领域发挥了关键作用。
随着 5G 和物联网的发展,ZUC 及其后续演进算法将继续在通信安全中扮演重要角色。理解 ZUC 的设计原理和安全特性,对于密码工程师和通信安全从业者都具有重要价值。
参考来源
- GM/T 0001-2012 祖冲之序列密码算法(国家密码管理局,2012 年)
- 3GPP TS 35.202 - Specification of the 3GPP Confidentiality and Integrity Algorithms UEA2 & UIA2(ZUC 在 3GPP 中的使用规范)
- 3GPP TS 33.501 - Security architecture and procedures for 5G system(5G 安全架构)
- 3GPP TS 33.401 - 3GPP System Architecture Evolution (SAE): Security architecture(LTE 安全架构)
相关实践
- 国密算法概述与标准体系 — 国密算法全景
- SM4 分组密码算法原理与实现 — 国密分组密码算法
- 密码学哈希函数原理(Merkle-Damgård、海绵结构) — 哈希函数设计原理