图解密码技术学习-第四章 分组密码的模式

概述

什么是模式

第三章介绍的对称密码算法DES、AES都属于分组密码,分组密码的特点是分组的长度是固定的。但是由于明文的长度不固定且基本超过分组长度,所以就需要进行多轮的迭代加密。
模式就是指的多轮迭代的方式。

模式的种类

目前模式分成5种:

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

ECB模式

概述

ECB模式应该是最直观的模式,简单的说就是直接将每个分组进行加密即可。
假设有一个35字节的明文,如果使用AES的算法,则分成三个分组。其中第三个分组需要填充成16字节。
然后针对这3个分组分别进行AES加密,加密完成后,组合起来就成为密文。

风险

  • 相同明文加密出来的密文是相同的。因为参与加密的只有明文和密钥,所以只能得出相同的密文。这个可以给攻击者通过推测猜测出明文的内容。
  • 存在被篡改的风险,可以实现无需破解密文,即可以操纵明文。
    这个风险的根本原因是因为,在加密的过程中,每个分组是互相独立的。
    例子:
    假设有明文被分成三个分组,恰好代表三个意思:
    分组1:付款人
    分组2:收款人
    分组3:金额
    怎样通过密文操纵明文呢?
    我们可以截获密文,然后将密文的分组2和分组1调整一下先后顺序,先发送分组2,再发送分组1。这样付款人和收款人就互相调换了位置。

CBC模式

概述

  • CBC模式跟上面的ECB模式的最大区别是,分组的加密不再是互相无关的独立行为,而是互相影响。
    简单的说,当前分组不再直接进行加密运算,而是先和前一个分组加密后的密文进行XOR运算后,再进行加密运算。对于第一个分组,则给定一个初始化向量进行XOR运算。
    因为前后分组是链接在一起的,所以才被称为链接模式。
  • 解密的过程是密文用密钥解密后,再和前一个分组的密文进行XOR得到最终的明文。如果是第一个分组,则和初始化向量进行XOR运算即可。
  • 解密的过程实际上只需要知道密钥即可,因为前一个分组的密文和本分组的密文是早就存在的,所以解密的过程支持分布式运算

风险

  • 如果其中一个密文的分组受到损坏,则会影响到此密文分组对应的明文解密,以及其后面一个分组的明文解密。因为这个密文分组参与到了后面分组的密文加解密的过程。
  • 如果对初始化向量的某个比特进行反转,则会对第一个分组的明文造成攻击,使得其明文的对应的比特反转,原因是参与了异或。
  • 如果是对某个密文进行比特反转,会造成其后面的分组对应比特反转,但同时会造成其对应明文的多个比特进行反转。
  • 对CBC模式的攻击效果基本是破坏性的,相对而言ECB模式的攻击效果更明显。

CFB模式

概述

  • 相对CBC模式而言,不变的地方是前面分组的结果仍旧参与到后面分组的加解密过程中,形成一个链式结构。
    改变的地方是参与的方式,更确切的说是加密的对象。
  • CBC模式是分组1的密文和分组2的明文XOR后,再针对XOR的结果进行加密。
    而CFB模式是,分组的明文不参与到加密过程中!
  • 加密过程是。分组1输出的密文进行加密,然后和分组2的明文进行XOR运算,得到分组2的密文。
    对于第一个分组,则是用初始化向量进行加密后,再和第一个分组的明文进行XOR,得到密文。
  • 解密的过程,不用解密。
    对于第一个分组而言,解密是把初始化向量进行加密,然后和密文进行XOR,就得到了明文。其他分组类似,只是初始化向量换成其前一个分组的密文。
  • 和CBC模式一样,解密的过程支持分布式运算。

风险

  • 重放攻击。CFB模式存在着被重放攻击的可能性的。
    1、假设发送了4个分组,其中攻击者保存了后三个分组(分组2、3、4)。
    2、再假设又发送了4个分组,而且加密密钥不变。
    3、攻击者将今天的后三个分组用之前保存的分组进行替换。
    4、接收者接收到了这4个分组之后,进行解密操作会得到什么情况呢?
    4.1 分组2的解密一定会失败。因为分组2的解密依赖于分组1的密文,但是由于分组1的密文已经变化,所以分组2必然失败。
    4.2 分组3、分组4的解密会成功,成功解密成之前保存的明文。因为分组3的解密依赖于分组2的密文,这个由于已经保存,所以完全没有变化,加上加密密钥不变,自然解密是成功的。同样的道理也发生在分组4上。
    至此,针对CFB模式的重放攻击就完成了。
  • 和CBC模式一样,如果某一个分组的密文存在某个比特的问题,那么会影响此分组的明文和后一个分组的明文解密。

能够造成重放攻击的根本原因在于,密文本身作为加密活动的唯一两个因子,而攻击者恰恰能获取到这两个因子

OFB模式

概述

  • OFB模式和CFB模式相同的地方是,都不是针对明文本身进行加密,明文只是作为XOR运算的因子参与进来。
  • OFB模式和CFB模式最大的区别在于,密文不再参与到XOR的运算中来,而仅仅是通过初始化向量产生的数据与明文进行XOR运算得到密文。
  • 加密流程。
    初始化向量进行加密得到加密向量1,和分组1的明文进行XOR运算,得到密文1;
    加密向量1再进行加密得到加密向量2,和分组2的明文进行XOR运算,得到密文2.
    以此类推。
  • 解密流程。向量的运算跟加密一样,只是跟密文进行XOR得到明文罢了。

特点

  • 生成XOR对象的过程跟明文没有关系,是直接通过初始化向量得到的。这可以被称为是密钥流。
  • CFB模式的那种重放攻击的风险消失了,因为密文没有参与到XOR运算中来。
  • 运算更加高效。在CBC模式和CFB模式中,后面的分组加密是必须等待前面的分组加密完成后才能进行,因为需要等待前一个分组的密文参与运算。但OFB模式中参与运算的不是前一个分组的密文,而是通过初始化向量得到的密钥流。所以完全可以提前就准备好密钥流,然后快速进行分组加密。也就是说生成密钥流和XOR远算可以并行
  • 由于密文不再参与其他分组的加解密过程,所以如果一个分组密文的某个比特受损,则不会再影响到其他分组的明文结果。

CTR模式

概述

  • CTR和OFB的相同点在于,密文同样不参与到XOR的运算中来。
  • CTR和OFB的不同点在于,OFB的密钥流是通过初始化向量的不断加密得到,而CTR是通过生成计数器不断增长+1后加密得到。
  • CTR计数器,长度是128比特(16字节)。前8个字节是叫做nonce的初始值,这个值每次加密都不相同。后8个字节则是分组序号,也就是不断+1得到的值。
  • 加密的过程就是生成一个初始的计数器。假设有8个分组,就通过初始计数器不断+1得到8个计数器值,然后再加密得到密钥流。剩下的步骤和OFB一样。

特点

  • 支持并行计算。OFB模式中,密钥流必须由前一个密钥密文加密得到,所以只能单线程等待。CTR模式中,计数器可以通过分组个数先准备好,然后后续的加密过程是相互独立的,所以可以支持并行运算。
  • 速度最快。支持并行运算自然就加快了速度。
  • 由于密文不再参与其他分组的加解密过程,所以如果一个分组密文的某个比特受损,则不会再影响到其他分组的明文结果。

分组模式的实际使用

  • ECB模式,这个已经禁止使用。
  • CBC模式,推荐使用。并没有什么特别的风险(从原理上分析,CFB模式被重放攻击的条件下,其实CBC模式应该也会被重放攻击,但是不知道为什么书中没有提到。),但是也不太清楚为什么有了CTR,还需要推荐CBC,特别的优势没看到。
  • CFB模式,目前不使用,推荐用CTR替代。这个其实是OFB/CTR 和 CBC之间的一个模式。
  • OFB模式,和CTR比较起来几乎是一回事。OFB有的CTR都有,CTR有的OFB没有。所以不适用,推荐CTR替代。
  • CTR模式,推荐使用。

你可能感兴趣的:(图解密码技术学习-第四章 分组密码的模式)