工作模式是一项增强密码算法或使用算法适应具体应用的技术。为了将分组密码应用于各种各样的实际应用,NIST(SP800-38A)定义了5种“工作模式”。这5中模式实际上覆盖了大量使用分组密码的应用。
一次处理一组明文分块,每次使用相同的密钥加密,如图所示。
明文若长于b位,则可以简单的将其分为b位一组的块,如果有必要则对最后一块进行填充。解密也是一次执行一块,使用相同的密钥。
ECB模式特别适合用于数据较少的情况,比如加密密钥。比如传输一个DES或者AES的密钥,可以选择这种模式。
ECB模式中,如果一段消息中有相同的明文组,那么密文也会出现相同的密文分组。
为了克服ECB模式,需要对重复的明文分组加密成不同的密文分组。CBC模式下加密算法的输入是当前的明文组和上一个密文组的异或,使用相同的密钥完成。这就相当于将所有的明文组链接起来,加密算法的每次输入与本明文组没有固定的关系,如果重复的明文组,加密后看不出来。
解密时,每个密文分组分别进行解密,再与上一个密文异或即可恢复明文。
初始向量IV是和密文具有相同长度的数据分组,IV必须为收发双发共享,但是第三方不可预测。特别的,对于任意的给定明文,在IV产生之前,不能预测和本明文有关联的IV。为了最大程度的安全,IV不能不经过授权就被修改。对IV先用ECB加密后再发送的方式可以实现这一要求。
流密码不需要将明文填充到长度是分组长度的整数倍,且可以实时操作。密文反馈模式(CFB),输出反馈模式(OFB),计数器模式(CTR)可以看做流密码,但是分组密码。流密码的密文和明文是等长的。
加密函数:输入b位的移位寄存器,值为初始化向量IV
加密函数输出最左边的s位与明文的第一个分段异或得到密文的第一个单元,然后将密文发送出去接着移位寄存器左移s位,填入移位寄存器的最右边s位。
解密的时候,将收到的密文单元与加密函数的输出异或得到明文单元。
用加密函数的输出填充移位寄存器,对整个明文和密文分组进行运算,而不是仅对s位的子集运算。
加密表示为
解密表示为
令分组长度为b位,如果最后一个分组包含u位,u
OFB模式需要一个初始化向量IV,IV必须是一个时变值,即每次加密运算都是唯一的。加密输出的分组仅仅依赖于密钥和IV,而不依赖于明文。对于给定的密钥和IV,用于和明文流进行异或运算的输出位流是固定的,如果两个不同的消息在相同的地方有一个相同的明文分组,那么攻击者就能够判断出那部分的输出。
OFB的一个优点是输出过程中,在某位上发生的错误不会影响其他位。缺点是抗消息流篡改攻击的能力不如CFB。即密文中的某位取反,恢复出的明文相应位也取反。所以攻击者有办法控制对恢复明文的改变。
OFB是典型流密码的结构,密码产生的位流是初始值和密钥的函数,产生的位流和明文进行异或。位流和明文独立。
计数器模式使用与明文分组规模相同的长度,SP 800-38A对此的唯一要求是加密不同的明文组计数器对于的值必须不同。
计数器首先被初始化为某一个值,然后随着消息块的增加计数器的值加1。加密时,计数器加密后与明文分组异或得到密文分组,解密使用相同值的计数器序列,用加密后的计数器的值与密文分组异或来恢复明文分组。所以在解密的是必须知道初始计数器的值。
计数器初始值必须为时变值,使用相同密钥加密的所有消息必须各自具有不同的时变值,而且时变值必须唯一。保证时变值唯一的一个办法是消息计数器都增加1,即每个消息的第一个计数器的值都要比前一条消息的最后一个计数器的值多1。
计数器模式的优点
各个工作模式的反馈特征
OFB和CTR模式的输出独立于明文和密文。