1.分组密码的模式
1.1 分组密码与流密码
密码算法可以分为分组密码和流密码两种。
分组密码是每次只能处理特定长度的一块数据的一类密码算法,这里的“一块”就称为分组。
一个分组的比特数就称为分组长度。
流密码是对数据流进行连续处理的一类密码算法。
流密码中一般以1比特、8比特或32比特等为单位进行加密和解密。
分组密码处理完一个分组就结束了,因此不需要通过内部状态来记录加密的进度。
流密码是对一串数据流进行连续处理,因此需要保持内部状态。
1.2 什么是模式
分组密码算法只能加密固定长度的分组,但是我们需要加密的明文长度可能会超过分组密码的分组长度,这时就需要对分组密码算法进行迭代,以便将一段很长的明文全部加密。而迭代的方法就称为分组密码的模式。
模式有很多种类,分组密码的主要模式有以下5种:
ECB模式:Electronic CodeBook mode (电子密码本模式)
CBC模式:Cipher Block Chaining mode (密码分组链接模式)
CFB模式:Cipher FeedBack mode (密文反馈模式)
OFB模式:Output FeedBack mode (输出反馈模式)
CTR模式:CounTeR mode (计数器模式)
1.3 明文分组与密文分组
明文分组:是指分组密码算法中作为加密对象的明文,明文分组的长度与分组密码算法的分组长度是相等的。
密文分组:是指使用分组密码算法将明文分组加密之后所生成的密文。
2.ECB模式
将明文分组直接加密的方式就是ECB模式,这种模式非常简单,但由于存在弱点因此通常不会被使用。
2.1 什么是ECB模式
ECB模式的全称是Electronic CodeBook模式(电子密码本模式)。在ECB模式中,将明文分组加密之后的结果直接称为密文分组
使用ECB模式加密时,相同的明文分组会被转换为相同的密文分组。也就是说,我们可以将其理解为是一个巨大的“明文分组->密文分组”的对应表,因此ECB模式也称为电子密码本模式。
当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充。
3. CBC模式
CBC模式是将前一个密文分组与当前明文分组的内容混合起来进行加密的,这样就可以避免ECB模式的弱点。
3.1 什么是CBC模式
CBC模式的全称是Cipher Blokc Chaining模式(密文分组链接模式)
在CBC模式中,首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。
初始化向量:当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量。通常缩写为IV。一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量。
4. CFB模式
CFB模式的全称是Cipher FeedBack模式(密文反馈模式)
在CFB模式中,前一个密文分组会被送回到密码算法的输入端。所谓反馈,这里指的就是返回输入端的意思。
5. OFB模式
OFB模式的全称是Output-Feedback模式(输出反馈模式)。在OFB模式中,密码算法的输出会反馈到密码算法的输入中。
OFB模式并不是通过密码算法对明文直接进行加密的,而是通过将“明文分组”和“密码算法的输出”进行XOR来产生“密文分组”的,在这一点上OFB模式和CFB模式非常相似。
6. CTR模式
CTR模式的全称是CounTeR模式(计数器模式)。
CTR模式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码。
CTR模式中,每个分组对应一个逐次累加的计数器,并通过计数器进行加密来生成密钥流。也就是说,最终的密文分组是通过将计数器加密得到的比特数列,与明文分组进行XOR而得到的。
每次加密时都会生成一个不同的值(nonce)来作为计数器的初始值。
由于计数器的值每次都不同,因此,每个分组中将计数器进行加密所得到的密钥流也是不同的,也就是说,这种方法就是用分组密码来模拟生成随机的比特序列。
CTR模式的加密和解密使用了完全相同的结构,在实现程序上比较容易。
CTR模式中可以以任意顺序对分组进行加密和解密,因此在加密和解密时需要用到的“计数器”的值可以由nonce和分组序号直接计算出来。能够以任意顺序处理分组,就意味着能够实现并行计算,在支持并行计算的系统中,CTR模式的速度是非常快的。
6.模式比较
分组密码模式比较表: