密碼學初探|加密模式
https://mp.weixin.qq.com/s/ynPaGOaBKFuBEWbrQKoPFQ
1、實際加密場景
在實際的分組密碼加密過程中,無論是文字檔案,圖形影象,或是電子郵件,長度都是不定的,基本不會等於單個加密演算法的分組長度,對這些長明文資料的加密,有多種不同的方式,常用的有如下幾種:
電碼本模式(ECB)
分組連結模式(CBC)
計數器模式(CTR)
輸出反饋模式(OFB)
密碼反饋模式(CFB)
GCM模式
其中,
ECB、CBC模式要求明文長度是分組長度的整數倍,如何將不同長度的明文組織為分組長度的整數倍,將在後續內容中分享;
CTR、OFB、CFB三種模式將分組密碼用作序列密碼的基本模組;
而GCM模式同時實現了身份驗證和資料加密。
2、加密模式
2.1 ECB模式
ECB模式是最簡單、最直接的加密模式。
ECB模式要求將明文按照演算法的分組長度進行分割,使用金鑰對每個分組進行加密後進行拼接,獲取密文資料;解密時,對密文按照演算法分組長度分割後使用金鑰對分組進行解密拼接後,獲取的資料結果就是明文資料。
流程如下:
圖一 ECB模式加密流程
2.2 CBC模式
CBC模式要求加密之前設定一個初始化向量(IV),IV值長度與分組長度相等,加密過程分兩步:
1) 第一個分組,對IV與其進行異或進行加密
2) 對於其的分組,以上一個分組的加密結果為IV,對分組資料與新IV值異或的結果進行加密
解密過程同樣分兩步:
1) 第一個分組,解密後,使用解密結果與IV異或,獲取明文
2) 其他分組,將上一分組密文作為IV,對該分組解密後,與新的IV值異或,獲取明文
具體的流程如下:
圖2 CBC加密模式
與其他加密模式相比,CBC模式是在加密前對明文進行操作,然後對明文加密的方式。在使用CBC加密時,由於每一個分組都需要上一個分組的結果(第一個分組需要IV),因此只能序列,效率上要比ECB差些。
同時,CBC模式中,IV值的變化,也能夠使同一個金鑰,使用一樣的演算法加密同一個密文的結果不一致,這樣的結果對於oscar來說,兩次加密的結果是不相關的,降低被攻擊的風險。
一般來說,我們需要的IV值最好能做到每次都是完全隨機的,但這並不容易,所以通常會採用計數器模式,ECB加密計數器結果,hash計算計數器加密結果等方式生成需要的IV值。
而在一些特殊情況下,使用固定值作為IV也是一種可用的選擇方案,比如在AES演算法中,很多場景會選擇16bytes 0X00作為IV值
2.3 CTR、OFB、CFB
這三種模式都是通過各種方式對金鑰進行轉換,然後轉換出的結果與明文異或之後獲取密文,這裡僅做簡單介紹。
CTR:選擇一個IV,與CBC模式不同,這裡的IV值長度要小於分組長度,剩餘為計數器長度(比如AES演算法,IV長度96bits,計數器長度32bits),將IV與計數器拼接後加密,並與明文異或,獲取密文。
OFB:選擇IV,對IV加密後的s與明文異或得密文,然後將s作為新的IV,重複以上內容計算最終的密文;
CFB:選擇IV,對IV加密後與明文分組進行異或,將異或結果作為新的IV,重複以上內容計算最終的密文。
2.4 GCM
GCM是一種加密認證模式。加密部分使用CRT模式通過對IV和計數器的變化計算密文,而認證buf則是利用有限域上的乘法進行HASH
加密流程如下:
圖3 GCM加密模式
3 - 加密模式存在的問題
3.1 ECB模式的流量分析攻擊
ECB模式加解密時,各個分組分別加密,互不影響,所以在使用時可以採用多路並行加密的方式進行,保證加密速率。
同樣由於每個分組互不影響,容易造成只要金鑰不變,相同的明文分組加密出的結果相同,這樣就可以通過流量分析對密文進行攻擊;
而且分組間無任何關係,oscar可以對密文分組進行重排,bob收到的密文可以正確解密,但解密結果並不是正確的明文。
3.2 使用IV的雪崩效應
CBC、OFB、CFB、GCM因為都要使用IV,而且從以上加密模式的描述中可以看到,
後邊分組資料的加密都要依賴前一個分組的加密結果,如果前一個分組的加密結果出現問題,則其後的所有分組加密都會出現異常
4、如何選擇加密模式
實際應用中,ECB多應用於儲存加密方向,CBC多應用於傳輸加密方向,其他加密模式相對使用較少。但對加密模式的選擇也需要考慮使用場景的需求。
磁碟加密由於加密的資料量很大,而且磁碟中的資料不是連續的,因此加密時通常要選擇ECB模式,滿足快速加密和防止雪崩效應的需求;
網路通訊中,為應對流量分析攻擊,多選擇CBC模式