流密码
单钥密码分为流密码和分组密码。
- 流密码的概念: 利用秘钥k产生一个密钥流z=z0z1…,c=c0c1c2…=Ez0(m0)Ez1(m1)…。密钥流由密钥流发生器f产生:zi=f(k, oi),oi是加密器中记忆元件在时刻i的状态。分组密码与流密码的区别就在于有无记忆。oi可能依赖于k, o0, m0, m1…mi-1等。
- 同步流密码: 根据状态oi是否依赖于输入的明文字符,流密码可以分为oi独立于明文字符的同步流密码,和另外的自同步流密码。
- 有限状态自动机: 有限状态自动机是一个数学模型,可分为以下3部分:
- 有限状态集
S={si|i=1, 2, ...,l}
。 - 有限输入字符集
A1 = {A1j|j = 1,2...m}
和有限输出字符集A2 = {A2k|k = 1,2...n}
- 转移函数
A2k = f1(si, A1j), Sh = f2(si, A1j)
即在状态为si,输入为A1j时输出为A2k,而状态转移为sh。
- 密钥流产生器:
同步流密码的关键是密钥流产生器。一般可以看成一个参数为k的有限状态机。
f1为非线性,f2(驱动系统)为线性,现在流行的是驱动部分为一个或多个线性反馈移位寄存器。
线性反馈移位寄存器
如果移位寄存器的反馈函数f是线性函数,则称之为线性反馈寄存器LFSR,f可以写为
f(a1,a2,...,an) = cn*a1+cn-1*a2 + ... + c1*an
,其中+为模2加法。
m序列: 周期达到最大值2^n - 1的序列称为m序列。
移位寄存器的一元多项式
设n级线性移位寄存器的输出序列{ai}满足递推关系
a(n+k) = c1*a(n+k-1) + c2*a(n+k-2) + ... +cn*ak
,这种递推关系可以用一个一元高次多项式p(x) = 1 + c1x + ... + c(n-1)x^(n-1) + cn*x^n
表示,称为LFSR的特征多项式。
- 给定序列{ai},幂级数
A ( x ) = ∑ i = 1 ∞ a i x i − 1 A(x) = \sum_{i=1}^{\infty}{a_ix^{i-1}} A(x)=i=1∑∞aixi−1
为该序列的生成函数。
- p(x) | q(x)的充要条件是
G ( p ( x ) ) ⊂ G ( q ( x ) ) G(p(x))\subset G(q(x)) G(p(x))⊂G(q(x))
-
设p(x)是GF(2)上的多项式,使p(x)|(x^p - 1)的最小p是p(x)的周期或者阶。
-
若序列{ai}的特征多项式p(X)定义在GF(2)上,p是p(X)的周期,则{ai}的周期r,满足r|p。
-
仅能被非0常数或自身的常数倍除尽,但不能被其它多项式除尽的多项式称为既约多项式或不可约多项式。
-
设p(x)是n次不可约多项式,周期为m,序列{ai}属于G(p(x)),则{ai}的周期为m。
-
n级LFSR产生的序列有最大周期2^n - 1的必要条件是其特征多项式为不可约。
-
若n次不可约多项式p(x)的阶为2^n - 1,则称p(x)是n次本原多项式。
-
设{ai}属于G(p(x)),{ai}为m序列的充要条件是p(x)为本原多项式。
m序列的伪随机性
Golomb对伪随机周期序列提出应满足下列3个公设:
- 在一个周期内,0和1的个数相差至多1
- 在序列的一个周期内,长为1的游程占游程总数的1/2,长为2 的游程占游程总数的1/(2^2)…
- 异自相关函数是一个常数。
m序列密码的破译
[外链图片转存中…(img-2SOGHQQz-1639280356919)]