對稱塊加密演算法加密模式詳解 (轉)

worldblog發表於2008-01-31
對稱塊加密演算法加密模式詳解 (轉)[@more@]

標題:對稱塊演算法加密詳解
作者:DragonKing
E: ">wzhah@263.net
原發網站:中國open專業論壇
版權宣告:未經作者允許,不能轉載和在出版物中使用本文

在openssl或其他密碼相關的資料中,我們經常看到對稱加密演算法有ECB、CBC之類加密模式的簡稱,到底這些加密模式是什麼呢?它們之間有什麼不同呢,今天就是為大家解開這個迷。
在現有的對稱加密演算法中,主要有4種加密處理模式,這4種加密處理模式一般是針對塊加密演算法而言的,如DES演算法。這4種加密模式羅列如下:

  模式中文描述  英文名稱(Openssl縮寫)
  電子密碼本模式  Electronic Code Book(ECB)
  加密塊鏈模式  Cipher Block Chaining(CBC)
  加密反饋模式  Cipher Feeack Mode(CFB)
  輸出反饋模式  Output Feedback Mode(OFB)
 
下面我們分別介紹這4種加密模式。
【電子密碼本模式】
這種模式是最早採用和最簡單的模式,它將加密的資料分成若干組,每組的大小跟加密金鑰長度相同,然後每組都用相同的金鑰進行加密。比如DES演算法,一個64位的金鑰,如果採用該模式加密,就是將要加密的資料分成每組64位的資料,如果最後一組不夠64位,那麼就補齊為64位,然後每組資料都採用DES演算法的64位金鑰進行加密。下圖:
_______________________
My name |is Drago|nKing
-----------------------
上圖“My name is DragonKing”這句話每8個字元(64位)作為一塊,然後使用一個相同的64位的金鑰對每個塊進行加密,最後一塊不足64位,就補齊後再進行加密。
可以看到,因為ECB方式每64位使用的金鑰都是相同的,所以非常容易獲得密文進行密碼,此外,因為每64位是相互獨立的,有時候甚至不用破碼,只要簡單的將其中一塊替換就可以達到目的。
【加密塊鏈模式】
該模式如下圖所示:
      P0  P1 C0  C1
      |    |       |   |
    |    |    |----|   |---&gt...
IV---&gtXOR  |---&gtXOR  |---&gt...  Key Dec  |  Dec
    |   |   |   |   |  |   |
   |   |   |  |   |   |   |
  Key Enc  | Enc   |  IV---&gtXOR  |---&gtXOR 
   |-----|  |-----|  |    | 
   |   |   |    |
 C0   C1    P1   P2
  加密過程    解密過程

從這兩個圖中大家可以看到,CBC模式的加密首先也是將明文分成固定長度(64位)的塊(P0,P1...),然後將前面一個加密塊輸出的密文與下一個要加密的明文塊進行XOR(異或)操作計算,將計算結果再用金鑰進行加密得到密文。第一明文塊加密的時候,因為前面沒有加密的密文,所以需要一個初始化向量(IV)。跟ECB方式不一樣,透過連線關係,使得密文跟明文不再是一一對應的關係,破解起來更困難,而且克服了只要簡單調換密文塊可能達到目的的。
但是該加密模式的缺點是不能實時解密,也就是說,必須等到每8個位元組都接受到之後才能開始加密,否則就不能得到正確的結果。這在要求實時性比較高的時候就顯得不合適了。所以才有了下面兩種加密模式。
【加密反饋模式】
加密反饋模式為了克服必須等待8個位元組全部得到才能進行解密的缺點,採用了一個64位(8個位元組)的位移暫存器來獲得密文,如下圖所示:

  C2|C3|C4|C5|C6|C7|C8|C9  -------------------------------  |  -------------------------------  |
  |    |    |  |
  |    |    |  |
  Key---&gtEnc  |C10  Key---&gtEnc   |C10
  |    |    |  |
  |    |    |  |
  取最左一個位元組   |  取最左一個位元組    |
  |    |    |  |
  |    |    |  |
  P10---&gtXOR-----------------&gtC10  C10---&gtXOR----------------)---&gtP10
   |______________|
  加密過程    解密過程

上面兩個圖中C2、C3以及P10等都是一個位元組(8位)的資料,所以能夠實現字元的實時加密和解密,不用再等到8個位元組都接受到之後再進行解密。圖示是在進行第10個位元組資料的加密和解密過程,在該過程中,先從移位暫存器取8個位元組的資料(C2到C9)用金鑰進行加密,然後取加密資料最左邊的一個位元組跟輸入的明文P10進行XOR(異或)操作,得到的值作為輸出密文C10,同時將C10送入到移位暫存器中。
需要注意的是,如果其中有一個位元組的密文在傳輸的時候發生錯誤(即使是其中的一位),那麼它出現在移位暫存器期間解密的8個位元組的資料都會得不到正確的解密結果,當然,這8個位元組過去之後,依然可以得到正確的解密結果。但是一個位元錯誤就影響到8個位元組(64個位元)的正確結果,導致魯棒性太差,所以就又提出了下面的加密模式OFB。
【輸出反饋模式】
輸出反饋模式OFB跟CFB幾乎是一樣的,除了其以為暫存器的輸入資料稍微有一點不同之外,如下圖:
  S2|S3|S4|S5|S6|S7|S8|S9  -------------------------------  |  -------------------------------  |
  |    |    |  |
  |    |    |  |
  Key---&gtEnc  |S10  Key---&gtEnc   |S10
  |    |    |  |
  |    |    |  |
  取最左一個位元組   |  取最左一個位元組    |
  |______________|    |_____________|
  |    | 
  P10---&gtXOR-----------------&gtC10  C10---&gtXOR-------------------&gtP10
 
  加密過程    解密過程
可以看到,這種方法因為沒有采用密文作為加密的資料,所以克服了由於傳輸過程中由於單個位元導致64個相關位元解密失敗的情況,在本模式下,如果一個位元發生錯誤了,那麼只會影響其本身對應的一個位元,而不會影響別的。但是相對於其它模式,因為資料之間相關性小,這種加密模式是比較不的,所以在應用的時候除非特別需要,一般不提倡應用OFB模式。

【參考資料】
1.中國openssl專業論壇
2.Computer Networks
3.《應用密碼學》


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998844/,如需轉載,請註明出處,否則將追究法律責任。

相關文章