流加密,是
对称加密算法的一种,加密和解密双方使用相同伪随机加密数据流(pseudo-randomstream)作为密钥,明文数据每次与密钥数据流顺次对应加密,得到密文数据流。实践中数据通常是一个位(bit)并用异或(xor)操作加密。
简介
在
密码学中,流加密(英语:Stream cipher),又译为流加密、
数据流加密,是一种
对称加密算法,加密和解密双方使用相同伪随机加密数据流(pseudo-random stream)作为
密钥,
明文数据每次与密钥数据流顺次对应加密,得到
密文数据流。实践中数据通常是一个
位(bit)并用
异或(xor)操作加密。
该算法解决了对称加密完善保密性(perfect secrecy)的实际操作困难。“完善保密性”由
克劳德·香农于1949年提出。由于完善保密性要求密钥长度不短于明文长度,故而实际操作存在困难,改由较短数据流通过特定算法得到密钥流。
伪随机
密钥流(keystream)由一个随机的种子(seed)通过算法(称为:PRG,pseudo-random generator)得到,k作为种子,则G(k)作为实际使用的密钥进行加密解密工作。
为了保证流加密的安全性,PRG必须是不可预测的。弱算法包括glibc random()函数,
线性同余生成器(linear congruential generator)等。
流加密过程
加密过程:首先生成一个对称秘钥,使用用户公钥加密这个对称秘钥后存储在文件头,然后用生成的对称秘钥加密文件数据存储。
解密过程:首先使用自己的私钥解密被加密的对称秘钥,再用该对称秘钥解密出数据原文。
类型
流密码基于内部状态生成密钥流的连续元素。这种状态基本上以两种方式更新:如果状态独立于明文或密文消息而改变,则密码被分类为同步流密码。相比之下,自同步流密码根据以前的密文数字更新其状态。
同步流密码
在同步流密码中,独立于明文和密文消息生成一个伪随机数字流,然后与明文(加密)或密文(解密)组合。在最常见的形式中,使用
二进制数字(
比特),并且使用独占或操作(XOR)将密钥流与明文结合。这被称为二元加法流密码。
在同步流密码中,发送方和接收方必须准确地进行解密才能成功。如果在传输过程中将数字添加到消息中或从消息中删除数字,则同步丢失。为了恢复同步,可以系统地尝试各种偏移量以获得正确的解密。另一种方法是在输出中的标准点处用标记标记密文。
但是,如果一个数字在传输中被损坏而不是被添加或丢失,则明文中只有一个数字会受到影响,并且错误不会传播到消息的其他部分。当传输错误率很高时,此属性非常有用;然而,这样做不太可能在没有进一步机制的情况下检测到错误。而且,由于这个特性,同步流密码非常容易受到
主动攻击:如果攻击者可以改变密文中的数字,他可能能够对相应的明文位进行可预测的改变;例如,翻转密文中的一位会导致相同的位在明文中翻转。
自同步流密码
另一种方法使用几个前N个密文数字来计算密钥流。这种方案被称为自同步流密码,异步流密码或密文自动密钥(CTAK)。自同步的想法在1946年获得专利,其优点是接收器在接收到N个密文数字后会自动与密钥流生成器同步,如果数字被丢弃或添加到消息流中,更容易恢复。一位数错误的效果有限,仅影响N个明文数字。
自同步流密码的一个例子是密码反馈(OFB)模式中的分组密码。
例子
WEP
更好的解决方案是针对不同段的信息使用伪随机密钥(不同k值),例如
TLS所为。
硬盘加密
当
硬盘使用流加密时,同样会使用同一密码本对不同文本进行加密,因而调换两个文本中少量信息,可以得到同样的冗余结果。避免这个问题的方案通常是避免使用流加密。
CSS
内容扰乱系统(
英语:Content Scramble System,CSS),是通过种子生成密钥,对
DVD进行
流加密的技术。它也作为
数字版权管理系统,曾应用于几乎所有的
DVD光盘。CSS有一个40-bit的流加密算法,1996年首次投入使用,1999年被首次破解。
CSS目前已被更高级的加密技术如运用于高清DVD(HD DVD)和
蓝光的AES,
AACS所取代。它们分别拥有56和128个比特的密钥长度。