一 什么是CBC模式
CBC模式的全稱是Cipher Block Chaining模式(密文分組鏈接模式),之所以叫這個名字,是因為密文分組像鏈條一樣相互連接在一起。
在CBC模式中,首先將明文分組與前一個密文分組進行XOR運算,然后再進行加密。
CBC模式加解密過程如下:

我們來比較一下ECB模式與CBC模式的區別

ECB模式只進行了加密,而CBC模式則在加密之前進行了一次XOR。
二 初始化向量
當加密第一個明文分組時,由於不存在“前一個密文分組”,因此需要事先准備一個長度為一個分組的比特序列來代替“前一個密文分組”,這個比特序列稱為初始化向量(Initialization Vector),通常縮寫為IV,一般來說,每次加密時都會隨機產生一個不同的比特序列來作為初始化向量。
三 CBC模式的特點
明文分組在加密之前一定會與“前一個密文分組”進行XOR運算,因此即使明文分組1和明文分組2的值是相等的,密文分組1和2的值也不一定是相等的。這樣一來,ECB模式的缺陷在CBC模式中就不存在了。
加密過程:在CBC模式中,無法單獨對一個中間的明文分組進行加密。例如,如果要生成密文分組3,則至少需要湊齊明文分組1、2、3才行。
解密過程:假設CBC模式加密的密文分組中有一個分組損壞了。在這種情況下,只要密文分組的長度沒有發生變化,則解密時最多只有2個分組受到數據損壞的影響。見下圖:

假設CBC模式的密文分組中有一些比特缺失了,那么此時即便只缺失1比特,也會導致密文分組的長度發生變化,此后的分組發生錯位,這樣一來,缺失比特的位置之后的密文分組也就全部無法解密。見下圖:

四 對CBC模式的攻擊
假設主動攻擊者的目的是通過修改密文來操縱解密后的明文。如果攻擊者能夠對初始化向量中的任意比特進行反轉(將1變成0,將0變成1),則明文分組中相應的比特也會被反轉。這是因為在CBC模式的解密過程中,第一個明文分組會和初始化向量進行XOR運算。見下圖。

但是想對密文分組也進行同樣的攻擊就非常困難了。例如,如果攻擊者將密文分組1中的某個比特進行反轉,則明文分組2中相應比特也會被反轉,然而這一比特的變化卻對解密后的明文分組1中的多個比特造成了影響,也就是說,只讓明文分1中所期望的特定比特發生變化是很困難的。
五 填充提示攻擊
填充提示攻擊是一種利用分組密碼中填充部分來進行攻擊的方法。在分組密碼中,當明文長度不為分組長度的整數倍時,需要在最后一個分組中填充一些數據使其湊滿一個分組長度。在填充提示攻擊中,攻擊者會反復發送一段密文,每次發送時都對填充數據進行少許改變。由於接收者(服務器)在無法正確解密時會返回一個錯誤消息,攻擊者通過這一錯誤消息就可以獲得一部分與明文相關的信息。這一攻擊並不僅限於CBC模式,而是適用所有需要進行分組填充的模式。
2014年對SSL3.0 造成了重大影響POODLE攻擊實際上就是一種填充示攻擊。
六 對初始化向量(IV)進行攻擊
初始化向量(IV)必須使用不可預測的隨機數。然而在SSL/TLS的TLS1.0版本協議中,IV並沒有使用不可預測的隨機數,而是使用上一次CBC模式加密時的最后一個分組。為了防御攻擊者對此進行攻擊,TLS1.1以上的版本中改為了必須顯示傳送IV。
七 CBC模式應用
確保互聯網安全的通信協議之一SSL/TLS,就是使用CBC模式來確保通信機密性的,如使用CBC模式三重DES的3DES_EDE_CBC以及CBC模式256比特AES的AES_256_CBC等。
————————————————
版權聲明:本文為CSDN博主「cakincqm」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/chengqiuming/article/details/82288851
————————————————
版權聲明:本文為CSDN博主「cakincqm」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/chengqiuming/article/details/82288851