11.1概述
(1)常见的加密算法通常分为分组加密算法流密码加密算法两种。
(2)分组加密算法基于“分组“(block)进行操作,根据算法的不同,每个分组的长度可能不同。代表有DES、3-DES、Blowfish、IDEA、AES等。
(3)流密码加密算法每次只处理一个字节,密钥独立于消息之外,两者通过异或实现加密与解密。代表有RC4、ORYX、SEAL等。

11.2 Stream Cipher Attack
(1)在流密码的使用中,最常见的错误便是使用同一个密钥进行多次加/解密。这将使得破解流密码变得非常简单。这种攻击被称为“Reused Key Attack”,在这种攻击下,攻击者不需要知道密钥,即可还原出明文。
(2)一个网站应用使用Cookie作为用户身份的认证凭证,而Cookie的值是通过XOR加密而得到的。认证的过程就是服务器端解密Cookie后,检查明文是否合法。
(3)攻击者在不知道明文的情况下,通过改变密文,使得明文按其需要的方式发生改变的攻击方式,称为Bit-flipping Attack
(4)解决方式是验证密文的完整性,最常见的方法是增加带有KEY的MAC(消息验证码),通过MAC验证密文是否被篡改。

11.3 WEP破解
(1)一种针对流密码的攻击可能就是WEP密钥的破解。
(2)WEP在加密过程中,有两个关键因素:初始化向量,对消息的检验。

11.4 ECB模式的缺陷
(1)分组加密算法有一些通用的加密模式,如ECB、CBC、CFB、OFB、CTR等。
(2)ECB模式(电码簿模式)是最简单的一种加密模式,它的每个分组之间相对独立。但问题出在:攻击者只需要对调任意分组的密文,在经过解密后,所得明文的顺序也是经过对调的。替换某个分组密文,解密后该对应分组的明文也会被替换,而其他分组不受影响。

11.5 Padding Oracle Attack
(1)针对CBC模式,可以在不知道密钥的情况下,通过对padding bytes的尝试,还原明文,或者构造出任意明文的密文。

11.6密钥管理
(1)密码系统的安全性应该依赖于密钥的复杂性,而不应该依赖于算法的保密性。
(2)密钥管理中最常见的错误,就是将密钥硬编码在代码里。
(3)对于Web应用来说,最常见的做法是将密钥(包括密码)保存在配置文件或者数据库中,在使用时由程序读出密钥并加载进内存。

11.7 伪随机数问题
(1)伪随机数是由数学算法实现的,它真正随机的地方在于“种子(seed)”。种子一旦确定后,再通过同一伪随机数算法计算出来的随机数,其值是固定的,多次计算所得值得顺序也是固定的。