分组密码与流密码
分组密码(block cipher)
是每次只能处理特定长度的一块数据的一类密码算法,在这的“一块”就被称为分组(block)。一个分组的bit长度就被称为分组长度(block length)。
DES和三重DES的分组长度都是64bit。这些密码算法一次只能加密64bit的明文,并生成64bit的密文。
AES的分组长度是128bit。因此AES一次可以加密128bit的明文,并生成128bit的密文。
流密码(stream cipher)
是对数据流进行连续处理的一类密码算法。流密码中一般以1bit、8bit或32bit等单位进行加密和解密。
差别
分组密码处理完一个分组就结束了,因此不需要通过内部状态来记录加密的进度;
流密码是对遗传数据流进行连续处理,因此需要保持内部状态。
模式
什么是模式
分组密码算法只能加密固定长度的分组,但是我们需要加密的明文长度可能会超过分组密码的分组长度,这时候就需要分组密码算法进行迭代,以便将一段很长的明文全部加密。而迭代的方法就成为密码的模式(mdoe)
为什么不选择将明文分割然后进行加密?
模式的分类
- ECB模式:Electronic CodeBook Mode(电子密码本模式)
- CBC模式:Cipher Block Chaining Mode(密码分组链接模式)
- CFB模式:Cipher FeedBack Mode(密文反馈模式)
- OFB模式:Output FeedBack Mode(输出反馈模式)
- CTR模式:CounTeR mode(计数器模式)
前置概念 - 明文分组与密文分组
明文分组:是指分组密码算法中作为加密对象的明文。明文分组的长度与分组密码算法的分组长度是相等的。
密文分组:是指分组密码算法将明文分组加密之后所生成的密文
主动攻击者
ECB模式
什么是ECB模式
ECB模式全称为Electronic CodeBook Mode(电子密码本模式),在ECB模式中,将明文分组加密之后的结果直接成为密文分组
ECB加密
ECB解密
使用ECB模式加密时,相同的明文分组会被转换为相同的密文分组,也就是说我们可以将其理解为“明文分组” —>“密文分组”的对应表。因此ECB被称为电子密码本模式。
当最后一个明文分组的内容小于分组长度时,需要用特定的数据进行填充(padding)
ECB模式的特点
对ECB模式的攻击
举个栗子
CBC模式
什么是CBC模式
CBC模式全称为Cipher Block Chaining Mode(密码分组链接模式),因为密文分组是像链条一样互相连接在一起的。
在CBC模式中,首先将明文分组与钱一个密文分组进行XOR,然后在进行加密。
CBC加密
CBC解密
与ECB对比
ECB模式只进行了加密,CBC模式则在加密之前进行了一次XOR
初始化向量
在加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要实现准备一个长度为一个分组的bit序列来代替“前一个密文分组”。这个bit序列称为初始化向量(Initialization Vector)IV。一般来说每次加密时都会随机产生一个不同的bit序列来作为初始化向量。
CBC模式的特点
明文分组在加密之前一定会与“前一个密文分组”进行XOR运算,因此即便明文分组1和2的值是相等的,密文分组1和2的值也不一定相等。这样一来ECB的缺陷就不在CBC中存在了。
假设CBC模式的密文分组中有一些比特缺失了,那么即便是只缺失了1bit。也会导致密文分组的长度发生变化,此后的分组发生错位。因此,缺失比特的位置之后的密文分组就全部无法解密了。
CFB模式
什么是CFB模式
CFB模式的全称是 Cipher FeedBack(密文反馈模式)。在CFB模式中,前一个密文分组会被送回到密码算法的输入端。所谓反馈,就是指的返回输入端。
在ECB模式和CBC模式中,明文分组都是通过密码算法进行加密的,然而在CFB中,明文分组并没用通过密码密码算法直接进行加密。
CBC与CFB对比
初始化向量
因为第一个密文之前并没有前置的密文分组,所以需要使用初始化向量(IV)来代替
CFB模式与流密码
CFB的解密
OFB模式
什么是OFB模式
OFB模式的全称是Output-Feedback模式(输出反馈模式),在OFB模式中,密码算法的输入会反馈到密码算法的输入中。
OFB不是通过密码算法对明文直接进行加密,是通过将“明文分组”和“密码算法的输出”进行XOR来产生密文分组。与CFB模式类似
OFB的加密
OFB的解密
初始化向量
CFB与OFB的对比
两者之间的区别仅仅在于密码算法的输入内容。
在CFB中,密码算法输入的是前一个密文分组,将密文分组反馈到密码算法中。
在OFB中,密码算法的输入是密码算法的前一个输出,将密码算法的输出反馈到密码算法。
CTR模式
CTR模式的全称是CounTeR模式(计数器模式),CTR模式是一种通过将逐次累加的计数器进行加密来生成密钥流的**流密码**。
在CTR模式中,每个分组对应一个逐次累加的计数器,通过对计数器进行加密来生成秘钥流。
最终密文的分组是通过计数器加密得到的比特序列与明文分组进行XOR而得到的。
CTR的加密
CTR的解密
计数器的生成方法
OFB与CTR的对比
CTR的特点
CTR的加密和解密使用了完全相同的结构 与OFB相似
CTR中够可以任意顺序对分组进行加密和机密,因此在加密和解密时需要用的计数器的值可以用nonce的分组序列号直接计算出来,在支持并行计算的系统中,CTR模式的速度是很快的。