對稱塊加密算法加密模式詳解

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

    模式中文描述             英文名稱(Openssl縮寫)
   電子密碼本模式   Electronic Code Book(ECB)
    加密塊鏈模式           Cipher Block Chaining(CBC)
    加密反饋模式           Cipher Feedback 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
             |                |                                   |               |
             |                |                                   |----|         |--->...
IV--->XOR   |--->XOR   |--->...           Key Dec   |       Dec
             |       |         |       |                            |       |        |
             |       |         |       |                            |       |        |
   Key Enc      |      Enc     |                IV--->XOR   |--->XOR    
             |-----|         |-----|                           |                |     
             |                |                                  |                |
            C0            C1                                P1             P2
          加密過程                                       解密過程

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

       C2|C3|C4|C5|C6|C7|C8|C9<---|            C2|C3|C4|C5|C6|C7|C8|C9<---|
       -------------------------------     |            -------------------------------     |
                         |                         |                               |                        |
                         |                         |                               |                        |
            Key--->Enc                      |C10            Key--->Enc                     |C10
                         |                         |                               |                        |
                         |                         |                               |                        |
            取最左一個字節              |                 取最左一個字節               |
                         |                         |                               |                        |
                         |                         |                               |                        |
          P10--->XOR----------------->C10          C10--->XOR----------------)--->P10
                                                                                |______________|
                加密過程                                                解密過程

上面兩個圖中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<----|           S2|S3|S4|S5|S6|S7|S8|S9<------|
       -------------------------------     |            -------------------------------     |
                         |                         |                               |                        |
                         |                         |                               |                        |
            Key--->Enc                      |S10            Key--->Enc                     |S10
                         |                         |                               |                        |
                         |                         |                               |                        |
            取最左一個字節              |                 取最左一個字節               |
                         |______________|                               |_____________|
                         |                                                        |                       
          P10--->XOR----------------->C10          C10--->XOR------------------->P10
                                                                                
                加密過程                                                解密過程
可以看到,這種方法因爲沒有采用密文作爲加密的數據,所以克服了由於傳輸過程中由於單個比特導致64個相關比特解密失敗的情況,在本模式下,如果一個比特發生錯誤了,那麼只會影響其本身對應的一個比特,而不會影響別的。但是相對於其它模式,因爲數據之間相關性小,這種加密模式是比較不安全的,所以在應用的時候除非特別需要,一般不提倡應用OFB模式。

其他的一些補充: ■ 縮寫說明 ■ IN - 輸入向量 OUT - 輸出向量(未用於和明文加密前) ENC - 加密算法 K - 加密密鑰 P - 明文 C - 密文 XOR - 異或 << - 左移 BSIZE - 算法的加密塊尺寸 COUNT - 計數器 ------------------------------------------------------------------------------ 計數器(CTR)模式: IN(N) = ENC(K, COUNT++), C(N) = IN(N) XOR P(N);CTR 模式被廣泛用於 ATM 網絡安全和 IPSec應用中,相對於其它模式而言,CRT模式具有如下特點: ■ 硬件效率:允許同時處理多塊明文 / 密文。 ■ 軟件效率:允許並行計算,可以很好地利用 CPU 流水等並行技術。 ■ 預處理: 算法和加密盒的輸出不依靠明文和密文的輸入,因此如果有足夠的保證安全的存儲器,加密算法將僅僅是一系列異或運算,這將極大地提高吞吐量。 ■ 隨機訪問:第 i 塊密文的解密不依賴於第 i-1 塊密文,提供很高的隨機訪問能力 ■ 可證明的安全性:能夠證明 CTR 至少和其他模式一樣安全(CBC, CFB, OFB, ...) ■ 簡單性:與其它模式不同,CTR模式僅要求實現加密算法,但不要求實現解密算法。對於 AES 等加/解密本質上不同的算法來說,這種簡化是巨大的。 ■ 無填充,可以高效地作爲流式加密使用。 ------------------------------------------------------------------------------ 密文塊鏈接(CBC)模式:IN(N) = P(N) XOR C(N-1), C(N) = ENC(K, IN(N));在 CTR出現前廣泛使用的塊加密模式,用於安全的分組(迭代式)加密和認證。 ------------------------------------------------------------------------------ 密文反饋 (CFB) 模式: IN(N) = C(N-1) << (BSIZE-j), C(N) = ENC(K, IN(N)) << (BSIZE-j) XOR P(N). 其中 j 爲每次加密的位數。CFB 模式與 CBC 模式原理相似,但一次僅處理 j 位數據,其餘 BLOCKSIZE - j 位丟棄。由於以上性質,CFB 模式可以在不損失安全性的前提下,將塊加密變爲流式加密。但是該模式也是比較浪費的,因爲在每輪加解密中都丟棄了大部分結果(j 通常爲一字節(8 位),塊加密算法中每塊的尺寸通常爲64、128 或 256 位不等)。 ------------------------------------------------------------------------------ 輸出反饋 (OFB) 模式:IN(N) = OUT(N-1) << (BSIZE-j), C(N) = ENC(K, IN(N)) << (BSIZE-j) XOR P(N), OUT(N) = ENC(K, IN(N)) << (BSIZE-j). 該模式與 CFB 模式基本相同,只不過本次輸入是上次迭代中尚未與明文異或時的輸出。 與 CFB 模式一樣, OFB 模式也可以作爲流加密模式使用,除此之外,由於每次迭代的輸入不是上次迭代的密文,從而保證了較強的容錯能力, 即: 對一塊(一字節)密文的傳輸錯誤不會影響到後繼密文。但是,由於輸入沒有經過密文疊加使得其抗篡改攻擊的能力較差,通常需要與消息驗證算法或數字簽名算法配套使用。OFB 通常用於噪音水平較高的通信連接以及一般的流式應用中。 ------------------------------------------------------------------------------ 電碼本(ECB)模式: IN(N) = P(N), C(N) = ENC(K, IN(N)). 最簡單但最不安全的加密方式。每次迭代的輸入都使用相同密鑰進行無變換的直接加密。對於同樣的明文片斷,總會產生相同的,與之對應的密文段。抗重複統計和結構化分析的能力較差。一次性加密的最壞情況 (即:每次輸入的明文都小於等於 BSIZE 時) 就是電碼本模式。 僅在一次一密,或傳出極少數據時考慮使用 ECB 模式。 轉自:IaWeN's Blog-iawen,原創,安全,破解視頻,網頁設計,影視後期,AE特效鏈接:http://www.iawen.com/read.php/296.htm

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