密碼的加密模式(ECB CBC CFB OFB CTR)

使用金鑰進行對稱式加密時,要加密的明文長度通常都會遠大於金鑰長度

所以為了讓加密的演算法可以使用在各種不同長度的訊息上

加密的演算法會將明文或密文切割成區塊來依序進行處理

而這個區塊的大小,會剛好是金鑰的長度(扣掉檢查碼等等的)

有關對稱式加密的演算法如何依序處理這些區塊,又分成5種區塊加密模式
 


 

ECB 模式

ECB模式的全名為Electric CodeBook Mode

ECB模式的運作原理就是將明文所切成的明文區塊直接當成加密演算法的輸入,如圖:

使用ECB模式加密後,明文區塊密文區塊是類似一對一的關係

換句話說,如果有兩個相同的明文區塊,它們會產出一樣的密文區塊

這樣在資訊安全上就不太及格,因為觀察密文區塊的一樣與否就可以找出哪幾個明文區塊存在一樣的信息

除非不得已不然不建議使用ECB模式


 

CBC 模式

CBC模式的全名為Chiper Block Chaining Mode

CBC模式ECB模式的運作原理很類似,但是加密中又加了前一個密文區塊XOR運算

使這整個加密過程很像一條chain,也是這個名稱的由來

因為加密當前的明文區塊需要加入前一個密文區塊XOR運算

所以可以擺脫ECB模式同樣的明文區塊會產生相同的密文區塊這個弱點

初始化向量(Initial Vector)

由於密文區塊1前面已經沒有任何的密文區塊

所以電腦會以隨機數來產生與密文區塊同樣大小的區塊初始化向量(Initial Vector)

這個初始化向量會充當密文區塊1的前一個密文區塊

如此即可以解決密文區塊1前面沒有任何的密文區塊的問題


 

CFB 模式

CFB模式的全名為Chiper FeedBack Mode

CFB模式可以說是不同順序的CBC模式版本

CBC模式中,前一個密文區塊會先與明文區塊XOR運算才進行加密

到了CFB模式,前一個密文區塊會先用加密演算法加密,才與明文區塊XOR運算

前一個密文區塊“feedback”至加密演算法的input,這也是它名稱的由來


 

OFB 模式

OFB模式的全名為Output FeedBack Mode

OFB模式中,加密演算法的output會”feedback”回加密演算法的input

CFB模式很像,但卻彌補了CFB模式如果要指定直接加密第x個明文區塊

要重新從第一個明文區塊開始加密直到第(x-1)個明文區塊,才有辦法處理第x個明文區塊的缺點

OFB模式中,如果要指定直接加密第x個明文區塊,只要重複把初始化向量做(x-1)次加密即可


 

CTR 模式

CTR模式的全名為Counter Mode

使用OFB模式雖然可以以比較快速的方式指定直接加密第x個區塊

但是對初始化向量重複做(x-1)次加密這個動作還是有點沈長

所以在CTR模式中用了計數器counter的概念取代初始化向量

CTR模式的運作原理是先產生一個隨機值,然後拿加密後的隨機值與明文區塊XOR運算產生密文區塊

接著隨機值+1,再重複上述的動作

第一個密文區塊 = 第一個明文區塊與加密後的(隨機值+0)進行XOR
第二個密文區塊 = 第二個明文區塊與加密後的(隨機值+1)進行XOR
第三個密文區塊 = 第三個明文區塊與加密後的(隨機值+2)進行XOR

第x個密文區塊 = 第x個明文區塊與加密後的(隨機值+x-1)進行XOR

有了這樣的關係,往後要指定直接加密第x個明文區塊就可以立刻求出來

而且還可以在支援同步處理的系統上,同步加密明文區塊,大幅減少加密所需的時間

 

對稱式加密時,不只有加密演算法很重要,如果忽略了區塊加密模式

有極大的可能會不自覺地依照明文區塊依序加密,也就相當使用了安全性最弱的ECB模式


發佈留言