密码学学习记录(三)
《图解密码技术》[1]学习记录
密码算法可以分为分组密码(block cipher)和流密码。
分组密码只能加密固定长度的明文,因为不知道明文的长度,所以一般需要对分组密码进行迭代,而迭代的方法就被称为分组密码的模式(mode),每一段固定长度称为分组(block),一个分组的比特数称为分组长度(block length),例如DES和三重DES的分组长度为64比特。
流密码则可以对数据流连续处理,一般以1比特、8比特或32比特为单位进行加密或解密
分组密码
分组密码的主要模式有:
- ECB 模式:Electronic CodeBook mode(电子密码本模式 )
- CBC 模式:Cipher Block Chainingmode(密码分组链接模式)
- CFB 模式:Cipher FeedBack mode(密文反馈模式 )
- OFB 模式:Output FeedBack mode(输出反馈模式)
- CTR 模式:CounTeR mode(计数器模式)
在所有的分组密码工作模式中,ECB(电子密码本)模式是最直观的一种:当明文较长时,将其划分为多个等长的块,再对每个块分别进行加密。然而,ECB也是最不安全的一种模式,很容易导致一系列安全漏洞,因此在实践中应尽量避免使用。
ECB模式
明文和密文是一一对应的关系,因此很容易就能看出规律,将密文中的重复组合作为线索,就有可能破译出密码,因此ECB模式存在一定风险。
对ECB模式的攻击
因为ECB模式是对明文分组后加密,而分组长度是固定的,因此攻击者甚至都不需要解密就可以改变解密后的明文,也就是调换分组顺序(或者删除和复制密文分组)就可以实现攻击。
CBC模式
加密方式
首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。
由于第一个明文分组前面不存在密文分组,因此需要提供一个分组长度的比特序列来代替“前一个密文分组”,
称为初始化向量(initialization vector, IV), 一般来说,每次加密使用的初始化向量都是随机的。
因为CBC模式每个分组的加密都要依赖前一个密文分组,所以中间如果存在密文分组比特缺失,会导致密文分组长度发生变化,进而导致后面分组出现变化以至于无法解密。
对CBC模式的攻击
攻击者可以对初始化向量进行比特反转,也就是比特反转攻击,导致对应明文分组解密后的相应的比特也反转。
应用实例
通信协议之一IPsec,使用的CBC模式来确保通信机密性。
CFB模式
将前一个密文分组加密后再和明文分组进行XOR运算得到密文
同理,和CBC模式一样,CFB模式也需要IV,也就是初始化向量。
“前一个密文分组”使用密码算法进行加密后得到的比特序列称为 密钥流(key stream) 。
明文分组可以被逐比特加密,因此可以将CFB模式看作是一种使用分组密码来实现流密码的方式。
对CFB模式的攻击
可以使用 重放攻击(reply attack)
截获第一次的密文分组,当发送者再次发送消息的时候将密文分组替换成第一次的密文分组,接收到信息的人不知道是传输错误还是被修改,此时要做出正确判断需要用到消息认证码,
OFB模式
输出反馈模式,将初始化向量经过加密后与明文分组进行XOR运算得到密文分组
OFB和CFB的算法很相似,只是和明文分组进行XOR运算的输入不同
CTR模式
CTR模式是一种通过将逐次累加的计数器加密来生成密钥流的流密码
计数器的生成方法
每次加密都会生成不同的值(nonce),当分组长度为16字节时(128比特),计数器一般是下面这种形式。
前8个字节为nonce,每次加密都不同,后八个字节为分组序号,会逐次累加。
分组密码模式比较表
模式 | 名称 | 优点 | 缺点 | 备注 |
---|---|---|---|---|
ECB模式 | Electronic CodeBook电子密码本模式 | ·简单 ·快速 ·支持并行计算(加密、解密) |
·明文中的重复排列会反映在密文中 ·通过删除、替换密文分组可以对明文进行操作 ·对包含某些比特错误的密文进行解密时,对应 的分组会出错 ·不能抵御重放攻击 |
不应使用 |
CBC模式 | Cipher Block Chaining 密文分组链接模式 |
·明文的重复排列不会反映在密文中 ·支持并行计算(仅解密) ·能够解密任意密文分组 |
·对包含某些错误比特的密文进行解密时,第一 个分组的全部比特以及后一个分组的相应比特会出错 ·加密不支持并行计算 |
推荐使用 |
CFB模式 | Cipher-FeedBack 密文反馈模式 |
·不需要填充(padding) ·支持并行计算(仅解密) ·能够解密任意密文分组 |
·加密不支持并行计算 ·对包含某些错误比特的密文进行解密时,第一个 分组的全部比特以及后一个分组的相应比特会出错 ·不能抵御重放攻击 |
现在已不使用 推荐用CTR模式代替 |
OFB模式 | Output- FeedBack 输出反馈模式 |
·不需要填充( padding ) ·可事先进行加密、解密的准备 ·加密、解密使用相同结构 ·对包含某些错误比特的密文 进行解密时,只有明文中相 对应的比特会出错 |
·不支持并行计算 ·主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转 |
推荐用CTR模式代替 |
CTR模式 | CountTeR 计数器模式 |
·不需要填充( padding ) ·可事先进行加密、解密的准备 ·加密、解密使用相同结构 ·对包含某些错误比特的密文 进行解密时,只有明文中相 对应的比特会出错 ·支持并行计算(加密、解密) |
主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转 | 推荐使用 |
参考文献:
结城浩. 图解密码技术[M]. 周自恒,译. 第2版. 北京:人民邮电出版社, 2014. ↩︎