密码学之分组密码操作模式

1 什么是分组密码操作模式

通常,分组密码算法(如典型的DES)是提供数据安全的一个基本构件,它以固定长度的分组作为基本的处理单位。分组密码的操作模式就是如何在各种各样的应用中使用这些基本构件。

2 常见的几种分组密码操作模式

常见的分组密码操作模式有:电子密码本模式(ECB)、密码分组链接模式(CBC)、计数器模式(CTR)、输出反馈模式(OFB)、密码反馈模式(CFB)。下面我将对这几种模式分别做介绍。

2.1 电子密码本模式(ECB)

电子密码本模式是最简单的方式,在这种模式下明文被每次处理64位,并且每个明文分组都用同一个密钥加密。由于每个64位的明文有一个唯一的密文,可以想象有一个巨大的密码本,其中对每一个可能对64位明文分组都有一个密文项与之对应。故称为“密码本”模式。整个加密过程就是把这个报文分成若干个64位的分组,如果有必要的话对最后一个分组进行填充,以保证其作为一个处理单元的64位分组大小。加密每次处理一个分组,每次总用同一个密钥。
(加密)Cj = Ek(Pj) ,(j=1,2, …,N)
(解密)Pj = Dk(Cj),(j=1,2, …,N)
特点:
①模式操作简单,不同的分组可以进行并行处理;
②明文中的重复内容将在密文中表现出来,特别对于图像数据和明文变化较少的数据。弱点源于对每个明文分组是分离处理的;
③不具有错误传播特性,即如果一个分组中出现传输错误不会影响其他分组; ④主要用于内容较短(不超过一个分组)的报文的加密处理。

2.2 密码分组链接模式(CBC)

在密码分组连接模式下,加密函数的输入是当前明文分组和前一个密文分组的异或;每个明文分组使用相同的密钥。每个明文分组的加密函数的输入与明文分组之间不再有固定的关系,不会再出现同一段报文中相同明文得到相同的密文。
(加密) C1 = Ek(P1⊕IV) (IV为初始向量),Cj = (Pj⊕cj-1) , (j=2, …,N)
(解密) P1 = Dk(C1)⊕IV (IV位初始向量) ,Pj = Dk(Cj)⊕Cj-1 ,(j=2, …,N)
特点:
①同一个消息中的两个相同的明文被加密成不同的密文;
②不通消息的前若干个分组相同,且加密时使用相同的IV,这些分组的加密结果将一致,这是以时间戳作为IV较好;
③如果密文分组Cj有一位传输错误,解密是可能导致对应明文分组Pj中多位出错,但密文分组中的这一位出错只会导致明文分组Pj+1中对应位置的一位出错,其后的明文分组不再受影响,因此,密文分组中的一位出错具有自恢复能力;
④CBC模式可以用于加密和认证,用于加密时不能并行处理,也不能用于加密或解密可以随机访问的文件记录(因为CBC模式需要访问以前的记录)

2.3 计数器模式(CTR)

在计数器模式下,使用与明文分组相同的计数器长度,但要求加密不同的分组所用的计数器值必须不同。计数器值经过加密函数变换的结果再与明文分组异或,从而得到密文。解密是使用相同的计数器值序列,用加密函数变换后的计数器值与密文分组异或,从而恢复明文。
(加密) Cj = Pj⊕Ek(CTR+j) ,(j=1,2,…,N)
(解密) Pj = Cj⊕Ek(CTR+j),(j=1,2,…,N)
特点:
①处理效率。CTR模式能够对多块报文的加密和解密进行并行处理,使得吞吐量大大的提高,提高了处理效率;
②预处理。在CTR模式中,进行异或之前的基本加密处理部分并不依赖于明文或密文的输入,因此可以提前进行预处理,极大地提高了吞吐量;
③随机访问特性。可以随机的对任意一个密文分组进行解密处理,对该密文分组的处理与其他密文无关;
④实现的简单性。CTR模式只要求实现加密函数,不涉及解密函数,即CTR模式的加密和解密阶段都使用相同的基本加密函数,从而体现出其简单性。

2.4 输出反馈模式(OFB)

在输出反馈模式下,加密函数的输入是64位的移位寄存器SR,对第一个分组的处理需要使用初始向量IV,每处理完一个分组,移位寄存器就左移j位,加密函数64位输出的高j位被反馈回64位的移位寄存器的低j位,剩下的64-j位被丢弃。这种模式主要用于面向字符的流密码加密传输。
(加密) C1 = P1⊕Sj[Ek(IV)] ,Ci = Pi⊕Sj[Ek(SRj||Sji-1)] ,(i=2,…,N)
(解密) P1 = C1⊕Sj[Ek(IV)] ,Pi = Ci⊕Si[Ek(SRj||Sji-1)] ,(i=2,…,N)
特点:
①发送方(加密)和接收方(解密)都只使用所选定密码算法的加密函数;
②没有错误传输,如果传输中出现错误,不会影响其后各位;
③OFB是一种同步流密码,与明文异或前的密码流独立于明文和密文;
④密文中的一位传输错误只影响明文中的相应位。

2.5 密码反馈模式(CFB)

与输出反馈模式结构上类似,j位密码反馈将j位的密文用于反馈输入,即前一个密文分组(j位)被填充入64位移位寄存器的低j位,组成当前分组加密函数的输入参数之一。在CFB模式中密文单元被反馈回移位寄存器,所以,传输中出现的错误将会传播引起后续所有消息的损坏。任何明文单元对应的密文都是前面明文的一个函数。
在j位CFB模式中,加密函数的输入是一个64位的移位寄存器,这个移位寄存器被初始化为一个初始向量IV,加密函数处理结果的最左边(最高位)的j位与明文的第一个分组P1进行异或产生密文C1,然后这个密文单元被传输出去。同时,这个移位寄存器的内容被左移j位,而C1则被放进移位寄存器的最右边(最低位)j位中。重复这个过程,直到所有的明文单元都完成加密。
(加密) C1 = P1⊕Sj[Ek(IV)] ,Ci = Pi⊕Sj[Ek(SRj||Ci-1)],(i=2,…,N)
(解密) P1 = C1⊕Sj[Ek(IV)] ,Pi = Ci⊕Si[Ek(SRj||Ci-1)],(i=2,…,N)
特点:
①加密和解密时只是用所选定分组加密方法(DES、AES)中的加密函数;
②可用于加密较小的分组,不需要进行填充;
③效率相对较低;
④CFB实际上是一个非同步的流加密模式,与其明文疑惑前的密钥流取决于加密密钥和前一个密文分组;
⑤可以用同一个密钥加密多个消息,但每一个消息的初始向量IV应不同;
⑥如果密文分组Cj有一位传输错误,解密时将导致对应明文分组Pj相同位置的一位出错,但只要Cj中的各位没有全部移出寄存器,后续明文分组中大多数位有50%的出错概率,只有当移位寄存器全部刷新后,系统才会从错误镇恢复。

总结

本博文参考《密码学》课本,仅用与学习参考。

你可能感兴趣的:(密码学)