天天看點

分組密碼與模式

文章目錄

    • 什麼是分組密碼和模式
    • ECB模式
    • CBC模式
    • CFB模式
    • OFB模式
    • CTR模式

前面我們講過了DES和AES算法,他們每次都隻能加密固定長度的明文,這樣的密碼算法叫做分組密碼。

如果需要加密更長的明文則需要對分組密碼進行疊代。而分組密碼的疊代方法就稱為分組密碼的模式。

本文我們會講如下幾種模式:

  • ECB模式:電子密碼本模式
  • CBC模式: 密碼分組連結模式
  • CFB模式: 密文回報模式
  • OFB模式: 輸出回報模式
  • CTR模式: 計數器模式

ECB模式的全稱是Electronic CodeBook模式,ECB模式是将明文分組(分組密碼算法中作為加密對象的明文)加密之後的結果直接成為密文分組(使用分組加密算法将明文分組加密之後所生成的密文)。

下圖為ECB模式的加密:

密文 明文

密文分組1密文分組2密文分組3明文分組1明文分組2明文分組3加密加密加密

下圖為ECB模式的解密:

明文 密文

明文分組2明文分組2明文分組2密文分組1密文分組2密文分組2解密解密解密

ECB模式的特點

ECB模式是最簡單的模式,在其中明文和密文是一一對應的,相同的明文會被加密為相同的密文,這樣可以通過觀察密文得到明文中重複的組合,并以此為線索來破解密碼。

ECB模式的攻擊

ECB模式中,每個明文對應着相應的密文。 那麼攻擊者并不需要進行解密,他可以僞造密文的順序,進而改變了解密出來的明文順序。

比如 A 轉賬給B C元。如果A,B,C是明文分組,其對應的密文分組是a,b,c, 則攻擊者隻需要改變密文的順序為:b,a,c, 那麼被解密出來的明文含義就是 B轉賬給A C元。

CBC模式的全稱是Cipher Block Chaining模式。

CBC模式是将前一個密文分組與目前的明文分組的内容混合起來進行加密的模式。這樣可以避免ECB模式的弱點。

CBC模式的加密:

密文分組1密文分組2密文分組3明文分組1明文分組2明文分組3初始化向量

XOR加密

CBC模式的解密:

XOR解密

CBC模式的特點

和ECB模式相比,ECB隻是進行了加密,而CBC則是在加密之前做了一次XOR。

并且CBC要與前面一個密文分組進行XOR運算,這樣相同的明文分組也會生成不同的密文。ECB的缺陷就不存在了。

這樣其實也是CBC的缺點,它是一個鍊式結構,如果要生成密文分組3,則必須先加密明文分組1,2 。 不能并行進行。

另外我們觀察CBC的解密過程可以看到,如果一個密文分組損壞,隻要密文長度不變,則隻會影響其相關聯的兩個明文分組的解密。

SSL/TLS 協定就是使用CBC模式來保證通信的機密性的。

CBC模式的攻擊

CBC模式可以操縱解密過程的初始化向量,進而對解密後的明文進行攻擊。具體來說就是對初始化向量進行反轉,進而導緻XOR之後的明文分組1也被反轉了。

另外還有一種攻擊叫做填充提示攻擊,如果在分組密碼中,明文長度不是分組長度的整數倍時候,需要在最後一個分組填充一些資料讓其湊夠一個分組長度。在填充提示攻擊中,攻擊者會反複發送一段密文,每次發送都修改填充的資料,進而根據解密的錯誤資訊來推斷一部分明文相關的資訊。

CFB模式的全稱是 Cipher FeedBack模式(密文回報模式)。在CFB模式中,前一個密文分組會首先進行加密,然後再與明文分組進行XOR運算,最後得到密文分組。

如下圖所示CFB模式的加密:

下面是CFB模式的解密:

XOR加密,不是解密

CFB模式的攻擊

我們觀察在CFB解密階段,是通過密文加密之後和密文進行XOR操作得到明文的。

這樣就有可能進行重播攻擊。比如使用者可以将上一次發送過來的密文儲存起來,将下一次發送過來的密文進行替換,進而達到修改新明文的目的。

OFB模式的全稱是Output-FeedBack模式(輸出回報模式)。在OFB模式中,密碼的輸出會回報到密碼算法的輸入中。

OFB模式是通過将明文分組和密碼算法的輸出進行XOR運算來産生密文分組的。

OFB模式的加密過程:

密文分組1密文分組2密文分組3明文分組1明文分組2明文分組3初始化向量加密1加密2加密3XOR1XOR2XOR3

OFB模式的解密:

我們可以看到,OFB是将初始化向量不斷的加密進而得到後續的加密輸入。

他和CFB模式的差別也就在這裡。CFB是将密文分組當做加密輸入。

因為OFB模式中加密輸入跟要加密的資料無關,是以我們可以提前計算出來所有要用到的加密輸入,進而提高效率。

CTR模式的全稱是Counter模式(計數器模式)。CTR模式是一種将計數器不斷累加,然後進行加密進而生成密鑰流的流密碼。

下面是CTR模式的加密:

密文分組1密文分組2密文分組3明文分組1明文分組2明文分組3計數器CTR加密1XOR1計數器CTR+1加密2XOR2計數器CTR+2加密3XOR3

CTR模式的解密:

CTR模式的特點

CTR的加密和解密使用了完全相同的結構,是以在程式設計上比較容易實作。

CTR 可以任意順序對分組進行加密和解密,進而支援并行計算。

更多教程請參考 flydean的部落格