使用金鑰進行對稱式加密時,要加密的明文長度通常都會遠大於金鑰長度
所以為了讓加密的演算法可以使用在各種不同長度的訊息上
加密的演算法會將明文或密文切割成區塊
來依序進行處理
而這個區塊
的大小,會剛好是金鑰的長度(扣掉檢查碼等等的)
有關對稱式加密的演算法如何依序處理這些區塊
,又分成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模式
感謝分享
這邊文章對我初步了解各模式間的差異很有幫助!