目錄
1. 概述
2. ECB模式
2.1 概述
2.2 ECB模式的加密
2.3 ECB模式的解密
2.4 優點
2.5 缺點
3. CBC模式【推薦】
3.1 概述
3.2 CBC模式的加密
3.3 CBC模式的解密
3.4 優點
3.5 缺點?
4. CFB模式
4.1 概述
4.2 CFB模式的加密
4.3 CFB模式的解密
4.4 優點
4.5 缺點
5. OFB模式
5.1 概述
5.2 OFB模式的加密
5.3 OFB模式的解密
5.4 CFB模式與OFB模式的對比
6. 參考
1. 概述
????????密碼算法可以分為分組算法和流密碼兩種。
-
分組密碼(block cipher),是每次只能處理特定長度的一塊數據的一類密碼算法,這里的“一塊”就稱為分組(block)。一個分組的比特數就稱為分組長度(block length)。
-
流密碼(stream cipher),是對數據流進行連續處理的一類密碼算法。
????????DES、3DES、AES等大多數對稱密碼算法都屬于分組密碼,它們只能加密固定長度的明文。如果需要加密任意長度的明文,就需要對分組密碼進行迭代,而分組密碼的迭代方法就稱為分組密碼的“模式”。
-
DES和3DES的分組長度都是64bit(8byte),一次只能加密64bit的明文,并生成64bit的密文。
-
AES的分組長度為128bit(16byte),因此AES一次可加密128bit的明文,并生成128bit的密文。
2. ECB模式
2.1 概述
????????ECB模式全稱Electronic CodeBook mode,電子密碼本模式。
????????使用ECB模式加密時,相同的明文分組會被轉換為相同的密文分組,也就是說,我們可以將其理解為是一個巨大的“明文分組→密文分組”的對應表,因此ECB模式也稱為電子密碼本模式。
當最后一個明文分組的內容小于分組長度時,需要用一些特定的數據進行填充(padding)。
2.2 ECB模式的加密
2.3 ECB模式的解密
2.4 優點
- 一個分組損壞不影響其它分組。
- 可以并行加解密。
2.5 缺點
- 相同的明文分組會轉換為相同的密文分組。
- 無需破譯密碼就能操縱明文(每個分組獨立且前后文無關,直接增加或刪除一個分組不影響其它分組解密過程的正確性)。
3. CBC模式【推薦】
3.1 概述
????????CBC 模式的全稱是Cipher Block Chaining模式(密文分組鏈接模式),之所以叫這個名字,是因為密文分組是像鏈條一樣相互連接在一起的。
????????在CBC模式中,將明文分組與前一個密文分組進行XOR運算,然后再進行加密。每個分組的加解密都依賴于前一個分組。而第一個分組沒有前一個分組,因此需要一個初始化向量(initialization vector),通常縮寫為IV。
3.2 CBC模式的加密
3.3 CBC模式的解密
3.4 優點
- 加密結果與前文相關,有利于提高加密結果的隨機性。
- 可并行解密。
3.5 缺點?
- 無法并行加密。
- 一個分組損壞,如果密文長度不變,則兩個分組受影響。
- 一個分組損壞,如果密文長度改變,則后面所有分組受影響。
4. CFB模式
4.1 概述
????????CFB模式的全稱Cipher FeedBack mode,密文反饋模式。
????????在CBC模式中,前一個密文分組會被送回到密碼算法的輸入端。所謂反饋,這里指的就是返回輸入端的意思。
????????在CBC和EBC模式中,明文分組都是通過密碼算法進行加密的。而在CFB模式中,明文分組并沒有通過加密算法直接進行加密,明文分組和密文分組之間只有一個XOR。
????????CFB模式是通過將“明文分組”與“密碼算法的輸出”進行XOR運行生成“密文分組”。CFB模式中由密碼算法生成的比特序列稱為密鑰流(key stream)。密碼算法相當于密鑰流的偽隨機數生成器,而初始化向量相當于偽隨機數生成器的種子。(CFB模式有點類似一次性密碼本)
4.2 CFB模式的加密
4.3 CFB模式的解密
4.4 優點
- 支持并行解密。
- 不需要填充(padding)。
4.5 缺點
- 不能抵御重放攻擊(replay attack)。
- 不支持并行加密。
5. OFB模式
5.1 概述
????????OFB 模式的全稱是Output-Feedback模式(輸出反饋模式)。在OFB模式中,密碼算法的輸出會反饋到密碼算法的輸入中。
????????OFB模式并不是通過密碼算法對明文直接進行加密的,而是通過將“明文分組”和“密碼算法的輸出”進行XOR來產生“密文分組”的,在這一點上OFB模式和CFB模式非常相似。
5.2 OFB模式的加密
5.3 OFB模式的解密
5.4 CFB模式與OFB模式的對比
????????OFB模式和CFB模式的區別僅僅在于密碼算法的輸入。
????????CFB模式中,密碼算法的輸入是前一個密文分組,也就是將密文分組反饋到密碼算法中,因此就有了“密文反饋模式”這個名字。????????
????????相對地,OFB模式中,密碼算法的輸入則是密碼算法的前一個輸出,也就是將輸出反饋給密碼算法,因此就有了“輸出反饋模式”這個名字。
????????由于CFB模式中是對密文分組進行反饋的,因此必須從第一個明文分組開始按順序進行加密,也就是說無法跳過明文分組1而先對明文分組2進行加密。
????????相對地,在OFB模式中,XOR所需要的比特序列(密鑰流)可以事先通過密碼算法生成,和明文分組無關。只要提前準備好所需的密鑰流,則在實際從明文生成密文的過程中,就完全不需要動用密碼算法了,只要將明文與密鑰流進行xoR就可以了。和AES等密碼算法相比,XOR 運算的速度是非常快的。這就意味著只要提前準備好密鑰流就可以快速完成加密。換個角度來看,生成密鑰流的操作和進行XOR運算的操作是可以并行的。
6. 參考
????????圖解密碼技術(第3版) (日)結城浩 著;周自恒 譯; 人民郵電出版社;2016-06-01