2.2.3 流密码

2.2.3 流密码

1.随机数和伪随机数介绍

在对多样的网络安全应用程序进行加密的过程中,随机数具有很重要的作用。根据密码学原理,校验随机数的随机性有以下3个标准。

①统计学伪随机性。统计学伪随机性指的是在给定的随机比特流样本中,1和0出现的频率必须大致相同。

图2.8 4种工作模式的安全性、效率和容错性

②密码学安全的伪随机性,即给定随机样本的一部分和随机算法,不能有效地演算出随机样本的剩余部分。

③真随机性。其定义为随机样本不可重现。实际上只要给定边界条件,真随机数并不存在,可是如果产生一个真随机数样本的边界条件十分复杂且难以捕捉(比如计算机系统的瞬间系统时钟),可以认为用这个方法演算出来了真随机数。

相应地,随机数也分为3类:伪随机数,满足上述标准①;密码学安全的伪随机数,满足上述标准①和②;真随机数,同时满足上述3个标准。

实际上,用通俗易懂的方式来解释真随机数(Random Number)和伪随机数(Pseudo Random Number)的本质区别就是,真随机数采用一个完全随机、不可复制的随机源作为输入端(熵源),比如计算机瞬时的电气特性、鼠标移动的坐标、计算机瞬间的系统时钟等,根据这个真随机输入端产生二进制数输出,这个过程是不可复现的(除非保留了这个熵源和输出产生规则)。而伪随机数采用一个事先约定的不变值作为输入端,这个不变值称为种子(在加密算法中即为密钥),按照确定的算法来产生一系列的被种子所决定的输出流,这个输出流在同时掌握种子和确定性算法的情况下可以被复现获得,而在没有种子的情况下,这个输出流“看起来”是随机的(Pseudo-randomness)。

图2.9和图2.10分别为真随机数发生器和伪随机数发生器的示意图。

图2.9 真随机数发生器

图2.10 伪随机数发生器

2.流密码的原理

流密码(Stream Cipher)的主要原理(如图2.11所示)是通过伪随机字节发生器(PRNG)产生性能优良的随机序列,通过该序列与明文序列的叠加(通常是用密码流和输入序列做异或运算)来输出密文序列。解密时,再用同一个随机序列与密文序列进行叠加来恢复明文。常见的流密码算法有A5、RC-4、PKZIP等。

图2.11 流密码的原理

伪随机字节发生器以初始密钥为种子,输出不断重复的周期密钥流,这个重复的周期越长,密码破解就越困难。而PRNG采用的伪随机函数(PRF)产生的周期内密码流越“随机”,对应输出的密文流也就越随机化。因此,初始密钥的长度和PRF的合理设计是保证流密码加密安全性的关键。对于密钥长度,分组密码中考虑的因素在这里同样适用。

3.流密码与分组密码的区别

分组密码是将明文分为若干组,每组长度固定,对于每一个明文组,采用设计好的算法进行加密和解密;流密码是以一个元素(一个字母或一位)作为一次加密、解密的操作元素,采用设计好的算法进行加密与解密操作。

流密码和分组密码的优点和缺点见表2.1,详述如下。

流密码是一个随时间变化的加密变换,具有转换速度快、错误传播轻的优点,硬件实现电路更简单;其缺点是低扩散性(意味着混乱性不够)、对插入及修改不敏感。

分组密码使用的是一个不随时间变化的固定变换,具有扩散性好、插入敏感等优点;其缺点是加/解密处理速度慢、错误传播严重。

流密码涉及大量的理论知识引出了众多的设计原理,也得到了广泛的分析,但许多研究成果并没有完全公开,这也许是因为流密码目前主要应用于军事和外交等机密部门的缘故。

表2.1 流密码与分组密码的优点和缺点