新聞動態
在密碼學中,分組密碼的輸入為具有b位固定長度的明文分組和密鑰,輸出為b位的密文。明文長度若大于b位,則可簡單將其分為b位一組的塊。每次使用相同的密鑰對多個分組加密,則會引發許多安全問題。為了將分組密碼應用于各種各樣的實際應用,也就出現了多種分組密碼的工作模式,從本質上講,工作模式是一項增強密碼算法或者使算法適應具體應用的技術,如將分組密碼應用于數據塊組成的序列或者數據流。
通俗來講就是,分組密碼的工作模式就是描述了如何重復加密較長的多個數據塊,而分組密碼則是用于對其中一個數據進行加解密。
我國于2021年發布了新修訂的國家標準GB/T 17964-2021《信息安全技術 分組密碼算法的工作模式》,該標準規定了分組密碼算法的工作模式,一共分為了九種工作模式:電碼本(Electronic Codebook,ECB)、密文分組鏈接(Cipher Block Chaining,CBC)、密文反饋(Cipher Feedback,CFB)、輸出反饋(Output Feedback,OFB)、計數器(Counter,CTR)、帶密文挪用的XEX可調分組密碼(XEX Tweakable block cipher with ciphertext Stealing,XTS)、帶泛雜湊函數的計數器(universal Hash function based CTR,HCTR)、分組鏈接(Block Chaining,BC)、帶非線性函數的輸出反饋(Output Feedback with a Nonlinear Function,OFBNLF)。其中ECB、CBC、CFB、OFB、CTR為常見的五種分組密碼工作模式,下面會對這五種工作模式詳細介紹。
電碼本是最簡單的工作模式,它一次處理一組明文分塊,每次使用相同的密鑰加密,加密流程見圖1,解密流程見圖2。對于給定的密鑰,任何b位的明文組只有唯一密文與之對應,所以,根據任意b位明文都可以查到相應的密文。
明文長度若長于b位,則可簡單將其分為b位一組的塊,若在最后一塊明文長度不足b位,則需要進行填充,解密也是一次執行一塊,且使用相同的密鑰。
根據ECB模式的加解密流程,我們可通過如下方式進行表示。其中為明文分組,每一組的明文都是由一串b位的塊組成,相應的密文分組依次為,K為密鑰。
加密:
解密:
圖1 ECB加密流程
圖2 ECB解密流程
ECB最重要的特征是一段消息中若有幾個相同的明文組,那么密文也將出現幾個相同的密文分組。因此無法隱蔽數據模式,對某一個分組的加密或解密可獨立于其他分組進行,對密文分組的重排也將導致明文分組的重排。
對于很長的信息,ECB模式可能存在攻擊漏洞。如果消息是非結構化的,攻擊者就可以利用這些規律性特征來破譯。例如,若已知這段消息總是以某些固定的字符開頭,攻擊者就可以擁有大量已知明密文對其開展攻擊。若消息有重復的成分,且重復的周期正好是b位的倍數,攻擊者就能分辨出這些成分,使用代換或者重排這些塊的方法進行攻擊。因此,ECB模式無法抵抗對分組的重放、嵌入和刪除等攻擊。
所以,從上面可以看出,ECB模式的優點是并行運算,速度快;缺點就是安全性較低,容易受到攻擊。其適用于加密密鑰、隨機數等短數據。
為了避免重復的明文分組加密之后依然是相同的密文分組,CBC模式相對于ECB模式做了一些修改,CBC模式下加密算法輸入是當前的明文組和上一個密文組的異或,而解密則是將當前密文分組解密后和上一個密文分組進行異或就得到當前的明文分組,加解密流程見圖3、圖4,使用的密鑰都是相同的,這樣若有重復的明文組,加密后也看不出來了。并且CBC和ECB類似,最后的分組若不是完整的分組,仍然需要進行填充。
對于第一塊明文加密,由于不存在“前一個密文分組”,因此需要事先準備一個長度為一個分組的比特序列來代替“前一個密文分組”,這里引入了一個初始向量IV,IV和密文具有相同長度的數據分組,并且收發方都需使用同一個IV。為了安全性,每次加密的IV取值都是隨機不同的,一般采用時間戳或者隨機數發生器產生的隨機分組。
根據加解密流程可以通過如下方式進行表示。
加密:
解密:
圖3 CBC加密流程
圖4 CBC解密流程
從上面可以看出CBC的優點是同樣的明文組不會被加密成相同的密文組,解密支持并行計算。缺點則是加密過程是串行的,無法被并行化,而且消息必須被填充到塊大小的整數倍;對包含某些錯誤比特的密文解密時,會導致其對應的明文塊完全改變和下一個明文塊中對應位發生改變。
CBC工作模式同樣也存在攻擊漏洞,例如字節反轉攻擊、AES-CBC密文填充攻擊等。
此外,CBC除了可以實現機密性,還是可以用于認證,它可以生成消息鑒別碼(MAC),使用最后一個分組的輸出結果作為MAC,MAC可以用于檢驗消息的完整性、驗證消息源的真實性等。因此CBC模式適用于加密任意長度的數據,以及計算產生檢測數據完整性的消息鑒別碼MAC。
和上面所說的兩種工作模式有些不同,CFB是將分組密碼當成流密碼使用。流密碼的密文和明文等長,并且不需要將明文長度填充成分組長度的整數倍,可以實時操作。所以,待發送的字符流中任何一個字符都可以用面向字符的流密碼加密后立即發送。
CFB的加密流程如圖5所示,加密算法的輸入是b位的移位寄存器,其初始值為初始向量IV;然后使用密鑰對IV進行加密,得到的結果只選用最左邊的s位(這里假設傳輸單元為s位),其余的丟棄;之后再將截選的s位與明文的第一個分段P1異或得到密文的第一個單元C1;接下來將得到的C1作為下一輪加密算法的輸入,此時移位寄存器左移s位,C1填入移位寄存器的最右邊s位,然后加密,重復進行上述操作,直至所有明文加密成密文。
上面由加密算法所生成的比特序列我們將其稱之為密鑰流,在CFB中加密算法就相當于用來生成密鑰流的偽隨機數生成器,而IV就相當于偽隨機數生成器的種子。
CFB的解密流程如圖6所示,解密流程和加密差不多,只是有一點不同的是將得到的密文單元與加密算法的輸出異或就可以得到明文單元。需要注意的是這里使用的是加密算法而不是解密算法,因為我們這里解密要得到的是密鑰流,而密鑰流就是通過加密算法得來的。
根據加解密流程可以通過如下方式進行表示,其中MSBs(X)表示X的最左邊s位。
加密:
解密:
圖5 CFB加密流程
圖6 CFB解密流程
CFB模式和CBC類似,每一個分組的結果會受到前面所有分組內容的影響,所以即使出現有相同明文的情況下,也都產生的不同的密文;解密可以并行化;還有一個優點是通過流密碼模式進行加密,可以及時加密傳送小于分組的數據。
而缺點和CBC一樣,加密為串行,無法并行計算,效率大大降低;并且存在誤差傳遞,一個單元出現問題會影響到后面多個單元,所以可用于檢查發現明文密文的篡改。CFB存在有攻擊漏洞,無法抵抗重放攻擊。
OFB模式和CFB類似,其加解密流程如圖7、圖8所示,不同的地方OFB的加密算法的輸入是上一個加密算法的輸出,而CFB的加密算法輸入是上一輪得到的密文分組;并且OFB是對整個明文和密文分組進行運算,而不是僅對s位的子集運算。OFB最開始輸入的時變值也就是上面所說的初始向量IV。
通過下圖的加解密流程可以看出,異或所需要的密鑰流可以事先通過密碼算法生成,而這個過程不涉及明文分組,也就是下圖中虛線框部分。所以在實際加密過程中,我們只需要提前準備好所需的密鑰流,就完全不需要使用密碼算法,只需要將明文和密鑰流進行異或即可,而異或相比于那些加密算法是非常快的,因此實際操作過程中可以利用OFB這一特性大大提升工作效率。
根據加解密流程可以通過如下方式進行表示。
加密:
解密:
圖7 OFB加密流程
圖8 OFB解密流程
OFB的優點有,隱藏了明文的模式;可以及時加密傳送小于分組的數據,由于加密算法的輸入沒有使用到上一輪的密文分組,所以同CFB不同的是,OFB無誤差傳遞問題。而缺點也很明顯,加解密都是串行運算,無法并行化;并且安全性較CFB要差,這是因為密鑰流由密鑰本身產生,具有周期性,在使用相同密鑰加密的數據到達一定數量時,會產生重復,這也就降低了算法的安全性。
CTR模式通過將逐次累加的計數器進行加密來生成密鑰流的流密碼。其加解密流程如圖9、圖10所示,計數器剛開始被初始化為某個值,隨著信息塊的增加計數器的值加1(mod 2b,b為分組長度),加密時,計數器加密后與明文分組異或得到密文分組,不同的密文分組之間沒有關聯。解密使用相同值的計數器序列,用加密后的計數器值與密文分組異或來恢復明文分組。因此解密方需要知道初始計數器的值。與ECB和CBC不同的是,由于CTR的結構關系,我們不需要對明文進行填充。
根據加解密流程可以通過如下方式進行表示。
加密:
解密:
圖9 CTR加密流程
圖10 CTR解密流程
從上面兩個CTR能夠以任意順序處理分組,這就意味著它能夠實現并行計算,而且錯誤不會傳播;CTR模式的加密和解密使用了完全相同的結構,因此在程序上實現就比較容易。同OFB類似,CTR同樣可以事先生成密鑰流,在實際加密過程中只需要將密鑰流與明文分組相異或。不過CTR安全性要比OFB較高,由于CTR密鑰流的產生每次所使用的都是不同的初始值,所以也就不存在密鑰出現重復的情況。
CTR模式也存在有攻擊漏洞,攻擊者可以通過反轉密文分組中的某些比特,引起解密后明文中的相應比特也發生反轉。
工作模式 |
描述 |
優點 |
缺點 |
用途 |
ECB |
用相同的密鑰分別對明文分組獨立加密 |
·簡單快速 ·無差錯傳播 ·支持并行計算(加密、解密) |
·無法隱蔽明文數據格式規律和統計特征 ·無法抵抗重放、嵌入和刪除攻擊 |
適用于傳送短數據(如一個加密密鑰) |
CBC |
加密算法的輸入是上一個密文組和當前明文組的異或 |
·可以隱蔽明文數據格式規律和統計特征 ·一定程度上可以抵抗重放、嵌入和刪除等攻擊 |
·存在差錯傳播 ·加密不支持并行計算 |
適用于加密任意長度的數據;并且可以用于認證 |
CFB |
一次處理s位,上一塊密文作為加密算法的輸入,產生的偽隨機數輸出與明文異或作為下一個單元的輸入 |
·可以隱蔽明文數據格式規律和統計特征 ·具有自同步流密碼優點 |
·存在差錯傳播 ·加密不支持并行計算 ·不能抵抗重放攻擊 |
適用于加密數據流,并且可用于認證 |
OFB |
與CFB類似,只是加密算法輸入是上一個加密的輸出,且使用的整個分組 |
·可以隱蔽明文數據格式規律和統計特征 ·具有同步流密碼優點 ·無差錯傳播 ·可事先進行加解密準備,產生密鑰流 |
·不支持并行計算 ·對于密文被篡改難以進行檢測 ·攻擊者反轉密文分組中的某些比特時,明文分組中相對應的比特也會被反轉 |
噪聲信道上的數據流傳輸(如衛星通信) |
CTR |
每個明文分組都與一個經過加密的計數器相異或。對每個后續分組計數器遞增。 |
·可以隱蔽明文數據格式規律和統計特征 ·具有同步流密碼優點 ·無差錯傳播 ·支持并行計算 ·可事先進行加解密準備,產生密鑰流
|
·對于密文被篡改難以進行檢測 ·攻擊者反轉密文分組中的某些比特時,明文分組中相對應的比特也會被反轉 |
適用于實時性和速度要求比較高的加密場合 |
參考資料: