9.4 序列密码算法

    序列密码算法将明文逐位转换成密文 。该算法最简单的应用如图9.6所示。密钥流发生器(也称为滚动密钥发生器)输出一系列比特流:K1,K2,K3,……Ki 。密钥流(也称为滚动密钥)跟明文比特流,P1,P2,P3,……P,进行异或运算产生密文比特流。

C i =Pi⊕K

    在解密端,密文流与完全相同的密钥流异或运算恢复出明文流。

P i =C i⊕K

    由于

Pi⊕K i⊕K i = P i

    所以该方式是正确的。

    系统的安全性完全依靠密钥流发生器的内部机制。如果它的输出是无穷无尽的“0”序列,那么密文就是明文,这样整个系统一文不值。如果它吐出的是一个重复性的16比特模式,那么该算法仅是一个可忽略安全性的异或运算(参见1.4节)。如果是一系列无尽的随机流(是真正的随机,不是伪随机——见2.8节)那就有一次一密乱码本和非常完美的安全。

    实际的序列密码算法其安全性依赖于简单的异或运算和一次一密乱码本。密钥流发生器生成的看似随机的密钥流实际上是确定的,在解密的时候能很好的将其再现。密钥流发生器输出的密钥越接近随机,对密码分析者来说就越困难。

图9.6  序列密码

    然而,如果密钥流发生器每次都生成同样的密钥流的话,对攻击来说,破译该算法就容易了。举个实例看一下为什么。

    如果Eve得到一份密文和相应的明文,她就可以将两者异或恢复出密钥流。或者,如果她有两个用同一个密钥流加密的密文,她就可以让两者异或得到两个明文互相异或而成的消息。这是很容易破译的,接着她就可以用明文跟密文异或得出密钥流。

    现在,无论她再拦截到什么密文消息,她都可以用她所拥有的密钥流进行解密。另外,她还可以解密,并阅读以前截获到的消息。一旦Eve得到一明文/密文对,她就可以读懂任何东西了。

    这就是为什么所有序列密码也有密钥的原因。密钥流发生器的输出是密钥的函数。这样,Eve有一个明文/密文对,但她只能读到用特定密钥加密的消息。更换密钥,攻击者就不得不重新分析。序列密码算法对加密那些永不结束的通信数据流是特别有用的:如,两台计算机之间的T-1连接。

    密钥流发生器有三个基本组成部分(见图9.7)。内部状态描述了密钥流发生器的当前状态。两台密钥流发生器如果有相同的密钥和内部状态,那么就会产生相同的密钥流。输出函数处理内部状态,并产生密钥流;下个状态函数处理内部状态,并生成新的内部状态。