分组密码的模式笔记(二)

文章目录

  • CFB模式
    • 初始化向量
    • CFB模式与流密码
    • 对CFB模式的攻击
  • OFB模式
    • 初始化向量
    • OFB模式和CFB模式对比
  • CTR模式
    • OFB模式和CTR模式对比
    • CTR模式的特点

CFB模式

CFB模式全称是Cipher FeedBack模式(密文反馈模式)。在CFB模式中,前一个密文分组会被送回到密码算法的输入端。所谓反馈,这里指的就是返回输入端的意思。
在ECB和CBC模式中,明文分组都是通过密码算法进行加密的,然而在CFB模式中,明文分组并没有通过密码算法来直接进行加密。
在CBC模式中,明文分组和密文分组之间有XOR和密码算法两个步骤,而在CFB模式中,明文分组和密文分组之间只有XOR。

初始化向量

再生成第一个密文分组时,是不存在前一个输出的数据,因此需要使用初始化向量来代替,这一点是和CBC模式相同的。

CFB模式与流密码

其实CFB模式和一次性密码本很相似,一次性密码本是通过将“明文”与“随机比特序列”进行XOR运算来生成“密文”的。而CFB模式则通过将“明文分组”与密码算法的输出进行XOR运算来生成“密文分组”的。在通过XOR加密的这一点上,两者是十分相似的。
在CFB中,密码算法的输出相当于一次性密码本中的随机比特序列。
CFB模式中通过密码算法生成的比特序列称为密钥流(Key stream)。在CFB中,密码算法就相当于用来生成密钥流的伪随机数生成器,而初始化向量就相当于伪随机数生成器的“种子”。
在CFB模式中,明文数据可以被逐比特加密,可以将CFB看成是一种使用分组密码来实现流密码的方式。

对CFB模式的攻击

对CFB可以施行重放攻击(replay attack)
例如:有一天,Alice向Bob发送了一条消息,这条消息由四个密文分组组成。主动攻击者将消息中的后3个密文分组保存了下来。转天,Alice又向Bob发送了内容不同的4个密文分组(假设Alice使用相同的密钥)。攻击者用昨天保存下来的3个密文分组将今天发送的后3个密文分组进行了替换。
于是,当Bob解密时,就只有一个可以解密成正确的明文分组。第2个会出错,而第3个和第4个则变成了被攻击者替换掉的内容,攻击者没有破译密码,就成功的将以前的电文混入了新的电文中,而第2个错误到底是通信错误呢?还是由于被攻击造成的错误呢?Bob是无法进行判断的。要做出这样的判断,则需要消息认证码机制。

OFB模式

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

初始化向量

OFB模式也是需要一个初始化的向量。

OFB模式和CFB模式对比

OFB模式和CFB模式的区别仅仅在于密码算法的输入。
CFB模式中,密码算法的输入是前一个密文分组,也就是将密文分组反馈到密码算法中,因此有“密文反馈模式”。
OFB模式中,密码算法的输入则是密码算法的前一个输出,也就是将输出反馈给密码算法,因此有“输出反馈模式”。

CTR模式

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

OFB模式和CTR模式对比

OFB模式和CTR模式都是属于流密码。OFB模式是将加密的输出反馈到输入,而CTR模式是将计数器的值用作输入。

CTR模式的特点

CTR模式的加密和解密使用了完全相同的结构,因此在程序的实现上是比较容易的。
CTR模式可以以任意的顺序对分组进行加密和解密,因此在加密和解密时需要用到的“计数器”的值可以由nonce和分组序号直接计算出来。这一性质是OFB模式所不具备的。
能够以任意的顺序处理分组,也就意味着可以实现并行运算。在支持并行运算的计算机系统中,CTR模式速度是非常快的。
CTR模式有一个比OFB模式更好的性质,在OFB模式中,如果对密钥流的一个分组进行加密后其结果碰巧和加密前是一样的,那么这一分组在以后的密钥流中就会变成同一值的不断反复,而在CTR中不会存在这一问题。

你可能感兴趣的:(加密算法)