當需要加密任意長度明文時,就需要分組叠代進行加密。 下面我們會聊到常用的分組模式和使用場景
分組密碼有很多模式,如果模式選擇不當,就無法充分保證明文的機密性(還記得密碼加密體系要完成的三個目标麼?)。比如當我們使用密鑰加密一個全是'A'字符的文件時,如果沒有分組叠代,那麼密文可能都是相同字符的重複。 雖然我們沒辦法通過密文反推出明文,但根據不斷重複出現的密文,可以大緻推測出明文的字符分布規律。借助其他統計概率方法,可以大幅降低解密難度(參考通過詞頻破解凱撒加密的案例)。
那什麼是模式呢?
模式是:分組密碼的叠代算法。比如我們常使用的 DES 算法中的 ECB 模式。 ECB 模式就是将明文分割成多個分組并逐個加密的方法。 ECB 算法計算量小,加解密速度快,但現在已經證實 ECB 是不可靠的模式了。 所以正式場合中不要使用 ECB 模式。
模式是分組密碼特有的方式,在流密碼中并不存在模式。那何為流密碼呢?
分組密碼每次隻能處理特定長度的一塊數據,一塊有時也稱之為block。一個分組(block)的比特數就是分組長度。 流密碼是對數據流進行連續處理的加密算法。流密碼在加解密時需要保存上次計算的狀态(分組密碼則不需要,因為分組密碼隻需要計算當前 block 數據就可以了)。
我們在本節中隻介紹分組密碼,暫不介紹流密碼。
下面來看常見的幾種分組模式。
ECB 将明文進行分組後直接加密産生密文分組
由圖可以看出 ECB 模式中,明文和密文是一一對應的。相同的明文一定可以得到相同的密文。所以雖然不能直接根據密文推導出明文,但可以根據密文的特點進行定向攻擊。
例如: Bob 向 Alice 發送了一個轉賬的報文:
分組1 = Bob的銀行賬号
分組2 = Alice的銀行賬号
分組3 = 轉賬金額
雖然 Eve 不能直接修改賬号和金額(因為沒有解密數據),但 Eve 可以通過交換分組 1 和分組 2,造成攻擊。
分組1 = Alice的銀行賬号
分組2 = Bob的銀行賬号
分組3 = 轉賬金額
這種攻擊方式能成功就是因為 ECB 沒有隐藏明文信息造成的。
密文分組鍊接模式
顧名思義,CBC 是将密文分組像鍊條一樣相互連接起來。典型的加密流程如下:
CBC 最核心的一個環節,是将前一個密文分組作為一個變量帶入了下一個明文加密中。 這樣即便明文相同,但經過密文異或操作後,就會出現不同的結果。通過這樣就實現了混淆明文信息的目的。
但不知道你有沒有發現,第一個明文分組如何處理呢? 在處理第一個明文分組時,異或為 0.那麼密文分組 A 就退化成了 ECB 模式。 為了避免出現這種情況,我們就需要人為補充一個初始密文分組,這個初始的密文分組就稱為IV分量
一般來說,每次加密時都應該随機産生一個不同比特的 IV 分量(如何随機産生,請參考本系列最後的随機工具箱說明)
在 CBC 模式中,我們無法單獨解密某個分組。從圖中也很容易理解,每個分組都需要前向分組信息才可以計算。這樣設計有利有弊,好的是安全性高,但不好的地方是如果某個分組數據被損壞,會導緻當前分組和下個分組的數據無法正常解密。
對 CBC 模式的一種改進
CFB 是對 CBC 模式的一種優化,加密流程看起來很類似:
在 CFB 模式中,明文分組和密文分組之間隻做異或操作就可以了。在此時此刻,密碼算法的輸出有一些一次性密碼本的意思了。
輸出反饋模式。 密碼算法的輸出會反饋到密碼算法的輸入中
OFB 并不是通過密碼算法對明文進行加密的,而是通過将明文分組和密碼算法的輸出進行異或來産生密文的。所以 OFB 和 CFB 也有一些類似.
注意: 加密函數的順序一定要保持一緻,無論是加密和解密都需要相同順序的加密函數序列
從圖中可以看出 OFB 模式和 CFB 模式很相近,區别僅僅在于密碼算法的輸入。
CFB 是将前一個密文分組作為下一個密碼算法的輸入,所以叫做密文反饋模式。 OFB 則是将前一個密碼算法的輸出當作下一個密碼算法的輸入,所以叫做輸出反饋模式.
這四種是常用的分組密碼模式,那麼我們應該選擇哪種模式作為分組加密模式呢?
所以綜上所述,除了 ECB 不推薦之外。其他三種,隻能可以容忍缺點,那麼都是推薦使用的分組模式。
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!