分组密码的工作模式

admin 2024年6月29日02:01:56评论1 views字数 4677阅读15分35秒阅读模式

在密码学中,分组密码的输入为具有b位固定长度的明文分组和密钥,输出为b位的密文。明文长度若大于b位,则可简单将其分为b位一组的块。每次使用相同的密钥对多个分组加密,则会引发许多安全问题。为了将分组密码应用于各种各样的实际应用,也就出现了多种分组密码的工作模式,从本质上讲,工作模式是一项增强密码算法或者使算法适应具体应用的技术,如将分组密码应用于数据块组成的序列或者数据流。

通俗来讲就是,分组密码的工作模式就是描述了如何重复加密较长的多个数据块,而分组密码则是用于对其中一个数据进行加解密。

常见的五种工作模式

我国于2021年发布了新修订的国家标准GB/T 17964-2021《信息安全技术 分组密码算法的工作模式》,该标准规定了分组密码算法的工作模式,一共分为了九种工作模式:电码本(Electronic Codebook,ECB)、密文分组链接(Cipher Block Chaining,CBC)、密文反馈(Cipher Feedback,CFB)、输出反馈(Output Feedback,OFB)、计数器(Counter,CTR)、带密文挪用的XEX可调分组密码(XEX Tweakable block cipher with ciphertext Stealing,XTS)、带泛杂凑函数的计数器(universal Hash function based CTR,HCTR)、分组链接(Block Chaining,BC)、带非线性函数的输出反馈(Output Feedback with a Nonlinear Function,OFBNLF)。其中ECB、CBC、CFB、OFB、CTR为常见的五种分组密码工作模式,下面会对这五种工作模式详细介绍。

1. ECB(电码本)

创信解读丨分组密码的工作模式

电码本是最简单的工作模式,它一次处理一组明文分块,每次使用相同的密钥加密,加密流程见图1,解密流程见图2。对于给定的密钥,任何b位的明文组只有唯一密文与之对应,所以,根据任意b位明文都可以查到相应的密文。

明文长度若长于b位,则可简单将其分为b位一组的块,若在最后一块明文长度不足b位,则需要进行填充,解密也是一次执行一块,且使用相同的密钥。

根据ECB模式的加解密流程,我们可通过如下方式进行表示。其中P1,P2,……,PN为明文分组,每一组的明文都是由一串b位的块组成,相应的密文分组依次为C1,C2,……,CN,K为密钥。

加密:

创信解读丨分组密码的工作模式

解密:

创信解读丨分组密码的工作模式
创信解读丨分组密码的工作模式
图1 ECB加密流程
创信解读丨分组密码的工作模式
图2 ECB解密流程

ECB最重要的特征是一段消息中若有几个相同的明文组,那么密文也将出现几个相同的密文分组。因此无法隐蔽数据模式,对某一个分组的加密或解密可独立于其他分组进行,对密文分组的重排也将导致明文分组的重排。

对于很长的信息,ECB模式可能存在攻击漏洞。如果消息是非结构化的,攻击者就可以利用这些规律性特征来破译。例如,若已知这段消息总是以某些固定的字符开头,攻击者就可以拥有大量已知明密文对其开展攻击。若消息有重复的成分,且重复的周期正好是b位的倍数,攻击者就能分辨出这些成分,使用代换或者重排这些块的方法进行攻击。因此,ECB模式无法抵抗对分组的重放、嵌入和删除等攻击。

所以,从上面可以看出,ECB模式的优点是并行运算,速度快;缺点就是安全性较低,容易受到攻击。其适用于加密密钥、随机数等短数据。

2. CBC(密文分组链接)

创信解读丨分组密码的工作模式

为了避免重复的明文分组加密之后依然是相同的密文分组,CBC模式相对于ECB模式做了一些修改,CBC模式下加密算法输入是当前的明文组和上一个密文组的异或,而解密则是将当前密文分组解密后和上一个密文分组进行异或就得到当前的明文分组,加解密流程见图3、图4,使用的密钥都是相同的,这样若有重复的明文组,加密后也看不出来了。并且CBC和ECB类似,最后的分组若不是完整的分组,仍然需要进行填充。

对于第一块明文加密,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这里引入了一个初始向量IV,IV和密文具有相同长度的数据分组,并且收发方都需使用同一个IV。为了安全性,每次加密的IV取值都是随机不同的,一般采用时间戳或者随机数发生器产生的随机分组。

根据加解密流程可以通过如下方式进行表示。

加密:

创信解读丨分组密码的工作模式

解密:

创信解读丨分组密码的工作模式
创信解读丨分组密码的工作模式
图3 CBC加密流程
创信解读丨分组密码的工作模式
图4 CBC解密流程

从上面可以看出CBC的优点是同样的明文组不会被加密成相同的密文组,解密支持并行计算。缺点则是加密过程是串行的,无法被并行化,而且消息必须被填充到块大小的整数倍;对包含某些错误比特的密文解密时,会导致其对应的明文块完全改变和下一个明文块中对应位发生改变。

CBC工作模式同样也存在攻击漏洞,例如字节反转攻击、AES-CBC密文填充攻击等。

此外,CBC除了可以实现机密性,还是可以用于认证,它可以生成消息鉴别码(MAC),使用最后一个分组的输出结果作为MAC,MAC可以用于检验消息的完整性、验证消息源的真实性等。因此CBC模式适用于加密任意长度的数据,以及计算产生检测数据完整性的消息鉴别码MAC。

3. CFB(密文反馈)

创信解读丨分组密码的工作模式

和上面所说的两种工作模式有些不同,CFB是将分组密码当成流密码使用。流密码的密文和明文等长,并且不需要将明文长度填充成分组长度的整数倍,可以实时操作。所以,待发送的字符流中任何一个字符都可以用面向字符的流密码加密后立即发送。

CFB的加密流程如图5所示,加密算法的输入是b位的移位寄存器,其初始值为初始向量IV;然后使用密钥对IV进行加密,得到的结果只选用最左边的s位(这里假设传输单元为s位),其余的丢弃;之后再将截选的s位与明文的第一个分段P1异或得到密文的第一个单元C1;接下来将得到的C1作为下一轮加密算法的输入,此时移位寄存器左移s位,C1填入移位寄存器的最右边s位,然后加密,重复进行上述操作,直至所有明文加密成密文。

上面由加密算法所生成的比特序列我们将其称之为密钥流,在CFB中加密算法就相当于用来生成密钥流的伪随机数生成器,而IV就相当于伪随机数生成器的种子。

CFB的解密流程如图6所示,解密流程和加密差不多,只是有一点不同的是将得到的密文单元与加密算法的输出异或就可以得到明文单元。需要注意的是这里使用的是加密算法而不是解密算法,因为我们这里解密要得到的是密钥流,而密钥流就是通过加密算法得来的。

根据加解密流程可以通过如下方式进行表示,其中MSBs(X)表示X的最左边s位。

加密:

创信解读丨分组密码的工作模式

解密:

创信解读丨分组密码的工作模式
创信解读丨分组密码的工作模式
图5 CFB加密流程
创信解读丨分组密码的工作模式
图6 CFB解密流程

CFB模式和CBC类似,每一个分组的结果会受到前面所有分组内容的影响,所以即使出现有相同明文的情况下,也都产生的不同的密文;解密可以并行化;还有一个优点是通过流密码模式进行加密,可以及时加密传送小于分组的数据。

而缺点和CBC一样,加密为串行,无法并行计算,效率大大降低;并且存在误差传递,一个单元出现问题会影响到后面多个单元,所以可用于检查发现明文密文的篡改。CFB存在有攻击漏洞,无法抵抗重放攻击。

4. OFB(输出反馈)

创信解读丨分组密码的工作模式

OFB模式和CFB类似,其加解密流程如图7、图8所示,不同的地方OFB的加密算法的输入是上一个加密算法的输出,而CFB的加密算法输入是上一轮得到的密文分组;并且OFB是对整个明文和密文分组进行运算,而不是仅对s位的子集运算。OFB最开始输入的时变值也就是上面所说的初始向量IV。

通过下图的加解密流程可以看出,异或所需要的密钥流可以事先通过密码算法生成,而这个过程不涉及明文分组,也就是下图中虚线框部分。所以在实际加密过程中,我们只需要提前准备好所需的密钥流,就完全不需要使用密码算法,只需要将明文和密钥流进行异或即可,而异或相比于那些加密算法是非常快的,因此实际操作过程中可以利用OFB这一特性大大提升工作效率。

根据加解密流程可以通过如下方式进行表示。

加密:

创信解读丨分组密码的工作模式

解密:

创信解读丨分组密码的工作模式
创信解读丨分组密码的工作模式
图7 OFB加密流程
创信解读丨分组密码的工作模式
图8 OFB解密流程

OFB的优点有,隐藏了明文的模式;可以及时加密传送小于分组的数据,由于加密算法的输入没有使用到上一轮的密文分组,所以同CFB不同的是,OFB无误差传递问题。而缺点也很明显,加解密都是串行运算,无法并行化;并且安全性较CFB要差,这是因为密钥流由密钥本身产生,具有周期性,在使用相同密钥加密的数据到达一定数量时,会产生重复,这也就降低了算法的安全性。

5. CTR(计数器)

创信解读丨分组密码的工作模式

CTR模式通过将逐次累加的计数器进行加密来生成密钥流的流密码。其加解密流程如图9、图10所示,计数器刚开始被初始化为某个值,随着信息块的增加计数器的值加1(mod2b,b为分组长度),加密时,计数器加密后与明文分组异或得到密文分组,不同的密文分组之间没有关联。解密使用相同值的计数器序列,用加密后的计数器值与密文分组异或来恢复明文分组。因此解密方需要知道初始计数器的值。与ECB和CBC不同的是,由于CTR的结构关系,我们不需要对明文进行填充。

根据加解密流程可以通过如下方式进行表示。

加密:

创信解读丨分组密码的工作模式

解密:

创信解读丨分组密码的工作模式
创信解读丨分组密码的工作模式
图9 CTR加密流程
创信解读丨分组密码的工作模式
图10 CTR解密流程

从上面两个CTR能够以任意顺序处理分组,这就意味着它能够实现并行计算,而且错误不会传播;CTR模式的加密和解密使用了完全相同的结构,因此在程序上实现就比较容易。同OFB类似,CTR同样可以事先生成密钥流,在实际加密过程中只需要将密钥流与明文分组相异或。不过CTR安全性要比OFB较高,由于CTR密钥流的产生每次所使用的都是不同的初始值,所以也就不存在密钥出现重复的情况。

CTR模式也存在有攻击漏洞,攻击者可以通过反转密文分组中的某些比特,引起解密后明文中的相应比特也发生反转。

6.总结

创信解读丨分组密码的工作模式
工作

模式

描述

优点

缺点

用途

ECB

用相同的密钥分别对明文分组独立加密

▪ 简单快速

▪ 无差错传播

▪ 支持并行计算(加密、解密)

▪ 无法隐蔽明文数据格式规律和统计特征

▪ 无法抵抗重放、嵌入和删除攻击

适用于传送短数据(如一个加密密钥)

CBC

加密算法的输入是上一个密文组和当前明文组的异或

▪ 可以隐蔽明文数据格式规律和统计特征

▪ 一定程度上可以抵抗重放、嵌入和删除等攻击

▪ 存在差错传播

▪ 加密不支持并行计算

适用于加密任意长度的数据;并且可以用于认证

CFB

一次处理s位,上一块密文作为加密算法的输入,产生的伪随机数输出与明文异或作为下一个单元的输入

▪ 可以隐蔽明文数据格式规律和统计特征

▪ 具有自同步流密码优点

▪ 存在差错传播

▪ 加密不支持并行计算

▪ 不能抵抗重放攻击

适用于加密数据流,并且可用于认证

OFB

与CFB类似,只是加密算法输入是上一个加密的输出,且使用的整个分组

▪ 可以隐蔽明文数据格式规律和统计特征

▪ 具有同步流密码优点

·无差错传播

▪ 可事先进行加解密准备,产生密钥流

▪ 不支持并行计算

▪ 对于密文被篡改难以进行检测

▪ 攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转

噪声信道上的数据流传输(如卫星通信)

CTR

每个明文分组都与一个经过加密的计数器相异或。对每个后续分组计数器递增。

▪ 可以隐蔽明文数据格式规律和统计特征

▪ 具有同步流密码优点

▪ 无差错传播

▪ 支持并行计算

▪ 可事先进行加解密准备,产生密钥流

▪ 对于密文被篡改难以进行检测

▪ 攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转

适用于实时性和速度要求比较高的加密场合

参考资料:

1. 《密码编码学与网络安全 原理与实践》第七版 ((美) 威廉·斯托林斯 (Willian Stallings) 著;王后珍 李莉 杜瑞颖 等译);

2. 《商用密码应用与安全性评估》(霍炜);

3. 《图解密码技术》第3版 (结城浩);

原文始发于微信公众号(创信华通):创信解读丨分组密码的工作模式

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月29日02:01:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   分组密码的工作模式https://cn-sec.com/archives/2897405.html

发表评论

匿名网友 填写信息