现代密码学_电子科技大学_中国大学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=yi−ki(mod 26)
- 注:密钥为随机产生的,而且只使用一次
在现代的信息技术处理中,数据使用01串来表示,所以一次一密使用01串进行加密和解密,在明文和密码中,使用逐比特的异或来进行加解密的。
xor | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 0 |
在逻辑运算中,设
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
a⊕b=c,c⊕b=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)...
- 利用密钥
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...加密:
- 密钥流:
- 由密钥流发生器 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=zi⊕xi。
流密码的需求
- 一次一密密码是加法流密码的原型
- 如果密钥用作滚动密钥流,则加法流密码就退化成一次一密密码。
- 密码设计者的最大愿望是设计出一个滚动密钥生成器,使得密钥经其扩展成的密钥流序列具有如下性质:
- 极大的周期
- 良好的统计特性
- 抗线性分析
有限状态自动机
有限状态自动机
有限状态自动机模型
有限状态自动机是具有离散输入和输出(输入集和输出集均有限)的一种数学模型,由以下3部分组成:
- 有限状态集 S = { s i ∣ i = 1 , 2 , . . . , l } S = \{ s_i | i = 1, 2, ..., l\} S={si∣i=1,2,...,l}
- 有限输入字符集 A 1 = { A ( 1 ) j ∣ j = 1 , 2 , . . . , m } A_1 = \{ {A^{(1)}}_j | j = 1, 2,...,m \} A1={A(1)j∣j=1,2,...,m}和有限输出字符集 A 2 = { A ( 2 ) k ∣ k = 1 , 2 , . . . , n } A_2 = \{ {A^{(2)}}_k | k = 1, 2,...,n \} A2={A(2)k∣k=1,2,...,n}
- 转移函数 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
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
ψ:σi→zi,当前状态
σ
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) ai∈GF(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}) 0⩽r<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+l⇒ak=aqp(a)+r+k⇒ak=ar+k
又由于 0 ⩽ r < p ( a → ) 0 \leqslant r < p(\mathop{a}\limits_{\rightarrow}) 0⩽r<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} 011⋯110都是1或 100 ⋯ 001 ⏟ 都 是 0 \begin{matrix} \underbrace{ 100 \cdots001 } \\ 都是0 \end{matrix} 100⋯001都是0的一连串两两相邻的项分别称为 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=1∑T(−1)ak(−1)ak+l,0⩽t⩽T−1
当
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}))
t≡0(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
伪随机序列应满足的条件
- 周期 p p p要足够大,如大于 1 0 50 10^{50} 1050
- 序列 { a i } i ≥ 1 \{a_i\}_{i \ge 1} {ai}i≥1产生易于高速生成
- 当序列 { a i } i ≥ 1 \{a_i\}_{i \ge 1} {ai}i≥1的任何部分暴露时,要分析整个序列,提取产生它的电路结构信息,在计算上是不可行的,称此为不可预测性
条件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),输出可由下表给出。
一个三级反馈移位寄存器的状态和输出:
a 3 a_3 a3 | a 2 a_2 a2 | a 1 a_1 a1 | 输出 |
---|---|---|---|
1 | 0 | 1 | 1 |
1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 0 |
即输出序列为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)=c1an⊕c2an−1⊕⋅⋅⋅⊕cna1
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)=c1an⊕c2an−1⊕⋅⋅⋅⊕cna1an+1=c1an⊕c2an−1⊕⋅⋅⋅⊕cna1an+2=c1an+1⊕c2an⊕⋅⋅⋅⊕cna2......an+t=c1an+t−1⊕c2an+t−2⊕⋅⋅⋅⊕cnat,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)
反馈函数:
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+3⊕at,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 ≤2n−1
- 输出序列的周期 = 状态周期, ≤ 2 n − 1 \le 2^n - 1 ≤2n−1
选择合适的反馈函数可使序列的周期达到最大值 2 n − 1 2^n - 1 2n−1,周期达到最大值的序列称为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+k−1⊕c2an+k−2⊕⋅⋅⋅⊕cnak
用延迟算子
D
(
D
a
k
=
a
k
−
1
)
D(Da_k = a_{k - 1})
D(Dak=ak−1)作为未定元,给出的反馈多项式为:
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+...+cn−1Dn−1+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+...+cn−1xn−1+cnxn
表示,称这个多项式为LFSR的特征多项式。
根据初始状态的不同,由递推关系生成的非恒零的序列有
2
n
−
1
2^n - 1
2n−1个,记
2
n
−
1
2^n - 1
2n−1个非零序列的全体为
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=1∑xaixi−1
称为该序列的生成函数
生成函数的性质
定理:设
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+...+cn−1xn−1+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=1∑n(cn−ixn−ij=1∑iajxj−1)
一些定理和定义
根据初始状态的不同,由递推关系生成的非恒零的序列有
2
n
−
1
2^n - 1
2n−1个,记
2
n
−
1
2^n - 1
2n−1个非零序列的全体为
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)∣(xp−1)成立的最小正整数
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
r∣p
——该定理说明: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}
2n−1的必要条件是其特征多项式为不可约的。
该定理的逆不成立:即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=ak−1⊕ak−2⊕ak−3⊕ak−4(k≥4)
和给定的初始状态求出,设初始状态为0001,则输出序列为000110001100011…,周期为5,不是m序列。
m序列产生的充要条件
定义:若n次不可约多项式p(x)的阶为
2
n
−
1
2^n - 1
2n−1,则称
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=ak−1⊕ak−4(k≥4)
若初始状态为1001,则输出为:100100011110101100100011110101…
周期为
2
4
−
1
=
15
2^4 - 1 = 15
24−1=15。
任意初始状态为1000,则输出为:
- 1000011110101100010000111101011000…
- 100100011110101100100011110101…
m序列的伪随机性
m序列满足Golomb的3个随机性公设。
定理:
G
F
(
2
)
GF(2)
GF(2)上的n长m序列
{
a
i
}
\{ a_i \}
{ai}具有如下性质:
- 在一个周期内,0、1出现的次数分别为 2 n − 1 − 1 2^{n - 1} - 1 2n−1−1和 2 n − 1 2^{n - 1} 2n−1。
- 在一个周期内,总游程数为 2 n − 1 2^{n - 1} 2n−1;对 1 ≤ i ≤ n − 2 1 \le i \le n - 2 1≤i≤n−2,长为i的游程有 2 n − i − 1 − 1 2^{n - i - 1} - 1 2n−i−1−1个,且0、1游程各半;长为n-1的0游程一个,长为n的1游程一个。
-
{
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)={2n−1,−1,t=00≤t≤2n−2
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=c1an−1⊕c2an−2⊕c3an−3⊕c4an−4(n≥4)
由于知道周期序列的连续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=c1a3⊕c2a2⊕c3a1⊕c4a0
即:
c
1
⊕
c
2
⊕
c
3
=
1
\begin{array}{c} c_1 \oplus c_2 \oplus c_3 = 1 \end{array}
c1⊕c2⊕c3=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}
c1⊕c2⊕c3⊕c4=0c2⊕c3⊕c4=0c3⊕c4=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=an−3⊕an−4(n≥4)
线性反馈移位寄存器综合解
根据密码学的需要,对线性反馈移位寄存器(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,...,aN−1)是
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=c1ak−1⊕c2ak−2⊕⋅⋅⋅⊕clak−l,k=l,l+1,...,N−1
则称
<
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,如何求出产生这一序列的最小级数的线性移位寄存器,即最短的线性移存器。
- 特征多项式 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。
- 规定: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,...,n−1。因此,这一规定是合理的。
- 给定一个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,...,aN−1,按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,...,N−1
- 取初始值: f 0 ( x ) = 1 , l 0 = 0 f_0(x) = 1, l_0 = 0 f0(x)=1,l0=0
- 设
<
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>(0≤n≤N)均已求得,且
l
0
≤
l
1
≤
.
.
.
≤
l
n
l_0 \le l_1 \le ... \le l_n
l0≤l1≤...≤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)an−1+⋅⋅⋅+cln(n)an−ln,称
d
n
d_n
dn为第n步差值。然后分两种情形讨论:
- 若 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
- 若
d
n
=
1
d_n = 1
dn=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。
- 当有 m ( 0 ≤ m < n ) , m(0 \le m < n), m(0≤m<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)+xn−mfm(x),ln+1=max{ln,n+1−ln}
最后得到的 < f n ( x ) , l n > <f_n(x), l_n> <fn(x),ln>便是产生序列 a ‾ \underline{a} a的最短线性移位寄存器。