目录
1. 概述
2. ECB模式
2.1 概述
2.2 ECB模式的加密
2.3 ECB模式的解密
2.4 优点
2.5 缺点
3. CBC模式【推荐】
3.1 概述
3.2 CBC模式的加密
3.3 CBC模式的解密
3.4 优点
3.5 缺点
4. CFB模式
4.1 概述
4.2 CFB模式的加密
4.3 CFB模式的解密
4.4 优点
4.5 缺点
5. OFB模式
5.1 概述
5.2 OFB模式的加密
5.3 OFB模式的解密
5.4 CFB模式与OFB模式的对比
6. 参考
1. 概述
密码算法可以分为分组算法和流密码两种。
-
分组密码(block cipher),是每次只能处理特定长度的一块数据的一类密码算法,这里的“一块”就称为分组(block)。一个分组的比特数就称为分组长度(block length)。
-
流密码(stream cipher),是对数据流进行连续处理的一类密码算法。
DES、3DES、AES等大多数对称密码算法都属于分组密码,它们只能加密固定长度的明文。如果需要加密任意长度的明文,就需要对分组密码进行迭代,而分组密码的迭代方法就称为分组密码的“模式”。
-
DES和3DES的分组长度都是64bit(8byte),一次只能加密64bit的明文,并生成64bit的密文。
-
AES的分组长度为128bit(16byte),因此AES一次可加密128bit的明文,并生成128bit的密文。
2. ECB模式
2.1 概述
ECB模式全称Electronic CodeBook mode,电子密码本模式。
使用ECB模式加密时,相同的明文分组会被转换为相同的密文分组,也就是说,我们可以将其理解为是一个巨大的“明文分组→密文分组”的对应表,因此ECB模式也称为电子密码本模式。
当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充(padding)。
2.2 ECB模式的加密
2.3 ECB模式的解密
2.4 优点
- 一个分组损坏不影响其它分组。
- 可以并行加解密。
2.5 缺点
- 相同的明文分组会转换为相同的密文分组。
- 无需破译密码就能操纵明文(每个分组独立且前后文无关,直接增加或删除一个分组不影响其它分组解密过程的正确性)。
3. CBC模式【推荐】
3.1 概述
CBC 模式的全称是Cipher Block Chaining模式(密文分组链接模式),之所以叫这个名字,是因为密文分组是像链条一样相互连接在一起的。
在CBC模式中,将明文分组与前一个密文分组进行XOR运算,然后再进行加密。每个分组的加解密都依赖于前一个分组。而第一个分组没有前一个分组,因此需要一个初始化向量(initialization vector),通常缩写为IV。
3.2 CBC模式的加密
3.3 CBC模式的解密
3.4 优点
- 加密结果与前文相关,有利于提高加密结果的随机性。
- 可并行解密。
3.5 缺点
- 无法并行加密。
- 一个分组损坏,如果密文长度不变,则两个分组受影响。
- 一个分组损坏,如果密文长度改变,则后面所有分组受影响。
4. CFB模式
4.1 概述
CFB模式的全称Cipher FeedBack mode,密文反馈模式。
在CBC模式中,前一个密文分组会被送回到密码算法的输入端。所谓反馈,这里指的就是返回输入端的意思。
在CBC和EBC模式中,明文分组都是通过密码算法进行加密的。而在CFB模式中,明文分组并没有通过加密算法直接进行加密,明文分组和密文分组之间只有一个XOR。
CFB模式是通过将“明文分组”与“密码算法的输出”进行XOR运行生成“密文分组”。CFB模式中由密码算法生成的比特序列称为密钥流(key stream)。密码算法相当于密钥流的伪随机数生成器,而初始化向量相当于伪随机数生成器的种子。(CFB模式有点类似一次性密码本)
4.2 CFB模式的加密
4.3 CFB模式的解密
4.4 优点
- 支持并行解密。
- 不需要填充(padding)。
4.5 缺点
- 不能抵御重放攻击(replay attack)。
- 不支持并行加密。
5. OFB模式
5.1 概述
OFB 模式的全称是Output-Feedback模式(输出反馈模式)。在OFB模式中,密码算法的输出会反馈到密码算法的输入中。
OFB模式并不是通过密码算法对明文直接进行加密的,而是通过将“明文分组”和“密码算法的输出”进行XOR来产生“密文分组”的,在这一点上OFB模式和CFB模式非常相似。
5.2 OFB模式的加密
5.3 OFB模式的解密
5.4 CFB模式与OFB模式的对比
OFB模式和CFB模式的区别仅仅在于密码算法的输入。
CFB模式中,密码算法的输入是前一个密文分组,也就是将密文分组反馈到密码算法中,因此就有了“密文反馈模式”这个名字。
相对地,OFB模式中,密码算法的输入则是密码算法的前一个输出,也就是将输出反馈给密码算法,因此就有了“输出反馈模式”这个名字。
由于CFB模式中是对密文分组进行反馈的,因此必须从第一个明文分组开始按顺序进行加密,也就是说无法跳过明文分组1而先对明文分组2进行加密。
相对地,在OFB模式中,XOR所需要的比特序列(密钥流)可以事先通过密码算法生成,和明文分组无关。只要提前准备好所需的密钥流,则在实际从明文生成密文的过程中,就完全不需要动用密码算法了,只要将明文与密钥流进行xoR就可以了。和AES等密码算法相比,XOR 运算的速度是非常快的。这就意味着只要提前准备好密钥流就可以快速完成加密。换个角度来看,生成密钥流的操作和进行XOR运算的操作是可以并行的。
6. 参考
图解密码技术(第3版) (日)结城浩 著;周自恒 译; 人民邮电出版社;2016-06-01