【密码学】3. 流密码
目录
- 流密码
- 流密码(序列密码)的基本概念
- 线性反馈移位寄存器(LFSR)
- 线性移位寄存器的一元多项式表示
- m 序列的伪随机性
- m 序列密码的破译
- 非线性序列
- 序列密码设计原则
- 重点总结
流密码
流密码(序列密码)的基本概念
-
核心要素
-
明文:记为xix_ixi(二元序列,取值 0 或 1),是待加密的原始数据。
-
密钥:记为ziz_izi(二元序列),由滚动密钥生成器产生,称为 “滚动密钥” 或 “密钥流”。
-
密文:记为yiy_iyi(二元序列),是加密后的结果。
-
加密变换:在 GF (2)(二元域)上,加密通过加法(即异或运算)实现:yi=xi⊕ziy_i = x_i \oplus z_iyi=xi⊕zi。
-
解密变换:同理,解密为xi=yi⊕zix_i = y_i \oplus z_ixi=yi⊕zi(因zi⊕zi=0z_i \oplus z_i = 0zi⊕zi=0)。
-
-
加法流密码体制模型
-
核心结构:包含 “安全信道”(传输初始密钥)、“滚动密钥生成器”(生成密钥流ziz_izi)、加密 / 解密模块(异或运算)。
-
密钥流生成器是流密码安全性的关键,需生成具有良好伪随机性的序列。
-
线性反馈移位寄存器(LFSR)
-
基本结构
-
由nnn个二元存储器(存储 0 或 1)和一个反馈函数f(a1,a2,…,an)f(a_1,a_2,\dots,a_n)f(a1,a2,…,an)组成,是生成密钥流的核心部件。
-
状态:任一时刻nnn个存储器的内容构成nnn维向量(a1,a2,…,an)(a_1,a_2,\dots,a_n)(a1,a2,…,an),共2n2^n2n种可能状态(排除全 0 状态时为2n−12^n - 12n−1种)。
-
反馈函数:nnn元布尔函数(输入输出均为 0 或 1),线性反馈移位寄存器(LFSR)的反馈函数为线性函数:f(a1,…,an)=c1a1⊕c2a2⊕⋯⊕cnanf(a_1,\dots,a_n) = c_1a_1 \oplus c_2a_2 \oplus \dots \oplus c_na_nf(a1,…,an)=c1a1⊕c2a2⊕⋯⊕cnan(ci∈{0,1}c_i \in \{0,1\}ci∈{0,1},且至少一个ci≠0c_i \neq 0ci=0,通常设cn=1c_n = 1cn=1)。
-
-
输出序列特性
-
输出序列{at}\{a_t\}{at}由初始状态和反馈函数决定,满足线性递推关系:an+k=c1an+k−1⊕c2an+k−2⊕⋯⊕cnaka_{n+k} = c_1a_{n+k-1} \oplus c_2a_{n+k-2} \oplus \dots \oplus c_na_kan+k=c1an+k−1⊕c2an+k−2⊕⋯⊕cnak。
-
周期:状态周期与输出序列周期一致,最大周期为2n−12^n - 12n−1(此时序列称为mmm序列)。
-
-
示例
-
3 级 LFSR:初始状态(1,0,1)(1,0,1)(1,0,1),反馈函数f=a1⊕a3f = a_1 \oplus a_3f=a1⊕a3,输出序列为1011101110…1011101110\dots1011101110…,周期为 4。
-
5 级 LFSR:初始状态(1,0,0,1,1)(1,0,0,1,1)(1,0,0,1,1),输出序列周期为 31(达到25−12^5 - 125−1,即mmm序列)。
-
线性移位寄存器的一元多项式表示
-
特征多项式
- 对于满足递推关系an+k=c1an+k−1⊕⋯⊕cnaka_{n+k} = c_1a_{n+k-1} \oplus \dots \oplus c_na_kan+k=c1an+k−1⊕⋯⊕cnak的 LFSR,其特征多项式定义为:p(x)=1+c1x+c2x2+⋯+cnxnp(x) = 1 + c_1x + c_2x^2 + \dots + c_nx^np(x)=1+c1x+c2x2+⋯+cnxn(cn=1c_n = 1cn=1)。
-
生成函数
-
序列{ai}\{a_i\}{ai}的生成函数为幂级数:A(x)=a1+a2x+a3x2+…A(x) = a_1 + a_2x + a_3x^2 + \dotsA(x)=a1+a2x+a3x2+…。
-
生成函数与特征多项式满足A(x)=ϕ(x)p(x)A(x) = \frac{\phi(x)}{p(x)}A(x)=p(x)ϕ(x),其中ϕ(x)\phi(x)ϕ(x)是次数≤n−1n-1n−1的多项式(由初始状态决定)。
-
-
多项式与序列的关系
-
若p(x)∣q(x)p(x) \mid q(x)p(x)∣q(x),则G(p(x))⊆G(q(x))G(p(x)) \subseteq G(q(x))G(p(x))⊆G(q(x))(G(p(x))G(p(x))G(p(x))是由p(x)p(x)p(x)生成的所有非零序列集合),即低阶 LFSR 生成的序列可由高阶 LFSR 生成。
-
多项式的周期:使p(x)∣(xp−1)p(x) \mid (x^p - 1)p(x)∣(xp−1)的最小ppp称为p(x)p(x)p(x)的周期。
-
序列周期r∣pr \mid pr∣p(ppp是特征多项式周期)。
-
-
m 序列与本原多项式
-
m 序列:周期达到2n−12^n - 12n−1的 LFSR 序列。
-
本原多项式:nnn次不可约多项式,且周期为2n−12^n - 12n−1。
-
序列{ai}\{a_i\}{ai}是mmm序列的充要条件是其特征多项式为nnn次本原多项式。
-
本原多项式的个数为ϕ(2n−1)/n\phi(2^n - 1)/nϕ(2n−1)/n(ϕ\phiϕ为欧拉函数),对任意nnn至少存在一个。
-
m 序列的伪随机性
-
伪随机序列的必要性
- 密钥流需具有伪随机性:截获部分序列无法预测后续,满足 “不可预测性”。
-
Golomb 随机性公设
-
① 周期内 0 与 1 的个数相差至多 1;
-
② 长为iii的游程占总游程的1/2i1/2^i1/2i,且等长游程中 0 和 1 的游程数相等;
-
③ 异相自相关函数为常数。
-
-
m 序列的伪随机性质
-
① 周期T=2n−1T = 2^n - 1T=2n−1内,0 的个数为2n−1−12^{n-1} - 12n−1−1,1 的个数为2n−12^{n-1}2n−1;
-
② 总游程数为2n−12^{n-1}2n−1;长为iii(1≤i≤n−21 \leq i \leq n-21≤i≤n−2)的游程有2n−i−12^{n-i-1}2n−i−1个(0 和 1 各半);1 个长为n−1n-1n−1的 0 游程和 1 个长为nnn的 1 游程;
-
③ 自相关函数:R(τ)={1τ=0modT−1/Tτ≠0modTR(\tau) = \begin{cases} 1 & \tau = 0 \mod T \\ -1/T & \tau \neq 0 \mod T \end{cases}R(τ)={1−1/Tτ=0modTτ=0modT,满足公设③。
-
m 序列密码的破译
-
破译原理
- 针对由 LFSR 生成的mmm序列密钥流,已知长为2n2n2n的明文 - 密文对(即密钥流片段z1,z2,…,z2nz_1, z_2, \dots, z_{2n}z1,z2,…,z2n),可求解 LFSR 的反馈系数c1,…,cnc_1, \dots, c_nc1,…,cn。
-
步骤
-
由密钥流片段构造nnn个连续状态:Sh=(zh,zh+1,…,zh+n−1)S_h = (z_h, z_{h+1}, \dots, z_{h+n-1})Sh=(zh,zh+1,…,zh+n−1)(h=1,2,…,n+1h = 1, 2, \dots, n+1h=1,2,…,n+1);
-
建立线性方程组:zh+n=c1zh+n−1⊕⋯⊕cnzhz_{h+n} = c_1z_{h+n-1} \oplus \dots \oplus c_nz_hzh+n=c1zh+n−1⊕⋯⊕cnzh;
-
用矩阵求解反馈系数:(cn,cn−1,…,c1)=(zn+1,…,z2n)⋅X−1(c_n, c_{n-1}, \dots, c_1) = (z_{n+1}, \dots, z_{2n}) \cdot X^{-1}(cn,cn−1,…,c1)=(zn+1,…,z2n)⋅X−1(XXX为状态矩阵)。
-
-
示例
- 已知密文101101011110010101101011110010101101011110010和明文011001111111001011001111111001011001111111001,求得密钥流110100100001011110100100001011110100100001011,通过 5 级 LFSR 的方程组求解,得反馈系数(c5,c4,c3,c2,c1)=(1,0,0,1,0)(c_5, c_4, c_3, c_2, c_1) = (1,0,0,1,0)(c5,c4,c3,c2,c1)=(1,0,0,1,0),递推关系为ai+5=ai⊕ai+3a_{i+5} = a_i \oplus a_{i+3}ai+5=ai⊕ai+3。
非线性序列
为克服 LFSR 的线性性缺陷(易破译),需构造非线性序列生成器,核心是提高线性复杂度和周期。
-
Geffe 序列生成器
-
结构:3 个 LFSR(LFSR2 为控制器),输出bk=a1(k)a2(k)⊕a3(k)(1⊕a2(k))b_k = a_1^{(k)}a_2^{(k)} \oplus a_3^{(k)}(1 \oplus a_2^{(k)})bk=a1(k)a2(k)⊕a3(k)(1⊕a2(k))(ai(k)a_i^{(k)}ai(k)为第iii个 LFSR 的输出);
-
周期:若 LFSRiii的特征多项式为nin_ini次本原多项式且nin_ini互素,则周期为∏i=13(2ni−1)\prod_{i=1}^3 (2^{n_i} - 1)∏i=13(2ni−1);
-
线性复杂度:(n1+n3)n2+n3(n_1 + n_3)n_2 + n_3(n1+n3)n2+n3。
-
-
J-K 触发器
-
输出公式:ck=(x1⊕x2)ck−1⊕x1c_k = (x_1 \oplus x_2)c_{k-1} \oplus x_1ck=(x1⊕x2)ck−1⊕x1(x1,x2x_1, x_2x1,x2为输入,ck−1c_{k-1}ck−1为前一输出);
-
真值表:根据J=x1,K=x2J=x_1, K=x_2J=x1,K=x2,输出ckc_kck由ck−1c_{k-1}ck−1和输入决定;
-
生成器:由 2 个 LFSR(mmm级和nnn级mmm序列)驱动,周期为(2m−1)(2n−1)(2^m - 1)(2^n - 1)(2m−1)(2n−1)(当mmm与nnn互素且a0⊕b0=1a_0 \oplus b_0 = 1a0⊕b0=1时)。
-
-
Pless 生成器
-
结构:8 个 LFSR、4 个 J-K 触发器、1 个循环计数器(控制输出选通);
-
输出序列:按计数器周期选取 4 个 J-K 触发器的输出(如a0b1c2d3a4b5…a_0b_1c_2d_3a_4b_5\dotsa0b1c2d3a4b5…),提高复杂性。
-
-
钟控序列生成器
-
结构:LFSR1 控制 LFSR2 的时钟(LFSR1 输出 1 时,LFSR2 移位;输出 0 时,保持);
-
周期:若 LFSR1(mmm级,周期p1=2m−1p_1=2^m - 1p1=2m−1)和 LFSR2(nnn级,周期p2=2n−1p_2=2^n - 1p2=2n−1),且gcd(p1,p2)=1\gcd(p_1, p_2)=1gcd(p1,p2)=1,则周期为p1p2p_1p_2p1p2;
-
线性复杂度:n(2m−1)n(2^m - 1)n(2m−1),极小特征多项式为f2(x2m−1)f_2(x^{2^m - 1})f2(x2m−1)(f2f_2f2为 LFSR2 的特征多项式)。
-
序列密码设计原则
- 长周期:避免密钥流重复导致的安全性缺陷。
- 高线性复杂度:抵抗线性分析攻击。
- 良好统计性能:满足 Golomb 公设,0-1 分布平衡、游程特性合理。
- 混乱与扩散:使明文与密钥流的关系复杂,掩盖统计特性。
- 抗攻击性:能抵抗已知明文、选择明文等多种攻击方式。
重点总结
- 流密码核心是通过密钥流与明文的模 2 加实现加密,密钥流生成是关键。
- LFSR 是生成密钥流的基础部件,m序列是其最优线性序列(周期最大、伪随机性好),但线性特性易被破译。
- 非线性序列生成器(如 Geffe、J-K 触发器等)通过引入非线性变换提升安全性,需兼顾周期、线性复杂度和实现效率。
- 破译m序列密码的核心是利用线性递推关系,通过足够长的密钥流片段求解反馈系数。