標準信息
工作組:ISO/IEC JTC 1/SC 27
采標情況:BS ISO/IEC 10116-2006,IDT
中國標準分類:L80
國際標準分類:35.040
標準狀態:替代ISO/IEC 10116-1997、ISO/IEC FDIS 10116-2005;
文檔頁數:48
加密模式
ISO10116用的算法是對稱塊加密算法加密模式。
在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模式。