對稱加密算法之分組加密的六種工作模式(ECB、CBC、PCBC、CFB、OFB、CTR)

 

加密一般分爲對稱加密(Symmetric Key Encryption)和非對稱加密(Asymmetric Key Encryption)。對稱加密又分爲分組加密和序列密碼。

(1)分組加密,也叫塊加密(block cyphers),一次加密明文中的一個塊。是將明文按一定的位長分組,明文組經過加密運算得到密文組,密文組經過解密運算(加密運算的逆運算),還原成明文組。具有代表性的塊加密算法有DES,AES,3DES等。

(2)序列加密,也叫流加密(stream cyphers),一次加密明文中的一個位。是指利用少量的密鑰(制亂元素)通過某種複雜的運算(密碼算法)產生大量的僞隨機位流,用於對明文位流的加密。

解密是指用同樣的密鑰和密碼算法及與加密相同的僞隨機位流,用以還原明文位流。

 

分組加密算法中,有ECB、CBC、PCBC、CFB、OFB、CTR這幾種算法模式:

1、ECB(Electronic Code Book):

又稱電子密碼本模式:Electronic codebook,是最簡單的塊密碼加密模式,加密前根據加密塊大小(如AES爲128位)分成若干塊,之後將每塊使用相同的密鑰單獨加密,解密同理。

DES對稱加密算法的 ECB模式 其實非常簡單,就是將數據按照8個字節一段進行DES加密或解密得到一段8個字節的密文或者明文,最後一段不足8個字節,按照需求補足8個字節進行計算,之後按照順序將計算所得的數據連在一起即可,各段數據之間互不影響。

特點:

(1)簡單,有利於並行計算,誤差不會被傳送;

(2)同樣的明文塊會被加密成相同的密文塊,不能很好的隱藏明文數據模式;

(3)加密消息塊相互獨立成爲被攻擊的弱點,不能提供嚴格的數據保密性,可以對明文進行主動攻擊;

2、CBC模式:

密碼分組鏈接(CBC,Cipher-block chaining)模式,每個明文塊先與前一個密文塊進行異或後,再進行加密。在這種方法中,每個密文塊都依賴於它前面的所有明文塊。同時,爲了保證每條消息的唯一性,在第一個塊中需要使用初始化向量IV。它的實現機制使加密的各段數據之間有了聯繫。

(1)DES算法的CBC模式加密步驟如下:

①首先將數據按照8個字節一組進行分組得到D1D2......Dn(若數據不是8的整數倍,用指定的PADDING數據補位)

②第一組數據D1與初始化向量IV異或後的結果進行DES加密得到第一組密文C1(初始化向量I爲全零)

③第二組數據D2與第一組的加密結果C1異或以後的結果進行DES加密,得到第二組密文C2

④之後的數據以此類推,得到Cn

⑤按順序連爲C1C2C3......Cn即爲加密結果。

(2)DES算法的CBC模式加密步驟如下:

①首先將數據按照8個字節一組進行分組得到C1C2C3......Cn;

②將第一組數據進行解密後與初始化向量IV進行異或得到第一組明文D1(注意:一定是先解密再異或);

③將第二組數據C2進行解密後與第一組密文數據進行異或得到第二組數據D2

④之後依此類推,得到Dn

⑤按順序連爲D1D2D3......Dn即爲解密結果。

這裏注意一點,解密的結果並不一定是我們原來的加密數據,可能還含有你補得位,一定要把補位去掉纔是你的原來的數據。

(3)特點:

①不容易主動攻擊,安全性好於ECB,適合傳輸長度長的報文,是SSL、IPSec的標準;

②每個密文塊依賴於所有的信息塊,明文消息中一個改變會影響所有密文塊;

③發送方和接收方都需要知道初始化向量;

④主要缺點是加密過程是串行的,無法被並行化,因爲在加密時,明文中的微小改變會導致其後的全部密文塊發生改變,而且消息必須被填充到塊大小的整數倍。而在解密時,從兩個鄰接的密文塊中即可得到一個明文塊。因此,解密過程可以被並行化,而解密時,密文中一位的改變只會導致其對應的明文塊完全改變和下一個明文塊中對應位發生改變,不會影響到其它明文的內容。

3、PCBC模式:

填充密碼塊鏈接(PCBC,Propagating cipher-block chaining)或稱爲明文密碼塊鏈接(Plaintext cipher-block chaining),是一種可以使密文中的微小更改在解密時導致明文大部分錯誤的模式,並在加密的時候也具有同樣的特性。

對於使用PCBC加密的消息,互換兩個鄰接的密文塊不會對後續塊的解密造成影響。

4、CFB模式:

密文反饋(CFB,Cipher feedback)模式與ECB和CBC模式只能夠加密塊數據不同,可以將塊密碼變爲自同步的流密碼;CFB的解密過程幾乎就是顛倒的CBC的加密過程。

①CFB需要使用一個與塊的大小相同的移位寄存器,並用IV將寄存器初始化。然後,將寄存器內容使用塊密碼加密,然後將結果的最高x位與明文的x進行異或,以產生密文的x位。下一步將生成的x位密文移入寄存器中,並對下面的x位明文重複這一過程。

②解密過程與加密過程相似,以IV開始,對寄存器加密,將結果的高x與密文異或,產生x位明文,再將密文的下面x位移入寄存器。與CBC相似,明文的改變會影響接下來所有的密文,因此加密過程不能並行化;而同樣的,與CBC類似,解密過程是可以並行化的。

由於加密流程和解密流程中被塊加密器加密的數據是前一段密文,因此即使明文數據的長度不是加密塊大小的整數倍也是不需要填充的,這保證了數據長度在加密前後是相同的。

5、OFB模式:

OFB模式(輸出反饋:Output feedback),OFB是先用塊加密器生成密鑰流(Keystream),然後再將密鑰流與明文流異或得到密文流;解密是先用塊加密器生成密鑰流,再將密鑰流與密文流異或得到明文,由於異或操作的對稱性所以加密和解密的流程是完全一樣的。

與其它流密碼一樣,密文中一個位的翻轉會使平文中同樣位置的位也產生翻轉。這種特性使得許多錯誤校正碼,例如奇偶校驗位,即使在加密前計算而在加密後進行校驗也可以得出正確結果。

OFB與CFB一樣都非常適合對流數據的加密,OFB由於加密和解密都依賴與前一段數據,所以加密和解密都不能並行。然而,由於明文和密文只在最終的異或過程中使用,因此可以事先對IV進行加密,最後並行的將明文或密文進行並行的異或處理。

可以利用輸入全0的CBC模式產生OFB模式的密鑰流。這種方法十分實用,因爲可以利用快速的CBC硬件實現來加速OFB模式的加密過程。

6、CTR模式:

CTR模式(Counter mode,CM)也被稱爲ICM模式(Integer Counter Mode,整數計數模式)和SIC模式(Segmented Integer Counter),與OFB相似,CTR將塊密碼變爲流密碼。它通過遞增一個加密計數器以產生連續的密鑰流,其中,計數器可以是任意保證長時間不產生重複輸出的函數,但使用一個普通的計數器是最簡單和最常見的做法。

CTR模式的特徵類似於OFB,但它允許在解密時進行隨機存取。由於加密和解密過程均可以進行並行處理,CTR適合運用於多處理器的硬件上。

注意圖中的“nonce”與其它圖中的IV(初始化向量)相同。IV、隨機數和計數器均可以通過連接,相加或異或使得相同明文產生不同的密文。

 

 

參考博客:

https://blog.csdn.net/includeiostream123/article/details/51066799

https://blog.csdn.net/jerry81333/article/details/78336616
 

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