前言
前面提到过我们可以利用随机的密钥序列对明文序列加密从而得到密文序列。但是,随机的密钥序列必须与明文等长,因而密钥序列的生成、分配、存储和使用都存在一定的困难。人们设想能否使用少量的真随机数按一定的固定规则生成“伪随机”的密钥序列代替真正的随机序列,从而产生了序列密码。因此,序列密码脱胎于一次一密密码体制。(一次使用一个密钥,且是伪随机密钥)。
主要的序列密码有LFSR(线性反馈移位寄存器),RC4,A5,初学者都可以了解清楚,这里只介绍LFSR、RC4.
介绍序列密码之前先介绍一下什么样的序列称为伪随机序列。
参照某度娘的解释:
伪随机序列:如果一个序列,一方面它是可以预先确定的,并且是可以重复地生产和复制的;一方面它又具有某种随机序列的随机特性(即统计特性),我们便称这种序列为伪随机序列。
用自己的话理解就是:伪随机序列可以按照某种规则持续不断的产生(产生源源不断的密钥),敌手通过攻破的密钥序列也不能预测出新的密钥。
伪随机性的Golomb三假设
-
平衡性假设:一个周期中0的个数和1的个数相差不超过1个。
例如:在一条长度为N的二元序列中,0信号的个数与1信号的个数是否相等或者只相差一个。
-
游程特性:长度为m的游程个数占游程总数的1/2m;0游程的个数与1游程的个数相等。
规定1:一条二元序列中形如100....01的片段称为该序列的一个0游程,形如011....10的片段为该序列的一个1游程,并称一个0游程中0的个数为该0游程的长度,称一个1游程中1的个数为该1游程的长度。 规定2:一般的,我们约定以0开头的信号片段00...01为一个0游程,约定以1开头的信号片段11...10为一个1游程,同时约定以0结束的信号片段10...00为一个0游程,约定以1结束的信号片段01...11为一个1游程。 例如:在序列000101110011中,010就是一个长度为1的1游程,101就是一个长度为1的0游程,01110就是一个长度为3的1游程,1001就是一个长度为2的0游程。
-
自相关性:自相关函数在非零点的值是一个固定的常数。
这个比较复杂,可以参考其他的资料