分组密码与流密码

密码算法可以分为分组密码流密码两种

分组密码(block cipher)

是每次只能处理特定长度的一块数据的一类密码算法,在这的“一块”就被称为分组(block)。一个分组的bit长度就被称为分组长度(block length)。
DES和三重DES的分组长度都是64bit。这些密码算法一次只能加密64bit的明文,并生成64bit的密文。
AES的分组长度是128bit。因此AES一次可以加密128bit的明文,并生成128bit的密文。

流密码(stream cipher)

是对数据流进行连续处理的一类密码算法。流密码中一般以1bit、8bit或32bit等单位进行加密和解密。

差别

分组密码处理完一个分组就结束了,因此不需要通过内部状态来记录加密的进度;
流密码是对遗传数据流进行连续处理,因此需要保持内部状态。

模式

什么是模式

分组密码算法只能加密固定长度的分组,但是我们需要加密的明文长度可能会超过分组密码的分组长度,这时候就需要分组密码算法进行迭代,以便将一段很长的明文全部加密。而迭代的方法就成为密码的模式(mdoe)

为什么不选择将明文分割然后进行加密?

将明文分割并进行加密的方法叫做ECB模式,会产生安全漏洞。

模式的分类

  1. ECB模式:Electronic CodeBook Mode(电子密码本模式)
  2. CBC模式:Cipher Block Chaining Mode(密码分组链接模式)
  3. CFB模式:Cipher FeedBack Mode(密文反馈模式)
  4. OFB模式:Output FeedBack Mode(输出反馈模式)
  5. CTR模式:CounTeR mode(计数器模式)

前置概念 - 明文分组与密文分组

明文分组:是指分组密码算法中作为加密对象的明文。明文分组的长度与分组密码算法的分组长度是相等的。
密文分组:是指分组密码算法将明文分组加密之后所生成的密文
image.png

主动攻击者

image.png

ECB模式

什么是ECB模式

ECB模式全称为Electronic CodeBook Mode(电子密码本模式),在ECB模式中,将明文分组加密之后的结果直接成为密文分组

ECB加密

image.png

ECB解密

image.png
使用ECB模式加密时,相同的明文分组会被转换为相同的密文分组,也就是说我们可以将其理解为“明文分组” —>“密文分组”的对应表。因此ECB被称为电子密码本模式。
当最后一个明文分组的内容小于分组长度时,需要用特定的数据进行填充(padding)

ECB模式的特点

image.png

对ECB模式的攻击

image.png

举个栗子

image.png
image.png

CBC模式

什么是CBC模式

CBC模式全称为Cipher Block Chaining Mode(密码分组链接模式),因为密文分组是像链条一样互相连接在一起的。
在CBC模式中,首先将明文分组与钱一个密文分组进行XOR,然后在进行加密。

CBC加密

image.png

CBC解密

image.png

与ECB对比

ECB模式只进行了加密,CBC模式则在加密之前进行了一次XOR

image.png

初始化向量

在加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要实现准备一个长度为一个分组的bit序列来代替“前一个密文分组”。这个bit序列称为初始化向量(Initialization Vector)IV。一般来说每次加密时都会随机产生一个不同的bit序列来作为初始化向量

CBC模式的特点

明文分组在加密之前一定会与“前一个密文分组”进行XOR运算,因此即便明文分组1和2的值是相等的,密文分组1和2的值也不一定相等。这样一来ECB的缺陷就不在CBC中存在了。
image.png
假设CBC模式的密文分组中有一些比特缺失了,那么即便是只缺失了1bit。也会导致密文分组的长度发生变化,此后的分组发生错位。因此,缺失比特的位置之后的密文分组就全部无法解密了。
image.png
image.png

CFB模式

什么是CFB模式

CFB模式的全称是 Cipher FeedBack(密文反馈模式)。在CFB模式中,前一个密文分组会被送回到密码算法的输入端。所谓反馈,就是指的返回输入端。
image.png
在ECB模式和CBC模式中,明文分组都是通过密码算法进行加密的,然而在CFB中,明文分组并没用通过密码密码算法直接进行加密。
CBC与CFB对比
image.png

初始化向量

因为第一个密文之前并没有前置的密文分组,所以需要使用初始化向量(IV)来代替

CFB模式与流密码

image.png

CFB的解密

image.png

OFB模式

什么是OFB模式

OFB模式的全称是Output-Feedback模式(输出反馈模式),在OFB模式中,密码算法的输入会反馈到密码算法的输入中。
OFB不是通过密码算法对明文直接进行加密,是通过将“明文分组”和“密码算法的输出”进行XOR来产生密文分组。与CFB模式类似

OFB的加密

image.png

OFB的解密

image.png

初始化向量

和CBC、CFB一样,OFB中同样需要使用初始化向量IV。

CFB与OFB的对比

两者之间的区别仅仅在于密码算法的输入内容。
在CFB中,密码算法输入的是前一个密文分组,将密文分组反馈到密码算法中。
在OFB中,密码算法的输入是密码算法的前一个输出,将密码算法的输出反馈到密码算法。
image.png

CTR模式

CTR模式的全称是CounTeR模式(计数器模式),CTR模式是一种通过将逐次累加的计数器进行加密来生成密钥流的**流密码**。
在CTR模式中,每个分组对应一个逐次累加的计数器,通过对计数器进行加密来生成秘钥流。
最终密文的分组是通过计数器加密得到的比特序列与明文分组进行XOR而得到的。

CTR的加密

image.png

CTR的解密

image.png

计数器的生成方法

image.png

OFB与CTR的对比

都属于流密码
image.png

CTR的特点

CTR的加密和解密使用了完全相同的结构 与OFB相似
CTR中够可以任意顺序对分组进行加密和机密,因此在加密和解密时需要用的计数器的值可以用nonce的分组序列号直接计算出来,在支持并行计算的系统中,CTR模式的速度是很快的。

错误性与机密性

image.png

选择使用哪种模式?

image.png