一、本章学习的内容
分组密码的模式:我们在 第3章 中介绍的 DES 和 AES都属于分组密码,它们 只能加密固定长度的明文。如果需要加密 任意长度的明文,就需要对分组密码进行 迭代,而 分组密码的迭代方法就称为 分组密码的 “模式”。
分组密码有很多种模式,如果 模式的选择不恰当,就无法充分保证 机密性。例如,如果使用上面骡子的故事中所提到的 ECB 模式,明文中的一些规律 就可以 通过密文 被识别出来。
本章中,我们将首先讲解 分组密码 与 流密码,然后按顺序讲解分组密码的主要模式:ECB、CBC、CFB、OFB、CTR,最后再来考察一下到底应该使用哪一种模式。
这一章可以先跳过,为了快速读完本书
二、分组密码与流密码
密码算法 可以分为 分组密码 和 流密码 两种。
分组密码 (block cipher) 是每次只能处理 特定长度的一块数据 的一类密码算法,这里的 "—块” 就称为 分组 (block)。此外,一个分组的比特数 就称为 分组长度 (block length)。
流密码 (stream cipher) 是对数据流进行连续处理的一类密码算法。流密码中一般以 1比特、8比特、32比特 等为 单位 进行加密和解密。
分组密码 处理完一个分组就结束了,因此不需要通过 内部状态 来 记录加密的进度;相对地,流密码 是对一串数据流进行连续处理,因此 需要保持内部状态。
在第3章 “对称密码” 中所介绍的算法中,只有 一次性密码本 属于 流密码,而 DES、三重DES、AES (Rijndael) 等大多数对称密码算法 都属于 分组密码。