块密码操作模式(block cipher modes of operation)

本文介绍了块密码的基本概念及加密解密过程,探讨了不同块大小的选择依据,并详细解析了五种主流的块密码操作模式:ECB、CBC、PCBC、CFB和CTR,帮助读者理解块密码在实际应用中的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

块密码(block cipher)

又被称为分组加密或者叫分块加密,是对称加密的一种常见形式。

块密码是非常常见的加密方法。典型的采用了块密码方式的加密协议,如 DES 和 AES ,都是美国政府核定的标准加密算法,应用领域从电子邮件加密到银行交易转帐,非常广泛。

块密码基本思路是这样。首先,将明文分成多个等长的块( block ),然后用相同的一个密钥,对每个块进行加密,得到密文块。

非对称加密是不适合加密大段数据的,而在对称加密算法中,块密码是最常见的,所以可以认为通常用来加密大段数据的方法就是块密码。除了块密码,另外一种对称加密的方式是流密码。

块密码由两个算法组成,加密算法和解密算法,解密算法是加密算法的逆运算。

先说说加密过程。信息被分割成大小相等的数据块,如果最后一个块数据量不够,就会按照特定的方法进行数据填充,例如先添加一个标注位,然后后面都是零。然后运行加密算法进行迭代,对每个块都进行相同的加密运算。运算过程要保证不会丢失原始的信息,因为未来还要对密文块进行逆运算获得原文的。但是同时运算过程中也要通过秘钥和原文进行复杂一些的运算,保证加密后得到的密文有比较高的抗分析特性。也就是说让试图破解密码的人,很难通过各种分析及其去反推原文,甚至原文的特性。

解密过程是加密过程的逆运算。把秘钥和密文块传递给解密函数,输出就是原文。所以密钥的长度是决定加密安全性的最终要的指标。当然,块的大小选择也是有讲究的。块太大了会影响执行效率。早期的算法,例如 DES ,是64比特一个块,当前使用的 AES 是128比特或者更大。

块大小

虽然任何大小的块是可以接受的,但是在选择块的大小时记住以下方面。

  • 避免非常小的块大小 - 说块大小是m位。那么可能的明文位组合然后是2m。如果攻击者发现与以前发送的密文块相对应的明文块,则攻击者可以通过建立使用该加密密钥发送的明文/密文对的字典来启动一种“字典攻击”。更大的块大小使得攻击更难,因为字典需要更大。

  • 没有非常大的块大小 - 具有非常大的块大小,密码操作效率低下。这些明文在加密之前需要进行填充。

  • 8位的倍数 - 优选的块大小是8的倍数,因为大多数计算机处理器以8位的多位处理数据,因此易于实现。

填充块密码

块密码具有固定大小的处理块(例如64位)。明文的长度大多不是块大小的倍数。例如,150位明文提供两个64位的块,每个块具有第二块平衡22位。需要用冗余信息填充最后一个比特块,使得最终块的长度等于该方案的块大小。在我们的示例中,剩余的22位需要添加额外的42个冗余位来提供完整的块。将比特添加到最后一个块的过程称为填充

填充太多会使系统效率低下。此外,填充可能会使系统不安全,如果填充完全以相同的位始终进行。

块密码方案

有大量的块密码方案正在使用中。其中许多是公知的。最受欢迎和突出的块密码如下。

  • 数字加密标准(DES) - 20世纪90年代流行的分组密码。它现在被认为是一个“破碎”的块密码,主要是因为它的小密钥大小。

  • 三重DES - 这是一种基于重复DES应用的变体方案。与可用的新的更快的块密码相比,它仍然是受人尊敬的块密码,但效率低下。

  • 高级加密标准(AES) - 这是一种基于加密算法Rijndael获得AES设计竞赛的相对较新的块密码。

  • IDEA - 它是一个足够强大的块密码,块大小为64,密钥大小为128位。许多应用程序使用IDEA加密,包括早期版本的Pretty Good Privacy(PGP)协议。由于专利问题,IDEA方案的使用受到限制。

  • Twofish - 这种块密码方案使用128位的块大小和可变长度的密钥。这是AES决赛入围者之一。它基于块大小为64位的较早的块密码Blowfish。

  •  - 块大小为128位,密钥长度为128,192或256位的块密码,这也是AES竞赛决赛。它比其他分组密码慢一些但具有更安全的设计。

块密码操作模式

ECB模式

又称电子密码本模式:Electronic codebook,是最简单的块密码加密模式,加密前根据加密块大小(如AES为128位)分成若干块,之后将每块使用相同的密钥单独加密,解密同理。

  

缺点在于同样的明文块会被加密成相同的密文块;因此,它不能很好的隐藏数据模式。在某些场合,这种方法不能提供严格的数据保密性,因此并不推荐用于密码协议中。下面的例子显示了ECB在密文中显示明文的模式的程度:该图像的一个位图版本(左图)通过ECB模式可能会被加密成右图。


CBC模式

密码分组链接(CBC,Cipher-block chaining)模式,由IBM于1976年发明,每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量IV。

  

CBC是最为常用的工作模式。它的主要缺点在于加密过程是串行的,无法被并行化,而且消息必须被填充到块大小的整数倍。在加密时,明文中的微小改变会导致其后的全部密文块发生改变,而在解密时,从两个邻接的密文块中即可得到一个明文块。因此,解密过程可以被并行化,而解密时,密文中一位的改变只会导致其对应的明文块完全改变和下一个明文块中对应位发生改变,不会影响到其它明文的内容。


PCBC

填充密码块链接(PCBC,Propagating cipher-block chaining)或称为明文密码块链接(Plaintext cipher-block chaining),是一种可以使密文中的微小更改在解密时导致明文大部分错误的模式,并在加密的时候也具有同样的特性。

  

对于使用PCBC加密的消息,互换两个邻接的密文块不会对后续块的解密造成影响。


CFB

密文反馈(CFB,Cipher feedback)模式与ECB和CBC模式只能够加密块数据不同,可以将块密码变为自同步的流密码;CFB的解密过程几乎就是颠倒的CBC的加密过程。

  

注意:CFB、OFB和CTR模式中解密也都是用的加密器而非解密器。
CFB的加密工作分为两部分:
1.   将一前段加密得到的密文再加密;
2.   将第1步加密得到的数据与当前段的明文异或。
由于加密流程和解密流程中被块加密器加密的数据是前一段密文,因此即使明文数据的长度不是加密块大小的整数倍也是不需要填充的,这保证了数据长度在加密前后是相同的。

OFB

OFB模式(输出反馈:Output feedback),OFB是先用块加密器生成密钥流(Keystream),然后再将密钥流与明文流异或得到密文流,解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文,由于异或操作的对称性所以加密和解密的流程是完全一样的。


OFB与CFB一样都非常适合对流数据的加密,OFB由于加密和解密都依赖与前一段数据,所以加密和解密都不能并行。 


CTR

CTR模式(Counter mode,CM)也被称为ICM模式(Integer Counter Mode,整数计数模式)和SIC模式(Segmented Integer Counter),与OFB相似,CTR将块密码变为流密码。它通过递增一个加密计数器以产生连续的密钥流,其中,计数器可以是任意保证长时间不产生重复输出的函数,但使用一个普通的计数器是最简单和最常见的做法。

CTR模式的特征类似于OFB,但它允许在解密时进行随机存取。由于加密和解密过程均可以进行并行处理,CTR适合运用于多处理器的硬件上。
注意图中的“nonce”与其它图中的IV(初始化向量)相同。IV、随机数和计数器均可以通过连接,相加或异或使得相同明文产生不同的密文。

  


参考:https://blog.youkuaiyun.com/jerry81333/article/details/78336616

块密码操作模式 (vue5.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值