《经典密码学与现代密码学》书摘:
一个简单的“流加密法”需要一个“随机”的“二进制位流”作为“密钥”。通过将明文与这个“随机的密钥流”进行XOR逻辑运算,就可以生成密文。将密文与相同的“随机密钥流”进行XOR逻辑运算即可还原明文。
要实现XOR逻辑运算很简单,当作用于位一级上时,这是一个快速而有效的加密法。唯一的问题是必须解决如何生成“随机密钥流”。这之所以是一个问题,是因为“密钥流”必须是“随机”出现的,并且合法用户很容易再生该密钥流。如果密钥流是重复的位序列,容易被记住,但不很安全。而一个与明文一样长的随机位序列很难记住。因此,这是一个两难的处境,如何生成一个“随机”位序列作为“密钥流”,要求易于使用,但又不能太短以至于不安全。
解决流加密法的密钥问题:开发一个“随机位生成器”,它是基于一个短的密钥来产生密钥流的。生成器用来产生密钥流,而用户只需记住如何启动生成器即可。
设计用于生成随机位的LFSR的一个问题是,对于一个给定的LFSR,可生成最长的无重复序列位是多少。
RC4:
RC4的大小根据参数n的值而变化。RC4可以实现一个“秘密的内部状态”,对n位数,有N=2^n种可能,通常n=8。RC4可以生成总共有256个元素的数组S。RC4的每个输出都是数组S中的一个随机元素。要实现这些,需要两个处理过程:一个是“密钥调度算法”(key-scheduling algorithm,KSA),用来设置S的初始排列;一个是“伪随机生成算法”(pseudo random-generation algorithm,PRGA),用来选取随机元素并修改S的原始排序顺序。