CBC模式解讀

一 什麼是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等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章