利用密钥k产生一个密钥流。密钥流由密钥流发生器f产生 $$z_i = fk,delta_i)$$。 delta_i)是加密器中记忆元件在时刻i的状态。
分组密码与流密码的区别在于有无记忆性。流密码的最初的滚动密钥由函数f、密钥k以及指定的初始状态delta_0)决定,后续的密钥则可以通过输入加密器的明文,来影响加密器中的记忆元件来改变其状态。
同步流密码
根据加密器中的记忆元件的存储状态delta_i)是否依赖于输入的明文字符,流密码可以分为同步和自同步两种。
delta_i)独立于明文字符的叫做同步流密码,否则叫做自同步流密码。
由于同步流密码密钥产生不依赖于此前的明文字符,因此可以将同步流密码的加密器分为密钥流产生器以及加密变换器两部分。 同步流密码加密变换可以有多种选择,但只要保证变换可逆即可。
密钥流产生器
一般可以将密钥流产生器看成一个参数为k的有限状态自动机,由一个输出符号集、一个状态集、两个函数(状态转移函数和输出函数)、以及一个初始状态组成。其设计的关键在于找出适当的状态转移函数和输出函数,使得输出序列满足密钥流序列应满足的几个条件。并且要求简单和易于实现,因此,必须采用非线性函数。
由于具有非线性的状态转移函数下的有限状态自动机理论很不完善,相应的密钥流产生器的分析工作也受到了极大的限制。
线性反馈移位寄存器
GF(2)上一个n级反馈移位寄存器由n个二元存储器与一个反馈函数f组成。每一个二元存储器称为移位存储器的一级,在任意时刻,这些级的内容构成该反馈移位寄存器的状态,每一个状态对应于GF(2)上的一个n维向量,因此共有2^n种可能的状态。
当第i个移位时钟脉冲到来的时候,每一级存储器都会将其内容移交给下一级存储器。
如果移位存储器的反馈函数f是a_1,a_2,…,a_n的线性函数,则称之为线性反馈移位寄存器LFSR
[fa_1,a_2,…,a_n) = c_n * a_1 xor c_{n-1} * a_2 xor … xor c_1 * a_n
]
其中常数c_i =1 或 0 xor为异或运算符。
在线性移位寄存器中总是假定c_1,c_2,…,c_n中至少有一个不为0,否则f总是为0。这样,在n个脉冲之后,其状态比为00…0,并持续下去。因此,一般对于n级线性反馈移位寄存器来说,总是假定c_n=1
线性反馈移位寄存器的输出序列性质完全由其反馈函数决定。n级线性反馈移位寄存器最多有2n个不同的状态。但周期是小于等于2n – 1。周期达到最大值的序列称为m序列。
线性移位寄存器的一元多项式表示
n级线性移位寄存器的输出序列{a_i}满足如下关系
[a_{n+k} = c_1 * a{n+k-1} xor c_2 * a{n+k-2} xor … xor c_n * a{k}
]
对于任何k>=1成立,这种递推关系可以利用一个一元高次多项式表示:
[px) = 1 + c_1 * x + … + c_{n-1} * x^{n-1} + c_n * x^n
]
表示,称这个多项式为LFSR的特征多项式。
设px)是GF2)上的多项式,使px)|x^p – 1)的最小p称为px)的周期或阶
若序列{a_t}的特征多项式px)定义在GF2)上,p是px)的周期,则{a_t}的周期为r|p
n级LFSR产生的序列有最大周期的必要条件是其特征多项式为不可约的
设{a_i}∈Gpx)) {a_i}为m序列的充要条件是px)为本原多项式(即n次不可约多项式px)的阶为2^n – 1)