資訊保安(1)之對稱加密
對稱加密是使用相同的金鑰對資料進行加密和解密。對稱加密由於其安全性高和加解密速度快,被用於資料的加密。
場景
Alice 傳送郵件給 Bob,但是郵件的內容是不能被其他人看到的,如何處理才能滿足Alice的要求呢?
常用的演算法
- DES
DES是一種將64位元的明文加密稱64位元的密文的對稱加密演算法。他的金鑰長度是64位元,但其每隔7位元會設定一個用於
錯誤檢查的位元,因此實質上其金鑰長度是56位元。
DES 已經可以被暴力破解,現在不應該再使用。
- 3DES
3DES是將DES重複3次所得到的一種密碼演算法。
3DES 策略為 加密 —> 解密 —> 加密的過程。採用這個過程的目的是為了相容普通的DES。
3DES的金鑰長度實質上是 56 x 3 = 168 位元。因此,其安全強度要遠高於DES。
3DES處理速度不高。
- AES
AES也叫 Rijndael。是目前最常用的加密演算法。其金鑰長度可以為128、192、256位元。
關於Rijndael的詳細說明如下連結:
ofollow,noindex">rijndael-ammended.pdf
推薦使用:AES
分組密碼模式
DES或者AES都是對某一特定長度的位元序列為一個單位進行加密,比如64位元,這個64位元的單位稱為一個分組,以分組為單位進行處理的密碼演算法稱為分組密碼(block cipher)。
由於明文通常會大於一個分組,那麼對整個明文的加密就需要一個迭代的過程,而迭代的方法稱為模式。
模式種類
ECB (Electronic CodeBook mode)
電子密碼本模式

ecb

ecb
ECB模式是將明文進行分組,然後對這些分組採用同樣的金鑰就行加密。相同內容的明文分組,得到的結果相同。
優點
簡單、快速、支援平行計算
缺點
-
明文中的重複排列會反映在密文中
-
通過刪除、替換密文分組可以對明文進行操作
-
對包含某些位元錯誤的密文進行解密時,對應的分組會出錯
-
不能抵禦重放攻擊
ECB已經被證明有安全問題,因此,在工程裡應該避免使用ECB模式對資料進行加密。golang標準已經將ECB模式剔除。
CBC(Cipher Block Chaining mode)
密碼分組連結模式

cbc

cbc
CBC 模式是將前一個密文分組與當前明文分組進行XOR運算然後再進行加密。
因為,第一個明文分組前沒有前一個密文分組,因此,需要事先準備一個長度為一個分組的位元序列來代替前一個密文分組,這個位元序列稱為初始化向量(IV)。
優點
-
明文的重複排列不會反映在密文中
-
支援平行計算(僅解密)
-
能夠解密任意密文分組
缺點
-
對包含某些錯誤位元的密文進行解密時,第一個分組的全部位元以及後一個分組的相應位元會出錯
-
加密不支援平行計算
CFB(Cipher FeedBack mode)
密文反饋模式

cfb

cfb
CFB模式是將前一個密文分組送回到密碼演算法的輸入端進行加密然後與明文分組進行XOR,作為下一個密文分組。
CFB同樣需要一個初始化向量。
優點
-
不需要填充
-
支援平行計算(僅解密)
-
能夠解密任意密文分組
缺點
-
加密不支援平行計算
-
對包含某些錯誤位元的密文進行解密時,第一個分組的全部位元以及後一個分組的相應位元會出錯
-
不能抵禦重放攻擊
不推薦使用
OFB(Output FeedBack mode)
輸出反饋模式

ofb

ofb
OFB是將明文分組和密碼演算法的輸出進行XOR來生成密文分組。
優點
-
不需要填充
-
可事先進行加密、解密的準備
-
加密、解密使用相同結構
-
對包含某些錯誤位元的密文進行解密時,只有明文中相對應的位元會出錯
缺點
-
不支援平行計算
-
主動攻擊者反轉密文分組中的某些位元時,明文分組中相對應的位元也會被反轉
不推薦使用
CTR(CounTeR mode)
計數器模式

ctr

ctr
CTR 模式每個分組對應一個逐次累加的計數器,通過對計數器進行加密來生成金鑰流然後與明文進行XOR來生成密文分組。
優點
-
不需要填充
-
可事先進行加密、解密的準備
-
加密、解密使用相同結構
-
對包含某些錯誤位元的密文進行解密時,只有明文中相對應的位元會出錯
-
支援平行計算
缺點
- 主動攻擊者反轉密文分組中的某些位元時,明文分組中相對應的位元也會被反轉
部分原始碼實現
參考資料
-
圖片來源於維基百科
-
《圖解密碼技術》
-
《實用密碼學》