1 什么是序列密码?
使用序列密码对某一消息m执行加密操作时一般是先将m分成连续的符合(一般为比特串),m=m1m2m3…;然后使用密钥流k=k1k2k3...中的第i个元素ki对明文消息的第i个元素mi执行加密变换,i=1,2,3...;所有的加密输出连接在一起就构成了对m执行加密后的密文。
2 序列密码实现原理
很容易想到,使用序列密码对消息m进行加密时,最简单的做法就是让密钥流中的第i个比特与明文串中的对应比特直接做XOR运算。
由于实现XOR逻辑运算非常简单,因此这样的加/解密操作是快速有效的。如果这里的密钥流是完全随机的,与明文相同长度的比特串,对应的密码被称为一次一密体制。显然,此时明文串与密文串之间是相互独立的。不知道密钥的攻击者即是守候在公开信道上进而得到密文串,也无法获得关于明文的任何信息。
使用一次一密体制需要解决如何生成随机密码流的问题:密钥流必须是随机实现的,并且合法用户可以很容易的再生该密钥流。一方面,一个与明文一样长的随机位序列很难记住;另一方面,如果密钥流是重复的位序列,虽然容易记住但很不安全。因此,这是一个两难的问题:如何生成一个可以用做密钥流的“随机”比特序列,要求既易于使用,又不能太短以至于不安全。在通常使用的序列密码中,加解密所需要的这种序列是由一个确定性的密钥流生成器产生的,该生成器的输入是一个容易记住的密钥,称之为密钥流生成器的初始密钥和种子密钥。因此,严格来说,密钥流序列都是伪随机序列。流密码的安全等级完全取决于密钥流的安全性。因此什么样的伪随机序列是安全可靠的密钥流序列,如何构造这种序列就是流密码研究的关键问题。实用的流密码是以少量的,一定长度的种子密钥经过逻辑运算产生周期较长,可用于加解密运算的伪随机序列。