ZUC 序列密码算法原理与 LTE 应用剖析

算法原理 · 2026-06-26

概述

序列密码(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 函数的输入
这种设计思想与 SNOW 3G(欧洲 4G 安全算法)和 AES-CTR 有相似之处,但 ZUC 在具体组件的选择上有其独特之处。

设计目标

  • 安全强度: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 的递推关系由以下公式定义:

CODE
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 位输出字,同时更新状态
LFSR 的周期为 2^31 - 1(约 2.1 × 10^9),远大于任何实际通信中的数据量,因此在单次会话中不会重复。

2. 非线性函数 F

F 函数引入非线性,是 ZUC 安全性的核心保障。F 函数包含两个 8 位的 S 盒(S₀ 和 S₁)和一个线性变换。

F 函数的输入为三个 32 位字(x₀, x₁, x₂),输出为一个 32 位字:

CODE
F(x₀, x₁, x₂) = (x₀ ⊕ ROTL(S₁, 24) ⊕ ROTL(S₀, 16)) ·₂ x₁

其中:

  • S₀ 和 S₁ 是两个 8 位输入/输出的 S 盒(替换盒)
  • ROTL 表示循环左移
  • ·₂ 表示模 2^32 乘法
S 盒的设计

ZUC 的 S 盒采用 AES S 盒作为基础,通过仿射变换生成。具体构造方式为:

CODE
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 状态中提取):

CODE
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:

CODE
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 字节),表示为:

CODE
K = k₀ || k₁ || ... || k₁₅    (kᵢ 为 8 位字节)
IV = iv₀ || iv₁ || ... || iv₁₅

初始化步骤

  • 密钥加载:将密钥和 IV 的每个字节加载到 LFSR 的 16 个寄存器单元中:
CODE
s₀  = k₀ || 0x00 || k₁ || k₂
s₁  = k₃ || 0x00 || k₄ || k₅
...
s₁₅ = k₁₃ || 0x00 || k₁₄ || k₁₅

每个寄存器单元为 31 位(4 字节 - 1 位,最高位补 0)。

  • IV 注入:将 IV 与 LFSR 状态进行混合:
CODE
s₀ = s₀ ⊕ iv₀ || 0x00 || iv₁ || iv₂
...
  • 运行 32 步初始化:执行 32 步 LFSR 更新(无输出),使密钥和 IV 充分扩散到 LFSR 状态中。

128-EEA1:LTE 机密性算法

128-EEA1 是基于 ZUC 的机密性算法,用于保护 LTE 用户面和控制面数据。

算法参数

参数长度说明
KEY128 位加密密钥(从 KASME 派生)
COUNT32 位帧号/包计数器
BEARER5 位无线承载标识
DIRECTION1 位上行/下行方向
LENGTH可变明文长度

密钥流生成

128-EEA1 使用 ZUC 生成密钥流:

  • 构造 IV:IV = COUNT || BEARER || DIRECTION || 0...0(填充至 128 位)
  • 使用 KEY 和 IV 初始化 ZUC
  • 生成 ⌈LENGTH/32⌉ 个 32 位密钥字
  • 将密钥字与明文逐位异或

加密流程

CODE
密钥流 = 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 计算

CODE
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-256 主要用于高安全等级场景(如政府通信、军事通信),在 LTE-Advanced 和 5G 非独立组网中有所应用。

安全性分析

已知攻击

对 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-A91 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 对比

特性ZUCSNOW 3G
设计国家中国欧洲
密钥长度128 位128 位
结构LFSR + F + BRLFSR + FSM
软件性能~200 Mbps~150 Mbps
硬件面积~30K 门~35K 门
标准GM/T 0001-20123GPP 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 的完整性算法
5G 安全要求中,NEA2(AES-CTR)和 NIA2(AES-CMAC)是优先推荐的算法,但 ZUC 系列算法仍在支持范围内,特别是在中国部署的 5G 网络中。

总结

ZUC 序列密码算法是中国商用密码体系中的重要组成部分,其设计平衡了安全性、硬件效率和软件性能。通过 LFSR 提供长周期和良好统计特性,通过 F 函数引入非线性,通过比特重组实现充分扩散,ZUC 在移动通信安全领域发挥了关键作用。

随着 5G 和物联网的发展,ZUC 及其后续演进算法将继续在通信安全中扮演重要角色。理解 ZUC 的设计原理和安全特性,对于密码工程师和通信安全从业者都具有重要价值。

参考来源

- 注:若链接失效,可在 oscca.gov.cn 搜索"GM/T 0001"获取最新地址

相关实践

[^1]: 国家密码管理局. GM/T 0001-2012《祖冲之序列密码算法》. 2012 年 3 月. [^2]: 3GPP. TS 35.202: Specification of the 3GPP Confidentiality and Integrity Algorithms. 2012. [^3]: 3GPP. TS 33.401: 3GPP System Architecture Evolution (SAE): Security architecture. 2019. [^4]: (若链接失效,可在 oscca.gov.cn 搜索"GM/T 0001"获取最新地址) [^5]: