注:以下内容参考《新编密码学》范九伦 张雪锋 侯红霞 编著
5.1 序列密码的基本原理
5.1.1 序列密码的设计思想
序列密码(流密码)每次只对明文中的单个位(或字节)进行加密变换。其核心是密钥流生成器:由种子密钥生成一个伪随机密钥流,再与明文流逐比特异或得到密文流。Shannon证明了一次一密是不可破译的,这为序列密码提供了理论依据。

按照密钥流产生方式的不同,序列密码分为同步序列密码 和自同步序列密码两种。
1. 同步序列密码

密钥流 ki 的产生完全独立于消息流 mi(明文或密文)。其数学模型为:
σ(i+1)=F(σi,k)
ki=G(σi,k)
ci=E(ki,mi)(通常为异或)
mi=D(ki,ci)
特点:
-
无错误传播:1位密文错误只影响1位明文。
-
同步性要求高:插入或删除密文字符会破坏同步,需用特殊标记、重同步或冗余检测。
-
主动攻击可检测:插入、删除或重放会破坏同步,可能被检测。
2. 自同步序列密码

密钥流 ki 的产生依赖于前面有限个(n个)密文字符。其数学模型为:
σ(i+1)=F(σi,ci,c(i−1),...,c(i−n+1),k)
ki=G(σi,k)
ci=E(ki,mi)
mi=D(ki,ci)
特点:
-
有错误传播:1位密文错误会影响后续最多 nn 位明文。
-
自同步能力:收到 nn 个正确密文后自动恢复同步。
5.1.2 序列随机性能评价
为度量周期序列的随机性,Golomb提出了三个必要条件(Golomb随机性假设):
-
在一个周期内,0和1的个数相差不超过1。
-
在一个周期内,游程分布合理:长度为 i 的游程数占游程总数的 1/2^i,且0游程与1游程数目相等或相差1。
-
序列的自相关函数是双值的(周期自相关为常数,非周期自相关很小)。
对于长度为 n 的二进制序列,常用五种统计测试方法:
- 频率测试:检查0和1个数是否相近。

- 序列测试:检查00、01、10、11的分布是否均匀。

- 扑克测试:将序列分成长度为 m 的块,检查所有块的出现频率是否均匀。

- 游程测试:检查各长度游程的数目是否符合预期。

- 自相关测试:检查序列与其移位后的序列的相关性。

实例


5.2 反馈移位寄存器
5.2.1 线性反馈移位寄存器(LFSR)
LFSR是许多密钥流生成器的核心部件,具有以下优点:
-
适合硬件实现
-
可产生大周期序列
-
序列统计特性良好
-
便于代数分析
定义:一个长度为 L 的LFSR由 L 个级(存储单元)和一个时钟构成。每个时间单位执行:
-
输出第0级的内容作为输出位。
-
各级内容向右移动一位。
-
计算反馈比特 sj=(c1s(j−1)+⋯+cLs(j−L))mod 2,存入最高级。

多项式表示:C(D)=1+c₁D+c₂D²+⋯+cLD^L∈Z₂D。若 cL=1,称为非奇异的。
递推公式:

例5.2:LFSR(4, 1+D+D⁴) 的结构如图,初始状态为 0,1,1,0 时,输出序列周期为15。


5.2.2 m 序列
当LFSR的连接多项式是本原多项式时,输出序列达到最大周期 2^L−1,称为 m 序列(最大长度序列)。
m 序列的性质:
-
周期:2^L−1
-
游程分布:在一个周期内,1的游程总数为 2L−2,0的游程总数也为 2L−2,长度为 r 的游程占 1/2r,满足Golomb条件2。
-
自相关函数:满足Golomb条件3。

- 线性复杂度:等于 L。
定理5.3(换行定理):mm 序列的异相自相关函数等于 −1/(2^L−1)。
5.3 基于LFSR的生成器
1) Geffe 生成器

使用3个LFSR,非线性组合方式为:
k=(s1∧s2)⊕((¬s1)∧s3)=(s1∧s2)⊕s1∧s2⊕s3
即:当 LFSR-1 输出1时,选择 LFSR-2;当 LFSR-1 输出0时,选择 LFSR-3。
参数:若三个LFSR长度分别为 n1,n2,n3,则线性复杂度为 (n1+1)*n3+n1n2,周期为各周期的最小公倍数(本原多项式次数互素时,周期为 ∏(2^ni−1))。
安全性:Geffe生成器不安全,因为LFSR-1和LFSR-3的状态信息会在输出中泄露。
2) Jennings 生成器

使用2个LFSR,LFSR-1控制选择器从LFSR-2中选取一位,再通过映射函数输出。密钥为两个LFSR的初始状态和映射函数。
3) J-K 触发器

使用2个LFSR,输出由J-K触发器的真值表决定:


递推公式:cn=((an+bn+1)⋅c(n−1)+an)mod 2
安全性问题:由 cn 和 c(n+1) 可反推 a(n+1) 或 b(n+1),不安全。
4) Pless 生成器

由8个LFSR组成4个J-K触发器,外加一个循环计数器控制输出。8个LFSR的级数互素,使得最终输出周期为各周期乘积。密钥包括8个LFSR的初始状态、J-K触发器的初始状态和输出顺序。
注:以上内容的理解和计算,如果有任何错误,希望各位读者和大佬指出改正,非常感谢!!!