A5/1 流密码算法的密钥流生成过程
题目描述
A5/1 是用于 GSM 移动通信系统(2G 网络)中语音数据加密的流密码算法。它基于三个线性反馈移位寄存器(LFSR),并通过一种称为“钟控”的机制控制它们的移位。算法的核心是密钥流生成过程:给定一个 64 比特的会话密钥和一个 22 比特的帧号(用于每帧生成不同的密钥流),如何生成 228 比特的密钥流(用于加密 228 比特的语音数据帧)?本题将详细解释 A5/1 的密钥流生成过程,包括初始化、钟控机制和输出生成。
解题过程
1. 算法概述
A5/1 由三个 LFSR 组成,长度分别为 19、22 和 23 比特(总长度 64 比特)。每个 LFSR 有特定的反馈多项式,决定新移入位的计算方式。算法分为两个阶段:
- 初始化阶段:用会话密钥和帧号初始化三个 LFSR。
- 密钥流生成阶段:在钟控机制下运行 LFSR,生成密钥流比特。
我们将逐步展开这两个阶段。
2. 参数定义
- 三个 LFSR 记作 R1、R2、R3,长度和反馈多项式如下(比特编号从右向左,0 是最低位):
- R1:长度 19 比特,反馈多项式 \(x^{19} + x^{18} + x^{17} + x^{14} + 1\)。
新移入位 = R1[18] ⊕ R1[17] ⊕ R1[16] ⊕ R1[13](即对应抽头异或)。 - R2:长度 22 比特,反馈多项式 \(x^{22} + x^{21} + 1\)。
新移入位 = R2[21] ⊕ R2[20]。 - R3:长度 23 比特,反馈多项式 \(x^{23} + x^{22} + x^{21} + x^{8} + 1\)。
新移入位 = R3[22] ⊕ R3[21] ⊕ R3[20] ⊕ R3[7]。
- R1:长度 19 比特,反馈多项式 \(x^{19} + x^{18} + x^{17} + x^{14} + 1\)。
- 会话密钥 Kc:64 比特(在 GSM 中实际为 54 比特有效位,后 10 比特补 0,但算法按 64 比特处理)。
- 帧号 Fn:22 比特(每帧不同)。
3. 初始化阶段
目标:将 64 比特会话密钥和 22 比特帧号混合,设置三个 LFSR 的初始状态。
步骤 3.1:全部寄存器清零
将 R1、R2、R3 的所有比特设为 0。
步骤 3.2:密钥与帧号混合
进行 64 轮操作,每轮 i(i 从 0 到 63):
- 计算密钥比特:\(k_i = (Kc \gg i) \& 1\)(Kc 的第 i 比特)。
- 计算帧号比特:\(f_i = (Fn \gg i) \& 1\)(Fn 的第 i 比特,仅 i=0..21 有效,超出则 \(f_i = 0\))。
- 计算混合比特:\(m_i = k_i ⊕ f_i\)。
- 对每个 LFSR,计算其反馈位(feedback bit):
- R1_fb = R1[18] ⊕ R1[17] ⊕ R1[16] ⊕ R1[13]。
- R2_fb = R2[21] ⊕ R2[20]。
- R3_fb = R3[22] ⊕ R3[21] ⊕ R3[20] ⊕ R3[7]。
- 将每个 LFSR 右移一位(最低位移出,最高位用新值填充),新填充值 = 原反馈位 ⊕ \(m_i\) ⊕ 原最低位(即移出位)。
- 具体来说:
R1_new_bit = R1_fb ⊕ \(m_i\) ⊕ R1[0]。
R2_new_bit = R2_fb ⊕ \(m_i\) ⊕ R2[0]。
R3_new_bit = R3_fb ⊕ \(m_i\) ⊕ R3[0]。
然后将各自 LFSR 右移,并将最高位设为对应的 new_bit。
- 具体来说:
这一步确保了密钥和帧号充分混合到寄存器状态中。
4. 密钥流生成阶段
目标:生成 228 比特密钥流。在生成每个密钥流比特前,需通过钟控机制决定哪些 LFSR 移位。
步骤 4.1:钟控机制
每个 LFSR 有一个特定的“钟控位”(用于决定是否移位):
- R1 的钟控位:第 8 比特(即 R1[8])。
- R2 的钟控位:第 10 比特(即 R2[10])。
- R3 的钟控位:第 10 比特(即 R3[10])。
比较三个钟控位的值,取多数值(0 或 1)。只有那些钟控位等于多数值的 LFSR 才进行移位(即“服从多数”规则)。
例子:若 R1[8]=1, R2[10]=1, R3[10]=0,则多数值为 1,因此 R1 和 R2 移位,R3 不移位。
步骤 4.2:单轮密钥流比特生成
对于每一轮 t(t 从 0 到 227,生成 228 比特):
- 根据当前三个 LFSR 的钟控位,计算多数值,决定哪些 LFSR 移位。
- 对需要移位的 LFSR,计算其反馈位(同上),右移一位,最高位填入反馈位。不移位的 LFSR 保持不动。
- 计算输出比特:取三个 LFSR 的最低位进行异或:
\(z_t = R1[0] ⊕ R2[0] ⊕ R3[0]\)。 - 将 \(z_t\) 作为当前密钥流比特输出。
重复 228 轮,得到 228 比特密钥流,用于加密该帧的 228 比特数据(加密方式为简单的逐比特异或)。
5. 过程总结
- 初始化:将会话密钥和帧号混合,通过 64 轮更新将 LFSR 置于初始状态。
- 生成:进行 228 轮,每轮先根据钟控位决定移位的 LFSR,移位后输出三个 LFSR 最低位的异或值。
- 加密:密钥流与明文逐比特异或得到密文。
关键点说明
- 钟控机制:使 LFSR 的步调不规则,增加线性复杂度,防止简单攻击。
- 安全性:A5/1 已被证明存在严重弱点,已知有快速相关攻击、时间-存储权衡攻击等,实际已不安全。但在历史上因其硬件效率高而被 GSM 采用。
- 与 A5/2 区别:A5/2 是弱化版本,钟控机制更简单,已被彻底攻破。
通过以上步骤,你应能清晰理解 A5/1 如何从密钥和帧号生成密钥流。如有具体步骤疑问,可进一步讨论。