现代密码学 | 02:流密码——1

现代密码学_电子科技大学_中国大学MOOC(慕课)
计算机网络安全原理_吴礼发、洪征编著_电子工业出版社出版_ISBN:9787121387272
现代密码学_杨波_清华大学出版社_ISBN:9787302465553

秋风阁——北溪入江流:https://focus-wind.com/
秋风阁——现代密码学 | 02:流密码

文章目录

流密码[序列密码](stream cipher)的基本概念

流密码(stream cipher)也称序列密码,流密码每次加密处理数据流的一位或一个字节,加解密使用相同的密钥,是对称密码算法的一种。 流密码的思想主要来源于一次一密算法

一次一密(one-time pad)

  • 一种理想的加密方案,叫做一次一密密码(one-time pad),由Major Joseph Mauborgne和AT&T公司的Gilbert Vernam1917年发明的
  • 明文: x = x 0 x 1 x 2 . . . x = x_0x_1x_2... x=x0x1x2...
  • 密钥: k = k 0 k 1 k 2 . . . k = k_0k_1k_2... k=k0k1k2...
  • 密文: y = y 0 y 1 y 2 . . . y = y_0y_1y_2... y=y0y1y2...
  • 加密函数: y i = x i + k i ( m o d   26 ) y_i = x_i + k_i(mod\ 26) yi=xi+ki(mod 26)
  • 解密函数: x i = y i − k i ( m o d   26 ) x_i = y_i - k_i(mod\ 26) xi=yiki(mod 26)
  • 注:密钥为随机产生的,而且只使用一次

在现代的信息技术处理中,数据使用01串来表示,所以一次一密使用01串进行加密和解密,在明文和密码中,使用逐比特的异或来进行加解密的。

xor01
001
110

在逻辑运算中,设 a a a为明文, b b b为密钥, c c c为加密后的密文, a , b , c a,b,c a,b,c之间由以下关系:
a ⊕ b = c , c ⊕ b = a a \oplus b = c,c \oplus b = a ab=ccb=a

一次一密的特点

  • 优点:
    • 密钥随机产生,仅使用一次
    • 无条件安全
    • 加密和解密为加法运算,效率极高
  • 缺点:
    • 密钥长度至少和明文长度一样,密钥共享困难,实用性低

流密码(stream cipher)

流密码的思想来源主要来源于一次一密算法,针对一次一密密钥长度至少和明文长度一样的特点,流密码的思想是产生一小段密钥,由者一小段密钥可以推导出完整的密钥,解决一次一密实用性较低的特点。

流密码概况

  • 流密码(stream cipher)是一种重要的密码体制
    • 明文消息按字符或比特逐位加密
    • 流密码也称为序列密码(sequence cipher)
  • 流密码在20世纪50年代得到飞跃式发展
    • 密钥流可以用移位寄存器电路来产生,也促进了线性和非线性移位寄存器发展
    • 流密码主要是基于硬件实现

流密码的基本思想

  • 流密码的基本思想
    • 利用密钥 k k k产生一个密钥流 z = z 0 z 1 z 2 . . . z = z_0z_1z_2... z=z0z1z2...,并使用如下规则对明文串 x = x 0 x 1 x 2 . . . x = x_0x_1x_2... x=x0x1x2...加密:
      y = y 0 y 1 y 2 . . . = E z 0 ( x 0 ) E z 1 ( x 1 ) E z 2 ( x 2 ) . . . y = y_0y_1y_2... = Ez_0(x_0)Ez_1(x_1)Ez_2(x_2)... y=y0y1y2...=Ez0(x0)Ez1(x1)Ez2(x2)...
  • 密钥流:
    • 由密钥流发生器 f f f产生: z i = f ( k , σ i ) z_i = f(k, \sigma_i) zi=f(k,σi)
    • σ i \sigma_i σi是加密器中的记忆元件在时刻 i i i的状态
    • f f f是由 k , σ i k, \sigma_i k,σi产生的函数
    • 内部记忆元件由一组移位寄存器构成

同步流密码

内部记忆元件的状态 σ i \sigma_i σi独立于明文字符的叫做同步流密码,否则叫做自同步流密码

在同步流密码中,由于 z i = f ( k , σ i ) z_i = f(k, \sigma_i) zi=f(k,σi)与明文字符无关,因而此时密文字符 y i = E z i ( x i ) y_i = E_{zi}(x_i) yi=Ezi(xi)也不依赖于此前的明文字符。因此,可将同步流密码的加密器分为密钥流产生器和加密变换器两个部分。

同步流密码体制模型

流密码体制模型二元加法流密码是目前最为常用的流密码体制,其加密变换可表示为 y i = z i ⊕ x i y_i = z_i \oplus x_i yi=zixi

流密码的需求

  • 一次一密密码是加法流密码的原型
    • 如果密钥用作滚动密钥流,则加法流密码就退化成一次一密密码。
  • 密码设计者的最大愿望是设计出一个滚动密钥生成器,使得密钥经其扩展成的密钥流序列具有如下性质:
    • 极大的周期
    • 良好的统计特性
    • 抗线性分析

有限状态自动机

有限状态自动机

有限状态自动机模型

有限状态自动机是具有离散输入和输出(输入集和输出集均有限)的一种数学模型,由以下3部分组成:

  1. 有限状态集 S = { s i ∣ i = 1 , 2 , . . . , l } S = \{ s_i | i = 1, 2, ..., l\} S={sii=1,2,...,l}
  2. 有限输入字符集 A 1 = { A ( 1 ) j ∣ j = 1 , 2 , . . . , m } A_1 = \{ {A^{(1)}}_j | j = 1, 2,...,m \} A1={A(1)jj=1,2,...,m}和有限输出字符集 A 2 = { A ( 2 ) k ∣ k = 1 , 2 , . . . , n } A_2 = \{ {A^{(2)}}_k | k = 1, 2,...,n \} A2={A(2)kk=1,2,...,n}
  3. 转移函数 A ( 2 ) k = f 1 ( s i , A ( 1 ) j ) {A^{(2)}}_k = f_1(s_i, {A^{(1)}}_j) A(2)k=f1(si,A(1)j) S h = f 2 ( s i , A ( 1 ) j ) S_h = f_2(s_i, {A^{(1)}}_j) Sh=f2(si,A(1)j),即在状态为 s i s_i si,输入为 A ( 1 ) j {A^{(1)}}_j A(1)j时,输出为 A ( 2 ) k {A^{(2)}}_k A(2)k,而状态转移为 S h S_h Sh

有限状态自动机的表示

有限状态自动机的有向图表示
  • 有限状态自动机可用有向图表示,称为转移图。
    • 转移图的顶点对应于自动机的状态,若状态 s i s_i si在输入 A ( 1 ) i {A^{(1)}}_i A(1)i时转为状态 s j s_j sj,且输出一字符 A ( 2 ) j {A^{(2)}}_j A(2)j,则在转移图中,从状态 s i s_i si到状态 s j s_j sj有一条标有 ( A ( 1 ) i , A ( 2 ) j ) ({A^{(1)}}_i, {A^{(2)}}_j) (A(1)i,A(2)j)的弧线。
      有限状态自动机的有向图表示
有限状态自动机的矩阵表示

S = { s 1 , s 2 , s 3 } S = \{s_1, s_2, s_3\} S={s1,s2,s3} A 1 = { A ( 1 ) 1 , A ( 1 ) 2 , A ( 1 ) 3 } A_1 = \{{A^{(1)}}_1, {A^{(1)}}_2, {A^{(1)}}_3\} A1={A(1)1,A(1)2,A(1)3} A 2 = { A ( 2 ) 1 , A ( 2 ) 2 , A ( 2 ) 3 } A_2 = \{{A^{(2)}}_1, {A^{(2)}}_2, {A^{(2)}}_3\} A2={A(2)1,A(2)2,A(2)3},则该有限状态自动机的矩阵表示如下:

f 1 f_1 f1 A ( 1 ) 1 {A^{(1)}}_1 A(1)1 A ( 1 ) 2 {A^{(1)}}_2 A(1)2 A ( 1 ) 3 {A^{(1)}}_3 A(1)3
s 1 s_1 s1 A ( 2 ) 1 {A^{(2)}}_1 A(2)1 A ( 2 ) 3 {A^{(2)}}_3 A(2)3 A ( 2 ) 2 {A^{(2)}}_2 A(2)2
s 2 s_2 s2 A ( 2 ) 2 {A^{(2)}}_2 A(2)2 A ( 2 ) 1 {A^{(2)}}_1 A(2)1 A ( 2 ) 3 {A^{(2)}}_3 A(2)3
s 3 s_3 s3 A ( 2 ) 3 {A^{(2)}}_3 A(2)3 A ( 2 ) 2 {A^{(2)}}_2 A(2)2 A ( 2 ) 1 {A^{(2)}}_1 A(2)1
f 2 f_2 f2 A ( 1 ) 1 {A^{(1)}}_1 A(1)1 A ( 1 ) 2 {A^{(1)}}_2 A(1)2 A ( 1 ) 3 {A^{(1)}}_3 A(1)3
s 1 s_1 s1 s 2 s_2 s2 s 1 s_1 s1 s 3 s_3 s3
s 2 s_2 s2 s 3 s_3 s3 s 2 s_2 s2 s 1 s_1 s1
s 3 s_3 s3 s 1 s_1 s1 s 3 s_3 s3 s 2 s_2 s2

有限状态自动机实例

若输入序列为: A ( 1 ) 1 A ( 1 ) 2 A ( 1 ) 1 A ( 1 ) 3 A ( 1 ) 3 A ( 1 ) 1 {A^{(1)}}_1{A^{(1)}}_2{A^{(1)}}_1{A^{(1)}}_3{A^{(1)}}_3{A^{(1)}}_1 A(1)1A(1)2A(1)1A(1)3A(1)3A(1)1,初始状态为 s 1 s_1 s1,则得到的序列:
s 1 s 2 s 2 s 3 s 2 s 1 s 2 s_1s_2s_2s_3s_2s_1s_2 s1s2s2s3s2s1s2
输出字符序列: A ( 2 ) 1 A ( 2 ) 1 A ( 2 ) 2 A ( 2 ) 1 A ( 2 ) 3 A ( 2 ) 1 {A^{(2)}}_1{A^{(2)}}_1{A^{(2)}}_2{A^{(2)}}_1{A^{(2)}}_3{A^{(2)}}_1 A(2)1A(2)1A(2)2A(2)1A(2)3A(2)1
有限状态自动机实例

密钥流生成器

  • 密钥流产生器:参数为 k k k的有限状态自动机
  • 一个输出符号集 Z Z Z、一个状态集 Σ \Sigma Σ、两个函数 φ \varphi φ ψ \psi ψ以及一个初始状态 σ 0 \sigma_0 σ0组成。
  • 状态转移函数 φ : σ i → σ i + 1 \varphi: \sigma_i \rightarrow \sigma_{i + 1} φ:σiσi+1,将当前状态 σ i \sigma_i σi变为一个新状态 σ i + 1 \sigma_{i + 1} σi+1
  • 输出函数 ψ : σ i → z i \psi: \sigma_i \rightarrow z_i ψ:σizi,当前状态 σ i \sigma_i σi变为输出符号集中的一个元素 z i z_i zi
    作为有限状态自动机的密钥流生成器

密钥流生成器设计的关键

  • 关键在于:找出适当的状态转移函数 ϕ \phi ϕ和输出函数 φ \varphi φ,使得输出序列 z z z满足密钥流序列 z z z应满足的随机性条件,并且要求在设备上是节省的和容易实现的。
  • 一般采用线性的 ϕ \phi ϕ和非线性的 φ \varphi φ,这样将能够进行深入的分析并可以得到好的生成器。

密钥流生成器的分解

  • 密钥流生成器可分成驱动部分非线性组合部分
  • 驱动部分控制生成器的状态转移,并为非线性组合部分提供统计性能好的序列
  • 非线性组合部分要利用这些序列组合出满足要求的密钥流序列
    密钥流生成器的分解

常见的密钥流生成器

  • 目前最为流行和实用的密钥流产生器,其驱动部分是一个或多个线性反馈移位寄存器。
    • 前者称为滤波生成器,或前馈生成器
    • 后者称为非线性组合生成
    • 还有钟控生成器,缩减生成器,停走生成器等
      常见的密钥流生成器

二元序列的伪随机性

二元序列

二元序列的定义

  • G F ( 2 ) GF(2) GF(2)上的一个无限序列 a → = ( a 1 , a 2 , . . . , a n , . . . ) \mathop{a}\limits_{\rightarrow} = (a_1, a_2,..., a_n,...) a=(a1,a2,...,an,...)称为二元序列,其中 a i ∈ G F ( 2 ) a_i \in GF(2) aiGF(2)
  • 周期:对于二元序列 a → \mathop{a}\limits_{\rightarrow} a,如果存在正整数 l l l,使得对于一切正整数 k k k都有 a k = a k + l a_k = a_{k + l} ak=ak+l,则称 a → \mathop{a}\limits_{\rightarrow} a是周期的。
    • 满足上述条件的最小正整数称为 a → \mathop{a}\limits_{\rightarrow} a的周期,记为 p ( a → ) p(\mathop{a}\limits_{\rightarrow}) p(a)
周期的性质

G F ( 2 ) GF(2) GF(2)上的一个无限序列 a → = ( a 1 , a 2 , . . . , a n , . . . ) \mathop{a}\limits_{\rightarrow} = (a_1, a_2,..., a_n,...) a=(a1,a2,...,an,...)是周期为 p ( a → ) p(\mathop{a}\limits_{\rightarrow}) p(a)的二元序列,并设正整数 l l l对任何非负整数 k k k都有 a k = a k + l a_k = a_{k + l} ak=ak+l,则一定有 p ( a → ) ∣ l p(\mathop{a}\limits_{\rightarrow})|l p(a)l

证明:
l = q p ( a → ) + r l = qp(\mathop{a}\limits_{\rightarrow}) + r l=qp(a)+r,其中 q , r q, r q,r为正整数,且 0 ⩽ r < p ( a → ) 0 \leqslant r < p(\mathop{a}\limits_{\rightarrow}) 0r<p(a),则有:
a k = a k + l ⇒ a k = a q p ( a ) + r + k ⇒ a k = a r + k a_k = a_{k + l} \\ \Rightarrow a_k = a_{qp(a) + r + k} \\ \Rightarrow a_k = a_{r + k} ak=ak+lak=aqp(a)+r+kak=ar+k
又由于 0 ⩽ r < p ( a → ) 0 \leqslant r < p(\mathop{a}\limits_{\rightarrow}) 0r<p(a),根据 p ( a → ) p(\mathop{a}\limits_{\rightarrow}) p(a)的极小性可知 r = 0 r = 0 r=0,因此 p ( a → ) ∣ l p(\mathop{a}\limits_{\rightarrow})|l p(a)l

游程的定义

a → \mathop{a}\limits_{\rightarrow} a G F ( 2 ) GF(2) GF(2)上周期为 p ( a → ) p(\mathop{a}\limits_{\rightarrow}) p(a)的周期序列。将 a → \mathop{a}\limits_{\rightarrow} a的一个周期 ( a 1 , a 2 , . . . a p ( a → ) ) (a_1, a_2,...a_{p(\mathop{a}\limits_{\rightarrow})}) (a1,a2,...ap(a))依次排列在一个圆周上使 a p ( a → ) a_{p(\mathop{a}\limits_{\rightarrow})} ap(a) a 1 a_1 a1相连,把这个圆周上形如 011 ⋯ 110 ⏟ 都 是 1 \begin{matrix} \underbrace{ 011 \cdots110 } \\ 都是1 \end{matrix} 0111101 100 ⋯ 001 ⏟ 都 是 0 \begin{matrix} \underbrace{ 100 \cdots001 } \\ 都是0 \end{matrix} 1000010的一连串两两相邻的项分别称为 a → \mathop{a}\limits_{\rightarrow} a的一个周期中一个1游程或一个0游程。而1游程中的1的个数或0游程中0的个数称为游程的长度。

游程的例子

周期为15的二元序列

  • 10001为0的3游程
  • 011110为1的4游程

自相关函数

G F ( 2 ) GF(2) GF(2)上周期为 T T T的序列 { a i } \{a_i\} {ai}的自相关函数定义为:
R ( t ) = ∑ k = 1 T ( − 1 ) a k ( − 1 ) a k + l , 0 ⩽ t ⩽ T − 1 R(t) = \sum_{k = 1} ^ T (-1)^{a_k}(-1)^{a_{k + l}}, 0 \leqslant t \leqslant T - 1 R(t)=k=1T(1)ak(1)ak+l,0tT1
t = 0 t = 0 t=0时, R ( t ) = T R(t) = T R(t)=T,当 t ≠ 0 t \ne 0 t=0时,称 R ( t ) R(t) R(t)异相自相关函数

伪随机序列

Golomb伪随机公设

3各随机性公设:

  • 在序列的一个周期内,0与1的个数相差至多为1
    • 说明 { a i } \{a_i\} {ai}中0与1出现的概率基本上相同
  • 在序列的一个周期内,常委 i i i的游程占游程总数的 1 2 i ( i = 1 , 2 , . . . ) \frac{1}{2^i}(i = 1, 2,...) 2i1(i=1,2,...),且在登场的游程中0的游程个数和1的游程个数相等。
    • 说明0与1在序列中每一位置上出现的概率相同
  • 异相自相关函数时一个常数
    • 意味着通过对序列与其平移后的序列做比较,不能给出其他任何信息

伪随机序列的定义

a → = ( a 1 , a 2 , . . . , a p ( q ) , . . . ) \mathop{a}\limits_{\rightarrow} = (a_1, a_2,..., a_{p(q)},...) a=(a1,a2,...,ap(q),...) G F ( 2 ) GF(2) GF(2)上一个周期等于 p ( a → ) p(\mathop{a}\limits_{\rightarrow}) p(a)的周期序列。
如果对于一切 t ≢ 0 ( m o d   p ( a → ) ) t \not\equiv 0(mod\ p(\mathop{a}\limits_{\rightarrow})) t0(mod p(a)),有
R ( t ) = − 1 R(t) = -1 R(t)=1
则称序列 a → = ( a 1 , a 2 , . . . , a p ( q ) , . . . ) \mathop{a}\limits_{\rightarrow} = (a_1, a_2,..., a_{p(q)},...) a=(a1,a2,...,ap(q),...)为伪随机序列。

  • 上述定义满足Golomb三个伪随机公设。
伪随机序列示例

周期为15的二元序列100010011010111

  • 0的个数为7,1的个数为8
  • 0的游程个数为4,1的游程个数为4
  • 异相自相关函数等于-1

伪随机序列应满足的条件

  1. 周期 p p p要足够大,如大于 1 0 50 10^{50} 1050
  2. 序列 { a i } i ≥ 1 \{a_i\}_{i \ge 1} {ai}i1产生易于高速生成
  3. 当序列 { a i } i ≥ 1 \{a_i\}_{i \ge 1} {ai}i1的任何部分暴露时,要分析整个序列,提取产生它的电路结构信息,在计算上是不可行的,称此为不可预测性

条件3绝对了密码的强度,是流密码理论的核心。它包含了流密码要研究的许多主要问题,如线性复杂度,相关免疫性,不可预测性等。

线性反馈移位寄存器

反馈移位寄存器

移位寄存器是流密码产生密钥流的一个主要组成部分。
G F ( 2 ) GF(2) GF(2)上一个 n n n级反馈移位寄存器由 n n n个二元存储器与一个反馈函数 f ( a 1 , a 2 , . . . , a n ) f(a_1, a_2,..., a_n) f(a1,a2,...,an)组成,如下图所示:
反馈移位寄存器

反馈移位寄存器的状态

在任一时刻,这些级的内容构成该反馈移位寄存器的状态,每一状态对应于 G F ( 2 ) GF(2) GF(2)上的一个 n n n维向量,共有 2 n 2^n 2n种可能的状态。
每一时刻的状态可用 n n n维向量:
( a 1 , a 2 , . . . , a n ) (a_1, a_2,...,a_n) (a1,a2,...,an)
表示,其中 a i a_i ai是第 i i i级存储器的内容。

反馈函数

初始状态由用户确定。
反馈函数 f ( a 1 , a 2 , . . . , a n ) f(a_1, a_2,..., a_n) f(a1,a2,...,an) n n n元布尔函数,即函数的自变量和因变量只取0和1这两个可能的值。
函数中的运算有逻辑与、逻辑或、逻辑补等运算

反馈移位寄存器示例

如图是一个3级反馈移位寄存器,其初始状态为 ( a 1 , a 2 , a 3 ) = ( 1 , 0 , 1 ) (a_1, a_2, a_3) = (1, 0, 1) (a1,a2,a3)=(1,0,1),输出可由下表给出。
3级反馈移位寄存器
一个三级反馈移位寄存器的状态和输出:

a 3 a_3 a3 a 2 a_2 a2 a 1 a_1 a1输出
1011
1100
1111
0111
1011
1100

即输出序列为101110111011…,周期为4。

线性反馈移位寄存器LFSR(Linear feedback shift register)

G F ( 2 ) GF(2) GF(2)上的 n n n级线性反馈移位寄存器:
线性反馈移位寄存器
f ( a 1 , a 2 , . . . , a n ) = c 1 a n ⊕ c 2 a n − 1 ⊕ ⋅ ⋅ ⋅ ⊕ c n a 1 f(a_1, a_2,...,a_n) = c_1a_n \oplus c_2a_{n - 1} \oplus ··· \oplus c_na_1 f(a1,a2,...,an)=c1anc2an1cna1

LFSR的反馈函数

输出序列 { a t } \{ a_t \} {at}满足:
f ( a 1 , a 2 , . . . , a n ) = c 1 a n ⊕ c 2 a n − 1 ⊕ ⋅ ⋅ ⋅ ⊕ c n a 1 a n + 1 = c 1 a n ⊕ c 2 a n − 1 ⊕ ⋅ ⋅ ⋅ ⊕ c n a 1 a n + 2 = c 1 a n + 1 ⊕ c 2 a n ⊕ ⋅ ⋅ ⋅ ⊕ c n a 2 . . . . . . a n + t = c 1 a n + t − 1 ⊕ c 2 a n + t − 2 ⊕ ⋅ ⋅ ⋅ ⊕ c n a t , t = 1 , 2 , . . . f(a_1, a_2,...,a_n) = c_1a_n \oplus c_2a_{n - 1} \oplus ··· \oplus c_na_1 \\ a_{n + 1} = c_1a_n \oplus c_2a_{n - 1} \oplus ··· \oplus c_na_1 \\ a_{n + 2} = c_1a_{n + 1} \oplus c_2a_n \oplus ··· \oplus c_na_2 \\ ...... \\ a_{n + t} = c_1a_{n + t - 1} \oplus c_2a_{n + t - 2} \oplus ··· \oplus c_na_t, t = 1, 2,... f(a1,a2,...,an)=c1anc2an1cna1an+1=c1anc2an1cna1an+2=c1an+1c2ancna2......an+t=c1an+t1c2an+t2cnat,t=1,2,...
线性反馈移位寄存器:实现简单、速度快、有较为成熟的理论,成为构造密钥流生成器的最重要的部件之一

LFSR的示例

下图是一个5级线性反馈移位寄存器,其初始状态为 ( a 1 , a 2 , a 3 , a 4 , a 5 ) = ( 1 , 0 , 0 , 1 , 1 ) (a_1, a_2, a_3, a_4, a_5) = (1, 0, 0, 1, 1) (a1,a2,a3,a4,a5)=(1,0,0,1,1)
5级LFER
反馈函数: a 5 + t = a t + 3 ⊕ a t , t = 1 , 2 , . . . a_{5 + t} = a_{t + 3} \oplus a_t, t = 1, 2,... a5+t=at+3at,t=1,2,...
输出序列为:1001101001000010101110110001111100110…,周期为31。

密钥流的周期

给定密钥流 { a i } = a 1 , a 2 , a 3 , . . . , a n , . . . \{ a_i \} = a_1, a_2, a_3,..., a_n, ... {ai}=a1,a2,a3,...,an,...,如果存在整数 r r r,使得对于任意 a i a_i ai,都有 a i + r = a i a_{i + r} = a_i ai+r=ai,则称 r r r为该密钥流的一个周期,称满足 a i + r = a i a_{i + r} = a_i ai+r=ai最小正整数为该密钥流的最小周期或简称周期

LFSR的性质

总是假定 c 1 , c 2 , . . . , c n c_1, c_2,..., c_n c1,c2,...,cn 中至少有一个不为0,否则 f ( a 1 , a 2 , . . . , a n ) ≡ 0 f(a_1, a_2,..., a_n) \equiv 0 f(a1,a2,...,an)0
总是假定 c n = 1 c_n = 1 cn=1

  • LFSR输出序列的性质:完全由其反馈函数决定。
  • n n n级LFSR状态数:最多有 2 n 2^n 2n
  • n n n级LFSR的状态周期: ≤ 2 n − 1 \le 2^n - 1 2n1
  • 输出序列的周期 = 状态周期, ≤ 2 n − 1 \le 2^n - 1 2n1

选择合适的反馈函数可使序列的周期达到最大值 2 n − 1 2^n - 1 2n1,周期达到最大值的序列称为m序列。

m序列

线性反馈移位寄存器的多项式表示

线性移位寄存器的一元多项式表示

定义:设n级线性移位寄存器的输出序列满足递推关系:
a n + k = c 1 a n + k − 1 ⊕ c 2 a n + k − 2 ⊕ ⋅ ⋅ ⋅ ⊕ c n a k a_{n + k} = c_1a_{n + k - 1} \oplus c_2a_{n + k - 2} \oplus ··· \oplus c_na_k an+k=c1an+k1c2an+k2cnak
用延迟算子 D ( D a k = a k − 1 ) D(Da_k = a_{k - 1}) D(Dak=ak1)作为未定元,给出的反馈多项式为:
p ( D ) = 1 + c 1 D + . . . + c n − 1 D n − 1 + c n D n p(D) = 1 + c_1D +...+c_{n - 1}D^{n-1} + c_nD^n p(D)=1+c1D+...+cn1Dn1+cnDn
这种递推关系可用一个一元高次多项式:
p ( x ) = 1 + c 1 x + . . . + c n − 1 x n − 1 + c n x n p(x) = 1 + c_1x +...+c_{n - 1}x^{n-1} + c_nx^n p(x)=1+c1x+...+cn1xn1+cnxn
表示,称这个多项式为LFSR的特征多项式
根据初始状态的不同,由递推关系生成的非恒零的序列有 2 n − 1 2^n - 1 2n1个,记 2 n − 1 2^n - 1 2n1个非零序列的全体为 G ( p ( x ) ) G(p(x)) G(p(x))

生成函数

定义:给定序列 { a i } \{ a_i \} {ai},幂级数:
A ( x ) = ∑ i = 1 x a i x i − 1 A(x) = \sum^{x}_{i = 1}a_ix^{i - 1} A(x)=i=1xaixi1
称为该序列的生成函数

生成函数的性质

定理:设 p ( x ) = 1 + c 1 x + . . . + c n − 1 x n − 1 + c n x n p(x) = 1 + c_1x +...+c_{n - 1}x^{n-1} + c_nx^n p(x)=1+c1x+...+cn1xn1+cnxn G F ( 2 ) GF(2) GF(2)上的多项式, F ( p ( x ) ) F(p(x)) F(p(x))中任一序列 { a i } \{ a_i \} {ai}的生成函数 A ( x ) A(x) A(x)满足:
A ( x ) = ϕ ( x ) p ( x ) A(x) = \frac{\phi(x)}{p(x)} A(x)=p(x)ϕ(x)
其中:
ϕ ( x ) = ∑ i = 1 n ( c n − i x n − i ∑ j = 1 i a j x j − 1 ) \phi(x) = \sum^n_{i = 1}(c_{n - i}x^{n - i}\sum^i_{j = 1}a_jx^{j - 1}) ϕ(x)=i=1n(cnixnij=1iajxj1)

一些定理和定义

根据初始状态的不同,由递推关系生成的非恒零的序列有 2 n − 1 2^n - 1 2n1个,记 2 n − 1 2^n - 1 2n1个非零序列的全体为 G ( p ( x ) ) G(p(x)) G(p(x))
定理1: p ( x ) ∣ q ( x ) p(x)|q(x) p(x)q(x)的充要条件是 G ( p ( x ) ) ⊂ G ( q ( x ) ) G(p(x)) \subset G(q(x)) G(p(x))G(q(x))
——该定理说明:可用n级LFSR产生的序列,也可用级数更多的LFSR来产生。
定义:设 p ( x ) p(x) p(x) G F ( 2 ) GF(2) GF(2)上的多项式,使 p ( x ) ∣ ( x p − 1 ) p(x)|(x^p - 1) p(x)(xp1)成立的最小正整数 p p p称为 p ( x ) p(x) p(x)的周期或阶。
定理2:若序列 { a i } \{ a_i \} {ai}的特征多项式 p ( x ) p(x) p(x)定义在 G F ( 2 ) GF(2) GF(2)上, p p p p ( x ) p(x) p(x)的周期,则 { a i } \{ a_i \} {ai}的周期 r ∣ p r|p rp
——该定理说明:n级LFSR输出序列的周期 r r r,不依赖于初始条件,而依赖于特征多项式 p ( x ) p(x) p(x)

m序列产生的条件

不可约多项式

定理:设 p ( x ) p(x) p(x)是n次不可约多项式,周期为m,序列 { a i } ∈ G ( p ( x ) ) \{ a_i \} \in G(p(x)) {ai}G(p(x)),则 { a i } \{ a_i \} {ai}的周期为m。

m序列产生的必要条件

定理:n级LFSR产生的序列有最大周期 2 n − 1 2^{n - 1} 2n1的必要条件是其特征多项式为不可约的。
该定理的逆不成立:即LFSR的特征多项式为不可约多项式时,其输出序列不一定是m序列。

反例

f ( x ) = x 4 + x 3 + x 2 + x + 1 f(x) = x^4 + x^3 + x^2 + x + 1 f(x)=x4+x3+x2+x+1 G F ( 2 ) GF(2) GF(2)上的不可约多项式,这可由 x , x + 1 , x 2 + x + 1 x, x + 1, x^2 + x + 1 x,x+1,x2+x+1都不能整除 f ( x ) f(x) f(x)得到。以 f ( x ) f(x) f(x)为特征多项式的LFSR的输出序列可由:
a k = a k − 1 ⊕ a k − 2 ⊕ a k − 3 ⊕ a k − 4 ( k ≥ 4 ) a_k = a_{k - 1} \oplus a_{k - 2} \oplus a_{k - 3} \oplus a_{k - 4}(k \ge 4) ak=ak1ak2ak3ak4(k4)
和给定的初始状态求出,设初始状态为0001,则输出序列为000110001100011…,周期为5,不是m序列。

m序列产生的充要条件

定义:若n次不可约多项式p(x)的阶为 2 n − 1 2^n - 1 2n1,则称 p ( x ) p(x) p(x)是n次本原多项式
定理:设 { a i } ∈ G ( p ( x ) ) , { a i } \{ a_i \} \in G(p(x)), \{ a_i \} {ai}G(p(x)),{ai}为m序列的充要条件是 p ( x p(x p(x)为本原多项式
对于任意的正整数n,至少存在一个n次本原多项式。所以对于任意的n级LFSR,至少存在一种连接方式使其输出序列为m序列。

m序列示例

p ( x ) = x 4 + x + 1 p(x) = x^4 + x + 1 p(x)=x4+x+1,若LFSR以 p ( x ) p(x) p(x)为特征多项式,则输出序列的递推关系为:
a k = a k − 1 ⊕ a k − 4 ( k ≥ 4 ) a_k = a_{k-1} \oplus a_{k - 4}(k \ge 4) ak=ak1ak4(k4)
若初始状态为1001,则输出为:100100011110101100100011110101…
周期为 2 4 − 1 = 15 2^4 - 1 = 15 241=15
任意初始状态为1000,则输出为:

  • 1000011110101100010000111101011000…
  • 100100011110101100100011110101…

m序列的伪随机性

m序列满足Golomb的3个随机性公设。
定理: G F ( 2 ) GF(2) GF(2)上的n长m序列 { a i } \{ a_i \} {ai}具有如下性质:

  1. 在一个周期内,0、1出现的次数分别为 2 n − 1 − 1 2^{n - 1} - 1 2n11 2 n − 1 2^{n - 1} 2n1
  2. 在一个周期内,总游程数为 2 n − 1 2^{n - 1} 2n1;对 1 ≤ i ≤ n − 2 1 \le i \le n - 2 1in2,长为i的游程有 2 n − i − 1 − 1 2^{n - i - 1} - 1 2ni11个,且0、1游程各半;长为n-1的0游程一个,长为n的1游程一个。
  3. { a i } \{ a_i \} {ai}的自相关函数为:
    R ( t ) = { 2 n − 1 , t = 0 − 1 , 0 ≤ t ≤ 2 n − 2 R(t) = \left \{ \begin{array}{c} 2^n - 1, & t=0 \\ -1, & 0 \le t \le 2^n -2 \end{array} \right . R(t)={2n1,1,t=00t2n2

m序列的安全性

  • 寻找m序列的递推关系式。
    • 已知一段序列,如果知道其反馈多项式,就可以将其后的序列依次求出
    • 已知序列如何获得相应的反馈多项式(线性递推式):
      • 解方程方法——已知序列 { a i } \{ a_i \} {ai}是由n级线性移位寄存器产生的,并且知道 { a i } \{ a_i \} {ai}连续2n位,可用解线性方程组的方法得到反馈多项式
      • 线性反馈移位寄存器综合解——Berlekamp-Massey算法
解方程方法

设序列 a = ( 01111000 … ) a = (01111000…) a=(01111000)是由4级线性移位寄存器所产生序列的连续8个信号,求该移位寄存器的线性递推式。

解:设该4级移位寄存器的线性递推式为:
a n = c 1 a n − 1 ⊕ c 2 a n − 2 ⊕ c 3 a n − 3 ⊕ c 4 a n − 4 ( n ≥ 4 ) a_n = c_1a_{n - 1} \oplus c_2a_{n - 2} \oplus c_3a_{n - 3} \oplus c_4a_{n - 4} (n \ge 4) an=c1an1c2an2c3an3c4an4(n4)
由于知道周期序列的连续8各信号,不妨设为开头的8个信号,即:
a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 = 01111000 a_0a_1a_2a_3a_4a_5a_6a_7 = 01111000 a0a1a2a3a4a5a6a7=01111000
n = 4 n = 4 n=4时,由递推式可得: a 4 = c 1 a 3 ⊕ c 2 a 2 ⊕ c 3 a 1 ⊕ c 4 a 0 a_4 = c_1a_3 \oplus c_2a_2 \oplus c_3a_1 \oplus c_4a_0 a4=c1a3c2a2c3a1c4a0
即:
c 1 ⊕ c 2 ⊕ c 3 = 1 \begin{array}{c} c_1 \oplus c_2 \oplus c_3 = 1 \end{array} c1c2c3=1
同理可得:
c 1 ⊕ c 2 ⊕ c 3 ⊕ c 4 = 0 c 2 ⊕ c 3 ⊕ c 4 = 0 c 3 ⊕ c 4 = 0 \begin{array}{c} c_1 \oplus c_2 \oplus c_3 \oplus c_4 = 0 \\ c_2 \oplus c_3 \oplus c_4 = 0 \\ c_3 \oplus c_4 = 0 \\ \end{array} c1c2c3c4=0c2c3c4=0c3c4=0
解方程组得:
c 1 = 0 , c 2 = 0 , c 3 = 1 , c 4 = 1 c_1 = 0, c_2 = 0, c_3 = 1, c_4 = 1 c1=0,c2=0,c3=1,c4=1
故所求移位寄存器递推式为: a n = a n − 3 ⊕ a n − 4 ( n ≥ 4 ) a_n = a_{n - 3} \oplus a_{n - 4}(n \ge 4) an=an3an4(n4)

线性反馈移位寄存器综合解

根据密码学的需要,对线性反馈移位寄存器(LFSR),主要考虑下面两个问题:

  • 如何利用级数尽可能短的LFSR产生周期大、随机性能良好的序列。
    • 这是从密钥生成角度考虑,用最小的代价产生尽可能好的、参与密码变换的序列。
  • 当已知一个长为N序列 a ‾ \underline{a} a时,如何构造一个级数尽可能小的LFSR来产生它。
    • 这是从密码分析角度来考虑,要想用线性方法重构密钥序列所必须付出的最小代价。
线性综合解

a ‾ = ( a 0 , a 1 , . . . , a N − 1 ) \underline{a} = (a_0, a_1,..., a_{N - 1}) a=(a0,a1,...,aN1) F 2 F_2 F2上的长度为N的序列,而 f ( x ) = c 0 + c 1 x + c 2 x 2 + ⋅ ⋅ ⋅ + c l x l f(x) = c_0 + c_1x + c_2x^2 + ··· + c_lx^l f(x)=c0+c1x+c2x2++clxl F 2 F_2 F2上的多项式, c 0 = 1 c_0 = 1 c0=1
如果序列中的元素满足递推关系:
a k = c 1 a k − 1 ⊕ c 2 a k − 2 ⊕ ⋅ ⋅ ⋅ ⊕ c l a k − l , k = l , l + 1 , . . . , N − 1 a_k = c_1a_{k - 1} \oplus c_2a_{k - 2} \oplus ··· \oplus c_la_{k - l}, k = l, l + 1,..., N - 1 ak=c1ak1c2ak2clakl,k=l,l+1,...,N1
则称 < f ( x ) , l > <f(x), l> <f(x),l>产生二元序列 a ‾ \underline{a} a。其中 < f ( x ) , l > <f(x), l> <f(x),l>表示以 f ( x ) f(x) f(x)为特征多项式的 l l l级线性移位寄存器。
如果 f ( x ) f(x) f(x)是一个能产生 a ‾ \underline{a} a并且级数最小的线性移位寄存器的特征多项式, l l l是该移位寄存器的级数,则称 < f ( x ) , l > <f(x), l> <f(x),l>为序列 a ‾ \underline{a} a的线性综合解。

线性移位寄存器的综合问题

线性移位寄存器的综合问题可表述为:给定一个N长二元序列 a ‾ \underline{a} a,如何求出产生这一序列的最小级数的线性移位寄存器,即最短的线性移存器。

  1. 特征多项式 f ( x ) f(x) f(x)的次数 ≤ l \le l l。因为产生 a ‾ \underline{a} a且级数最小的线性移位寄存器可能是退化的,在这种情况下 f ( x ) f(x) f(x)的次数 ≤ l \le l l;并且此时 f ( x ) f(x) f(x)中的 c l = 0 c_l = 0 cl=0,因此在特征多项式 f ( x ) f(x) f(x)中仅要求 c 0 = 1 c_0 = 1 c0=1,但不要求 c 1 = 1 c_1 = 1 c1=1
  2. 规定:0级线性移位寄存器是以 f ( x ) = 1 f(x) = 1 f(x)=1为特征多项式的线性移位寄存器,且 n n n ( n = 1 , 2 , … , N ) (n = 1, 2,…, N) (n=1,2,,N)全零序列,仅由0级线性移位寄存器产生。事实上,以 f ( x ) = 1 f(x)=1 f(x)=1为反馈特征多项式的递归关系式是: a k = 0 , k = 0 , 1 , . . . , n − 1 a_k = 0, k = 0, 1,..., n-1 ak=0,k=0,1,...,n1。因此,这一规定是合理的。
  3. 给定一个N长二元序列 a ‾ \underline{a} a,求能产生 a ‾ \underline{a} a并且级数最小的线性移位寄存器,就是求 a ‾ \underline{a} a的线性综合解。利用B-M算法可以有效的求出。
Berlekamp-Massey算法(B-M算法)

用归纳法求出一系列线性移位寄存器:
< f n ( x ) , l n > δ 0 f n ( x ) ≤ l n , n = 1 , 2 , . . . , N <f_n(x), l_n> \delta ^ 0 f_n(x) \le l_n, n = 1, 2,..., N <fn(x),ln>δ0fn(x)ln,n=1,2,...,N
每一个 < f n ( x ) , l n > <f_n(x), l_n> <fn(x),ln>都是产生序列 a ‾ \underline{a} a的前n项的最短线性移位寄存器,在 < f n ( x ) , l n > <f_n(x), l_n> <fn(x),ln>的基础上构造相应的 < f n + 1 ( x ) , l n + 1 > <f_{n + 1}(x), l_{n + 1}> <fn+1(x),ln+1>,使得 < f n + 1 ( x ) , l n + 1 > <f_{n + 1}(x), l_{n + 1}> <fn+1(x),ln+1>是产生给定序列前n+1项的最短移存器,则最后得到的 < f n ( x ) , l n > <f_n(x), l_n> <fn(x),ln>就是产生给定N长二元序列a的最短的线性移位寄存器。

B-M算法的具体步骤

任意给定一个N长序列 a ‾ = ( a 0 , a 1 , . . . , a N − 1 \underline{a} = (a_0, a_1,..., a_{N - 1} a=(a0,a1,...,aN1,按n归纳定义:
< f n ( x ) , l n > n = 0 , 1 , 2 , . . . , N − 1 <f_n(x), l_n> n=0, 1, 2,..., N - 1 <fn(x),ln>n=0,1,2,...,N1

  1. 取初始值: f 0 ( x ) = 1 , l 0 = 0 f_0(x) = 1, l_0 = 0 f0(x)=1,l0=0
  2. < f 0 ( x ) , l 0 > , < f 1 ( x ) , l 1 > , . . . , < f n ( x ) , l n > ( 0 ≤ n ≤ N ) <f_0(x), l_0>, <f_1(x), l_1>,..., <f_n(x), l_n>(0 \le n \le N) <f0(x),l0>,<f1(x),l1>,...,<fn(x),ln>(0nN)均已求得,且 l 0 ≤ l 1 ≤ . . . ≤ l n l_0 \le l_1 \le ... \le l_n l0l1...ln,记 f n ( x ) = c 0 ( n ) + c 1 ( n ) x + ⋅ ⋅ ⋅ + c l n ( n ) x l n , c 0 ( n ) = 1 , f_n(x) = c_0^{(n)} + c_1^{(n)}x +···+c_{l_n}^{(n)}x^{l_n}, c_0^{(n)} = 1, fn(x)=c0(n)+c1(n)x++cln(n)xln,c0(n)=1,再计算: d n = c 0 ( n ) a n + c 1 ( n ) a n − 1 + ⋅ ⋅ ⋅ + c l n ( n ) a n − l n d_n = c_0^{(n)}a_n + c_1^{(n)}a_{n - 1} +···+c_{l_n}^{(n)}a_{n - l_n} dn=c0(n)an+c1(n)an1++cln(n)anln,称 d n d_n dn为第n步差值。然后分两种情形讨论:
    1. d n = 0 d_n = 0 dn=0,则令: f n + 1 ( x ) = f n ( x ) , l n + 1 = l n f_{n + 1}(x) = f_n(x), l_{n + 1} = l_n fn+1(x)=fn(x),ln+1=ln
    2. d n = 1 d_n = 1 dn=1,则需区分以下两种情形:
      1. 当: l 0 = l 1 = ⋅ ⋅ ⋅ = l n = 0 l_0 = l_1 = ··· = l_n = 0 l0=l1==ln=0时,取: f n + 1 ( x ) = 1 + x n + 1 , l n + 1 = n + 1 f_{n + 1}(x) = 1 + x^{n + 1}, l_{n + 1} = n + 1 fn+1(x)=1+xn+1,ln+1=n+1
      2. 当有 m ( 0 ≤ m < n ) , m(0 \le m < n), m(0m<n)使: l m < l m + 1 = l m + 2 = ⋅ ⋅ ⋅ = l n l_m < l_{m + 1} = l_{m + 2} = ··· = l_n lm<lm+1=lm+2==ln ,便置: f n + 1 ( x ) = f n ( x ) + x n − m f m ( x ) , l n + 1 = m a x { l n , n + 1 − l n } f_{n + 1}(x) = f_n(x) + x^{n - m}f_m(x), l_{n + 1} = max\{ l_n, n + 1 - l_n \} fn+1(x)=fn(x)+xnmfm(x),ln+1=max{ln,n+1ln}

最后得到的 < f n ( x ) , l n > <f_n(x), l_n> <fn(x),ln>便是产生序列 a ‾ \underline{a} a的最短线性移位寄存器。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北溪入江流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值