1. 程式人生 > 其它 >密碼學初探|加密模式

密碼學初探|加密模式

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模式