ZUC算法
ZUC算法中文称作祖冲之算法,其以中国古代著名数学家祖冲之的拼音(ZU Chongzhi)首字母命名,是中国自主设计的流密码算法,其设计原理和工作模式体现了现代密码学中“混淆-扩散”的核心思想,同时通过三层架构的协同作用实现高效安全的密钥流生成。是移动通信 3GPP加密算法128-EEA3和完整性算法128-EIA3的核心。以下从技术细节展开说明:
一、设计原理:三层架构的协同作用

ZUC分为3层逻辑, 顶层包含16个31位的线性反馈移位寄存器, 中间层是用于重组的4个32bit值,底层是一个非线性的函数。
1. 线性反馈移位寄存器(LFSR):高周期序列的基石
- 结构与运算:LFSR由16个31位寄存器单元组成,定义在素域GF(2³¹-1)上,特征多项式为16次本原多项式。其更新规则为:
[
s_{16} = (2^{15}s_{15} + 2^{17}s_{13} + 2^{21}s_{10} + 2^{20}s_4 + (1+2^8)s_0) \mod (2^{31}-1)
]
该设计使LFSR生成周期约为2⁴⁹⁶的m序列,具有优良的统计特性和抗线性攻击能力。 - 模式切换:LFSR分为初始化模式和工作模式。初始化时接收非线性函数F的输出(舍弃最低位)作为输入,通过32轮迭代实现状态随机化;工作模式下无输入,自主更新状态。
2. 比特重组(BR):线性结构的破坏者
- 数据抽取与重组:从LFSR的16个寄存器中抽取128位,重新组合为4个32位字(X₀、X₁、X₂、X₃)。具体规则为:
[
\begin{align*}
X_0 &= s_{15} \text{的高16位} | s_{14} \text{的低16位} \
X_1 &= s_{11} \text{的低16位} | s_9 \text{的高16位} \
X_2 &= s_7 \text{的低16位} | s_5 \text{的高16位} \
X_3 &= s_2 \text{的低16位} | s_0 \text{的高16位}
\end{align*}
]
前3个字(X₀、X₁、X₂)输入非线性函数F,第4个字X₃直接参与密钥流生成。 - 设计目标:通过跨寄存器的位重组,破坏LFSR在素域上的线性结构,为后续非线性处理奠定基础。
3. 非线性函数F:抗攻击能力的核心
- 组件与运算:F函数包含4个8×8的S盒(S₀、S₁、S₀、S₂,其中S₂=S₀,S₃=S₁)和线性变换L。其运算步骤为:
- 输入预处理:将X₀与R₁异或,结果与R₂进行模2³²加法,得到中间值W。
- 分支处理:
[
\begin{align*}
W_1 &= R_1 + X_1 \mod 2^{32} \
W_2 &= R_2 \oplus X_2
\end{align*}
] - S盒变换:将W₁的低16位与W₂的高16位拼接后,通过线性变换L₁扩散,再输入S盒;同理处理W₂的低16位与W₁的高16位,通过L₂变换和S盒。
- 状态更新:
[
\begin{align*}
R_1 &= S(L_1(W_{1L} | W_{2H})) \
R_2 &= S(L_2(W_{2L} | W_{1H}))
\end{align*}
]
- 安全特性:S盒提供非线性混淆,线性变换L通过循环移位和异或实现高扩散(如L₁的移位参数为2、10、18、24),有效抵御差分攻击和线性分析。
二、算法介绍
ZUC包含机密性和完整性两种算法。
一、机密性算法(128-EEA3):密钥流驱动的逐位加密
1. 核心原理
128-EEA3采用流密码加密机制,通过ZUC生成的伪随机密钥流与明文逐位异或,实现数据加密。其核心逻辑为:
[
\text{密文} \ C = P \oplus Z
]
其中,(P)为明文,(Z)为密钥流。解密时重复相同过程:(P = C \oplus Z)。
2. 密钥流生成流程
- 初始化阶段:
使用128位加密密钥(K_{\text{enc}})和128位初始向量(IV)对LFSR进行32轮状态扰动,确保密钥流与初始参数深度关联。初始化完成后,先执行一次工作模式操作,丢弃首个密钥流以消除残留影响。 - 工作阶段:
每周期生成32位密钥字(Z):- LFSR更新:自主计算新状态(s_{16}),确保序列周期长达(2^{496})。
- 比特重组(BR):从LFSR抽取128位,重组为4个32位字(X_0 \sim X_3)。
- 非线性函数F:输入(X_0, X_1, X_2)生成32位输出(W),并更新记忆单元(R_1, R_2)。
- 密钥流生成:(Z = X_3 \oplus W),确保每一位密钥流与明文一一对应。
3. 安全性保障
- IV唯一性:(IV)由COUNT(计数器)、BEARER(承载标识)、DIRECTION(传输方向)等参数拼接生成,确保每次通信的密钥流不同,抵抗重放攻击。
- 密钥流随机性:LFSR在素域(GF(2^{31}-1))上的设计和非线性函数F的混淆扩散,使密钥流难以预测。
二、完整性算法(128-EIA3):哈希-密钥流结合的MAC生成
1. 核心原理
128-EIA3通过消息认证码(MAC)验证数据完整性,其核心逻辑为:
[
\text{MAC} = \text{Hash}(M \oplus Z) \oplus Z_{\text{final}}
]
其中,(M)为消息,(Z)为密钥流,(Z_{\text{final}})为最终密钥字。实际实现中采用迭代哈希与密钥流结合的方式,确保抗篡改能力。
2. MAC生成流程
- 输入参数:
128位完整性密钥(K_{\text{int}})、(IV)、消息(M)及消息长度(L)(32位表示)。 - 具体步骤:
- 消息预处理:将(M)按32位分组,不足补0,得到(M_0, M_1, \dots, M_{m-1})。
- 初始化哈希状态:设置32位哈希值(H_0 = 0)。
- 迭代计算:
对每个分组(M_i),生成对应密钥字(Z_i),更新哈希状态:
[
H_{i+1} = (H_i \oplus M_i) + Z_i \mod 2^{32}
]
(加法运算增强非线性,异或操作确保对消息敏感)。 - 最终处理:
引入消息长度(L),计算最终哈希值:
[
T = (H_m \oplus L) + Z_m \mod 2^{32}
]
取(T)的低32位作为(\text{MAC})。
3. 安全性保障
- 密钥流关联:MAC的生成依赖密钥流(Z_i),确保攻击者无法在不掌握(K_{\text{int}})的情况下伪造消息。
- 长度验证:将消息长度(L)纳入计算,防止长度扩展攻击(即攻击者通过已知MAC伪造更长消息)。
三、机密性与完整性的协同设计
- 密钥分离机制:
加密和完整性使用独立密钥((K_{\text{enc}})和(K_{\text{int}})),降低单密钥泄露的风险。例如,在4G网络中,用户平面数据加密用(K_{\text{enc}}),控制平面信令完整性校验用(K_{\text{int}})。 - IV共享与唯一性:
两者使用相同(IV)生成方式(基于COUNT等参数),确保同一通信会话的加密与完整性保护同步。(IV)的唯一性由COUNT的单调递增性保证,每次通信使用不同(IV)。 - 效率优化:
密钥流生成模块(ZUC)被两者共享,减少重复计算。例如,在5G边缘节点中,加密和完整性校验可复用同一密钥流生成过程,降低处理延迟。
三、实际应用示例
- 4G LTE网络:
基站与手机通信时,128-EEA3对用户平面的语音、视频数据加密,128-EIA3对控制平面的鉴权消息生成MAC,确保信令未被篡改。 - 移动支付:
用户通过云闪付APP发送支付指令时,128-EEA3加密卡号和金额,128-EIA3生成MAC验证报文完整性,防止中间人攻击。
四、标准化与演进
- 国际标准:
128-EEA3和128-EIA3已纳入3GPP LTE(TS 35.221)和ISO/IEC 18033-4国际标准,成为全球通信安全的通用方案。 - 量子安全扩展:
升级版ZUC-256将密钥长度扩展至256位,增强抗量子攻击能力,计划用于5G和车联网等未来场景。
总结
ZUC的机密性和完整性算法通过密钥流异或加密和哈希-密钥流认证的组合,在保障数据安全的同时兼顾效率。其设计体现了现代密码学的核心原则:混淆-扩散(非线性函数F)、密钥分离(加密与完整性独立密钥)和初始化唯一性(动态IV)。这一架构不仅支撑了4G/5G网络的安全运行,也为物联网、金融支付等领域提供了可信赖的安全解决方案。
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。

博客地址: https://fishmwei.github.io
掘金主页: https://juejin.cn/user/2084329776486919