簡述
DES和AES都屬于分組密碼,它們只能加密固定長度的明文,如果需要加密任意長度的明文,就需要對分組密碼進行迭代,而
分組密碼的迭代方法就稱為分組密碼"模式",
分組密碼有很多模式,如果模式選擇不當,就無法充分保證機密性,
分組密碼與流密碼
分組密碼:每次只能處理特定長度的一塊資料的一類密碼演算法,這里的"一塊"就稱為分組,此外,一個分組的位元數就稱為分組長度,
流密碼:對資料流進行連續處理的一類密碼演算法,流密碼中一般以1bit、8bit、32bit等為單位進行加密存盤,
一次性密碼屬于流密碼,DES、3DES、AES等大部分對稱密碼演算法都是分組密碼,
加密模式
ECB(Electronic CodeBook mode):電子密碼本模式
CBC(Cipher Block Chaining mode):密碼分組鏈模式
CFB(Cipher FeedBack mode):密碼反饋模式
OFB(Output FeedBack mode):輸出反饋模式
CTR(CounTeR mode):計時器模式
ECB模式
ECB(Electronic CodeBook):將明文分組加密后結構直接加密成密文,

注意:當最后一個明文分組的內容小于分組長度時,需要用一些特定的資料進行填充,
所以說,如果中間人瞎幾兒改資料,不要改到最后一個分組的,接收端都可以進行正常的解密,
CBC模式
CBC(Cipher Block Chaining):首先將明文分組之前與前一個密文分組進行XOR運算,然后再進行加密,

注意:當加密第一個明文分組時,由于不存在“前一個密文分組”,因此需要事先準備一個長度為一個分組的位元序列來代替“前一個密文分組”,這個位元序列稱為初始化向量(Initialization Vector),縮寫為IV,一般每次加密時都會隨機產生一個不同的位元序列來作為初始化向量,
注意:在分組密碼中,當明文長度不為分組長度的整數倍時,需要在最后一個分組中填充一些資料,使其湊滿一個分組長度,
注意:SSL/TLS,就是使用CBC模式來確保通信的機密性,如CBC模式中的三重DES為3DES_EDE_CBC,CBC模式256位元AES為AES_256_CBC,
CFB模式
CFB(Cipher FeedBack):前一個密文分組會被送回到密碼演算法的輸入端,

CFB與CBC的區別在于,CFB會把分組的密文再進行加密后,參與下一個分組的加密,
OFB模式
OFB(Output-Feedback):密碼演算法的輸出會反饋到密碼演算法的輸入中,

CTR模式
CTR(CounTeR):是一種通過將逐次累加的計算器進行加密來生成密鑰流的流密碼,每一個分組對應一個逐次累加的計數器,并通過計數器進行加密來生成密鑰流,也就是說,最終的密文分組是通過將計數器加密得到的位元序列,與明文分組進行XOR而得到的,

注意:每次加密時都會生成一個不同的值(nonce)來作為計數器的初始值,當分組長度為128位元(16位元組)時,計數器的初始值可能是下面這樣的形式:

在加密的程序中,計數器的值會產生如下的變化,

分組模式對比表

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/337614.html
標籤:其他
