ZUC 是什么
ZUC(祖冲之)是我国自主设计的序列密码算法,2012 年发布为密码行业标准 GM/T 0001,后被 3GPP 采纳为 128-EEA3(空口加密)与 128-EIA3(完整性保护)算法,用于 4G/5G 用户面加密与信令完整性校验。算法分三层:31 级线性反馈移位寄存器(LFSR,定义在 GF(2^31-1) 上)、比特重组层与非线性函数 F。运行时先执行 32 拍初始化并丢弃输出,之后每拍吐出一个 32 位密钥字,与明文异或即得密文。
基本信息
| 标准编号 | GM/T 0001(序列密码算法) |
|---|---|
| 国际标准 | 3GPP 128-EEA3 / 128-EIA3 |
| 内部结构 | LFSR + 比特重组 + 非线性函数 F |
| 密钥与 IV | 均为 128 位 |
| 输出 | 32 位密钥字序列;完整性模式生成 32 位 MAC |
| 常见载体 | 移动终端协议栈、通信模组、基站设备 |
典型使用场景
- 空口加密:终端与基站之间用 EEA3 保护用户面数据,防止空中接口被窃听。
- 信令完整性:用 EIA3 校验信令消息,阻止中间人篡改或伪造。
- 合规选型:通信模组、终端芯片是否支持 ZUC,是国内运营商入网测试的常见项。
- 实现自检:用标准附录的测试向量验证软硬件实现,逐比特比对加解密结果。
- 密码方案报审:商密合规项目需要说明 ZUC 的使用位置、密钥来源与密钥管理流程。
参数与运行流程
参数与运行流程
输入:128 位密钥 + 128 位初始向量(IV)
输出:32 位密钥字,按需截取为字节流后与明文异或
初始化:LFSR 与 F 交互运行 32 拍,输出全部丢弃
工作阶段:每拍输出一个密钥字;完整性模式另按消息位宽生成 MAC
密钥与 IV 相同则密钥流完全相同:IV 复用会直接暴露明文异或关系
嵌入设备实现时 S 盒与常量按标准原文取用,不要自行改写组成部件读法
| 部件 | 作用 | 关键点 |
|---|---|---|
| LFSR | 31 级移位寄存器,每拍推进新状态 | 状态运行在 GF(2^31-1) 上,须保持非零 |
| 比特重组 BR | 从 LFSR 状态抽取 128 位送给 F | 把线性状态非线性地拼接起来 |
| 非线性函数 F | 含 S 盒与线性变换,产生密钥字 | 决定算法的混淆能力 |
| S 盒 | 8×8 字节代换表 | 按常量表使用,改动后与对端不同步 |
业务系统通常不直接调用 ZUC:手机、模组与基站由 3GPP 协议栈和基带固件统一实现,上层只配置算法优先级。只有在密码库或专用设备集成时才直接调用,此时应选用取得商用密码检测认证的实现。
软件实现要防侧信道:S 盒查表的缓存访问模式、分支与内存访问都可能在共享硬件上泄露密钥相关信息,高安全场景应使用常数时间实现或硬件密码模块。