斯坦佛密码十三讲:2.流密码
密码定义
三元组(密钥,明文,密文)
一致性方程
the one time pad
密码的安全性
Shannon:密文不透露明文的信息
Pr[E(k,m0)=c] = Pr[E(k,m1)=c] for all m in M
完美安全不意味着安全,只是可以抵抗唯密文攻击
定理:如果一个密码是完美安全的,那么其密钥长度一定大于等于明文长度
所以没啥用,因为假如双方可以安全传递和明文一样长的密钥,那么他们已经可以不需要密码了
Stream Ciphers: making OTP practice
PRG(伪随机数发生器)
函数G是确定的,但是种子是随机的
安全的另一个定义
unpredictable(不可预测性)
可预测性即知道随机序列前缀可以预测后面的
可预测性:Pr[A(G(k)i)=G(k)i+1]大于等于1/2+c(c为一个很小量)
几个脆弱的PRG
线性同余方法
glibc random
可忽略和不可忽略
针对OTP的攻击
two time pad is insecure(因为密码本会被异或抵消)
所以流密码如果使用两次也是会被解密(所以不要用相同的密钥(种子))
WEP(反面教材)
密钥还是会出现循环,并且重启就会直接开始循环
改进,前缀不要简单循环,也使用PSG
no integrity(缺少完整性)
可以修改密文但是无法被检测出来
Bob -> Eve
流密码的实际应用
RC4
缺点:
1.密钥的频率不均匀,所以不安全
2.出现00的概率更大
3.密钥之间有关联,容易被破解
CSS
Linear feedback shift register(LFSR)
右移,丢掉左边,“出头”(特殊的几个寄存器)的异或结果变成第一
攻击的原理
CSS限定在40位,使用两个LFSR:17位和25位
没太听懂1:07左右
好的例子
eStream
密钥可以不变,因为有一个不会重复的r值
Salsa20(软件硬件都可以用)
PRG Security Defs
输出随机串列的可能和正常字符串可能一样(不可区分)
Statistical Tests
1.0和1的个数 2.连续两个0的概率(n/4)3…最长0的长度(log2n)
![请添加图片描述](https://img-blog.csdnimg.cn/
20201130155939573.png)
如何评价一个统计测试的好坏?
计算一下他和psg和真随机的差
如果可以被区分就说明这个psg不怎么好,被破解了
Secure PRGs: crypto definition
对所有的统计测试,他的优势都接近于0
a secure PRG is unpredictable
逆否命题也成立: a unpredictable PRG is secure
语义安全(Semantic Security)
尝试
1.无法还原密钥(不行)
2.无法还原明文(不行)
3.香农的完美安全(太强了没必要)
4.把香农的完美安全换成计算上不可知(还是过强了)
所以只用限定到攻击者能想到的明文组合就可以