流加密
概述
伪随机密钥流(keystream)由一个随机的种子(seed)通过算法(称为:PRG,pseudo-random generator)得到, k 作为种子,则 G(k) 作为实际使用的密钥进行加密解密工作。
为了保证流加密的安全性,PRG必须是不可预测的。弱算法包括 glibc random() 函数,线性同余生成器(linear congruential generator)等。
线性同余生成器
线性同余生成器中,令 r[0] 为 seed , r[i] =(a * r[i-1] + b)mod p ,其中 a,b,p 均为常数,则可轻易顺次推出整个密钥流,从而进行解密。
一次性密码本
流加密攻击
多次使用同一密码本
一种严重的错误即反复使用同一密码本对不同明文进行加密。攻击者可利用这种方式对密文进行解密。
用m表示明文,c表示密文,k表示种子,PRG表示密钥流生成算法,则:
C 1 = m 1 xor PRG (k)
C 2 = m 2 xor PRG (k)
攻击者监听到此段消息(包含两段相同密钥流加密的密文)后,即可利用:
C 1 xor C 2 得到m 1 xor m 2
足量的冗余(此处表示m 1 ,m 2 )则可破解明文。
例子
WEP
一个失败的例子即WEP网络传输协议。
该协议中服务器和客户端共享同一密钥流,该密钥流由一段24位的数据IV和一段密钥组成,表示为PRG(IV || k),通过异或操作对明文数据流加密。而IV最多组合情况为2 个(约16M大小),因而攻击者可轻易暴力破解获取IV,或通过多次截取数据包(当数据流量足够大,密钥流必定多次重复)最终得到明文。
另一个弱点在于,802.11网卡重启后自动设置IV为初始状态0。两种情况下都能表明WEP安全性并不尽如人意。
更好的解决方案是针对不同段的信息使用伪随机密钥(不同k值),例如TLS所为。
硬盘加密
当硬盘使用流加密时,同样会使用同一密码本对不同文本进行加密,因而调换两个文本中少量信息,可以得到同样的冗余结果。避免这个问题的方案通常是避免使用流加密。
CSS
eStream
参见en:Salsa20。
参考文献
参见
另一种加密思路:分组加密
流加密的实现
对称加密
免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。
- 有价值
- 一般般
- 没价值