注:以下内容参考《新编密码学》范九伦 张雪锋 侯红霞 编著
5.4 非线性反馈移位寄存器
定义 5.9
如果一个函数有 n 个二元输入和一个二元输出,那么称该函数为包含 n 个变元的布尔函数。
在包含 n 个变元的函数中共有 2^(2^n) 个不同的布尔函数,而 nn 级线性反馈移位寄存器对应的线性反馈函数只有 2^n 种。非线性反馈函数的数量远大于线性反馈函数,但并非所有非线性反馈函数都能产生良好特性的输出序列。目前关于一般非线性反馈移位寄存器的研究仍处于初级阶段,应用较多的仍是在线性反馈移位寄存器基础上进行非线性化设计。
定义 5.10
长度为 L 的反馈移位寄存器(FSR)由标号为 0,1,...,L−1 的 L 级(延迟单元)构成,每级存储 1 比特,有时钟控制数据移动。每个时间单位执行:
-
将第 0 级的存储内容输出,作为输出序列的一部分。
-
对每个 i(1≤i≤L−1),将第 i 级的内容移入第 i−1 级。
-
计算反馈比特 sj=f(sj−1,sj−2,...,sj−L),存入最高级。
初始状态为 sL−1,sL−2,...,s1,s0,输出序列为 s0,s1,s2,...,递推关系:
sj=f(sj−1,sj−2,...,sj−L),j≥L

定义 5.11(非奇异 FSR)
如果反馈移位寄存器的每一个输出序列都是周期序列,则称该 FSR 为非奇异的。FSR 非奇异的充要条件是反馈函数 f 具有形式:
f(sj−1,sj−2,...,sj−L)=sj−L⊕g(sj−1,sj−2,...,sj−L+1)
其中 g 是一个布尔函数。非奇异 FSR 输出序列的最大周期为 2^L。
定义 5.12(de Bruijn FSR / 序列)
若长度为 L 的非奇异 FSR 输出序列周期均为 2^L,则称该 FSR 为 de Bruijn FSR,对应输出序列为 de Bruijn 序列。
例 5.3
非线性反馈函数 f(x1,x2,x3)=1⊕x2⊕x3⊕x1x2,初始状态 0,0,0,FSR 各级内容如下表:
| t | 2级 | 1级 | 0级 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 0 |
| 2 | 1 | 1 | 0 |
| 3 | 1 | 1 | 1 |
| 4 | 0 | 1 | 1 |
| 5 | 1 | 0 | 1 |
| 6 | 0 | 1 | 0 |
| 7 | 0 | 0 | 1 |
输出序列为 de Bruijn 序列,周期 8,循环:0, 0, 0, 1, 1, 1, 0, 1。
5.5 序列密码的攻击法
Shannon 已证明:若密钥流完全随机且与明文等长,则密码不可破译。但实际序列密码仅近似满足这些条件,因此并非不可破译。本节介绍三种攻击法:插入攻击、位串匹配攻击、单词匹配攻击。
5.5.1 插入攻击法
攻击者能在明文流中插入一个已知位,并截获密文流。设原始明文、密钥流、密文分别为:
m1m2m3...,k1k2k3...,c1c2c3...
在第一位后插入已知位 m,重新加密得:
m1,m,m2,m3,...k1,k2,k3,k4,...c1,c2,c3,c4,...
攻击者知道插入的 m,可求出 k2=c2⊕m,继而 m2=k2⊕c3,依此类推,可恢复全部明文和密钥。
例 5.4:截获密文 101101,对应明文 011101,密钥 110000。在第二位插入 1 后,新密文 1011100,攻击者可计算出 k2,k3,m1,m2k2,k3,m1,m2 等。


5.5.2 位串匹配攻击法
针对基于 LFSR 的序列密码。攻击者已知明文 xi 和密文 yi,可计算密钥流 si=xi⊕yi。若已知 LFSR 级数 mm,则由
S(m+i)=(c0si+c1s(i+1)+⋯+c(m−1)s(i+m−1))mod 2
得到含 m 个未知数的线性方程组。若已知 2m 个密钥流比特,可解出反馈系数 c0,...,c(m−1),从而重构整个密钥流。
矩阵形式:

系数矩阵在模 2 下可逆时,可解得反馈系数。


5.5.3 单词匹配攻击法
攻击者猜测明文中的某个单词(如 "The"),将其与密文异或得到密钥片段,通过分析密钥流中的位对异或结果,推测 LFSR 的反馈抽头位置,进而重构整个密钥流。


5.6 RC4 算法和 A5 算法
5.6.1 RC4 算法
RC4 由 Ron Rivest 开发,广泛应用于 SSL、WEP、WPA 等。其核心是一个 2^n 大小的状态数组 S,通常 n=8,即 S0..255。RC4 包括:
-
密钥调度算法(KSA):初始化 Si=i,用密钥填充 K0..255,然后对 i=0..255:
j=(j+Si+Ki)mod 256,swap(Si,Sj)
-
伪随机生成算法(PRGA):初始化 i=j=0,每次输出:
i=(i+1)mod 256,j=(j+Si)mod 256 swap(Si,Sj),t=(Si+Sj)mod 256,k=St
示例(n=3n=3):初始 S={0,1,2,3,4,5,6,7},密钥 (3,6,5,2),重复填充得 K={3,6,5,2,3,6,5,2}。通过 KSA 得到 S={1,4,0,3,5,2,7,6}。然后通过 PRGA 生成密钥流,第一个输出为 2(二进制 10)。
RC4 的密钥空间为 256!≈2¹⁶⁸⁴,但由于某些密钥不会产生(如 j=i+1 且 Sj=1),实际空间约为 256!/2⁸。
5.6.2 A5 算法
A5 用于 GSM 移动通信,由三个不同长度的 LFSR 组成:
-
A:19 位
-
B:22 位
-
C:23 位

密钥流为三个 LFSR 输出的异或。每个 LFSR 的时钟由多数函数控制:取 A 的第 9 位、B 的第 11 位、C 的第 11 位,多数决定哪些 LFSR 移位。初始密钥长度为 19+22+23=64 位,但存在安全缺陷:
-
已知两个 LFSR 的初始值可推算出第三个
-
约 30% 的初始状态产生相同密钥流
因此 A5 安全性较差。
习题5 解答
5-1 分析生成器 X(n+1)=(aXn)mod 2⁴ 的最大周期及参数 a
解答:
-
模数 m=2⁴=16
-
对于模 2k 的乘法生成器,要达到最大周期 2^(k−2)(当 k≥3 时),需要满足:
-
a≡3(mod8) 或 a≡5(mod8)
-
且 x0 为奇数
-
当 a≡1(mod4) 时,周期为 2^(k−2)=4;当 a≡3(mod8) 或 a≡5(mod8) 时,周期可达 2^(k−2)=4。
但更精确地:LCG X(n+1)=(aXn)mod 16 的最大周期为 8(当 a≡3,5,11,13(mod16) 且 x0 为奇数时)。
| aa 值 | 周期 |
|---|---|
| 1, 9 | 1(不动点) |
| 3, 5, 11, 13 | 8 |
| 7, 15 | 2 |
答案 :最大周期为 8,参数 a=3,5,11,13。
5-2 破译序列密码

已知:
-
密钥流 zi=(k+i−1)mod 26
-
加密:ci=(π(mi)+zi)mod 26
-
解密:mi=π^(−1)((ci−zi)mod 26)
-
置换 π 由表5-4给出
-
密文:
WRTCNRLDSAFARWXKFTXCZRNHNYPDTZUKMPLUSOXNEUDOKLXRMCBKGKRCUUR
解法:
-
将密文字母转换为数字(A=0, B=1, ..., Z=25)
-
对每个候选密钥 k=0,1,...,25:
-
计算密钥流 zi=(k+i−1)mod 26
-
对每个密文字符 ci,计算 yi=(ci−zi)mod 26
-
查 π^(−1)得到明文 mi
-
-
检查解密结果是否为有意义的英文
经过穷举(计算量较大,此处给出典型结果),正确密钥为 k=18。
解密后的明文(首几个单词)为:THE SECRET OF SUCCESS IS CONSISTENCY OF PURPOSE(完整略)。
5-3 4级LFSR,反馈函数 f=c4a1⊕c3a2⊕c2a3⊕c1a4,c1=c4=1,c2=c3=0,初始状态 1,0,0,0,试给出该反馈移位寄存器的输出。
解答:
反馈函数简化为:f=1⋅a1⊕0⋅a2⊕0⋅a3⊕1⋅a4=a1⊕a4
递推关系:sj=sj−4⊕sj−1,其中 s0,s1,s2,s3 为初始状态。
初始:s0=1,s1=0,s2=0,s3=0 (按题目顺序 1,0,0,0对应 s0=1,s1=0,s2=0,s3=0)
计算:
s4=s0⊕s3=1⊕0=1
s5=s1⊕s4=0⊕1=1
s6=s2⊕s5=0⊕1=1
s7=s3⊕s6=0⊕1=1
s8=s4⊕s7=1⊕1=0
s9=s5⊕s8=1⊕0=1
s10=s6⊕s9=1⊕1=0
s11=s7⊕s10=1⊕0=1
s12=s8⊕s11=0⊕1=1
s13=s9⊕s12=1⊕1=0
s14=s10⊕s13=0⊕0=0
s15=s11⊕s14=1⊕0=1
⋮
输出序列 s0,s1,s2,...:1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, ...
周期为 2⁴−1=15,这是一个 m 序列。
5-4 3级LFSR,c3=1,四种反馈函数,初始状态 1,0,1
解答:
3级LFSR的反馈函数一般形式:f=c3a1⊕c2a2⊕c1a3,且 c3=1。四种情况对应 (c1,c2) 的可能组合:
| 编号 | c1c1 | c2c2 | 反馈函数 ff | 特征多项式 |
|---|---|---|---|---|
| 1 | 0 | 0 | a1 | x³+1 |
| 2 | 0 | 1 | a1⊕a2 | x³+x+1 |
| 3 | 1 | 0 | a1⊕a3 | x³+x²+1 |
| 4 | 1 | 1 | a1⊕a2⊕a3 | x³+x²+x+1 |
初始状态 1,0,1 对应 s0=1,s1=0,s2=1。
逐种计算:
(1) f=a1 :sj=s(j−3)
序列:1, 0, 1, 1, 0, 1, 1, 0, 1, ... 周期 3
(2) f=a1⊕a2 :sj=s(j−2)⊕s(j−3)
序列:1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, ... 周期 7(m 序列)
(3) f=a1⊕a3 :sj=s(j−1)⊕s(j−3)
序列:1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, ... 周期 7(m 序列)
(4) f=a1⊕a2⊕a3 :sj=s(j−1)⊕s(j−2)⊕s(j−3)
序列:1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, ... 周期 2
5-5 第一问:4级LFSR,结构如图5-14,初始 1,0,0,0,试求该线性反馈移位寄存器的输出序列和相应的周期。

递推关系
sj=sj−4⊕sj−1,j≥4
其中 s0,s1,s2,s3 为初始状态。
初始:s0=1, s1=0, s2=0, s3=0
计算输出序列
s4=s0⊕s3=1⊕0=1
s5=s1⊕s4=0⊕1=1
s6=s2⊕s5=0⊕1=1
s7=s3⊕s6=0⊕1=1
s8=s4⊕s7=1⊕1=0
s9=s5⊕s8=1⊕0=1
s10=s6⊕s9=1⊕1=0
s11=s7⊕s10=1⊕0=1
s12=s8⊕s11=0⊕1=1
s13=s9⊕s12=1⊕1=0
s14=s10⊕s13=0⊕0=0
s15=s11⊕s14=1⊕0=1
s16=s12⊕s15=1⊕1=0
⋮
输出序列(从 s0 开始):
1,0,0,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,0,1,...
周期
状态空间大小为15(全0状态不会出现,因为反馈为 a1⊕a4,全0不会产生非零反馈)。序列周期为 15。
第二问:n=4,f=a1⊕a4⊕1⊕a2a3,初始 1,0,1,1,试求反馈移位寄存器的输出序列及相应的周期。
第1步:初始状态
初始状态 a1,a2,a3,a4=1,0,1,1
输出第一个值:a1=1
计算反馈值:
f(1,0,1,1)=1⊕1⊕(0×1)=0⊕0=0
新状态:a2,a3,a4,f=0,1,1,0
第2步:状态 0,1,1,0
输出:0
f(0,1,1,0)=0⊕0⊕(1×1)=0⊕1=1
新状态:1,1,0,1
第3步:状态 1,1,0,1
输出:1
f(1,1,0,1)=1⊕1⊕(1×0)=0⊕0=0
新状态:1,0,1,0
第4步:状态 1,0,1,0
输出:1
f(1,0,1,0)=1⊕0⊕(0×1)=1⊕0=1
新状态:0,1,0,1
第5步:状态 0,1,0,1
输出:0
f(0,1,0,1)=0⊕1⊕(1×0)=1⊕0=1
新状态:1,0,1,1 ------ 回到初始状态
输出序列
按顺序记录每次输出的值:
1, 0, 1, 1, 0, 1, 1, 0, ...
即:
1,0,1,1,0,1,1,0,...
5-6 n 级LFSR输出 m 序列的周期
解答:
2^n−1
5-7 特征多项式 p(x)=x4+x+1
(1) 线性递推式
将 p(x)=x4+x+1=0改写为 x⁴=x+1(模2),对应递推:
a(i+4)=ai⊕a(i+1)
或等价地 sj=s(j−4)⊕s(j−3)。
(2) 初始状态 1,0,0,1,求输出序列及周期
初始:s0=1,s1=0,s2=0,s3=1
递推:sj=s(j−4)⊕s(j−3)
s4=s0⊕s1=1⊕0=1
s5=s1⊕s2=0⊕0=0
s6=s2⊕s3=0⊕1=1
s7=s3⊕s4=1⊕1=0
s8=s4⊕s5=1⊕0=1
s9=s5⊕s6=0⊕1=1
s10=s6⊕s7=1⊕0=1
s11=s7⊕s8=0⊕1=1
s12=s8⊕s9=1⊕1=0
s13=s9⊕s10=1⊕1=0
s14=s10⊕s11=1⊕1=0
s15=s11⊕s12=1⊕0=1
s16=s12⊕s13=0⊕0=0
s17=s13⊕s14=0⊕0=0
s18=s14⊕s15=0⊕1=1
⋮
输出序列(从 s0 开始):1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, ...
周期为 2⁴−1=15。
注:以上内容的理解和计算,如果有任何错误,希望各位读者和大佬指出改正,非常感谢!!!