對稱加密是使用相同的密鑰對數(shù)據(jù)進(jìn)行加密和解密拆火。對稱加密由于其安全性高和加解密速度快,被用于數(shù)據(jù)的加密。
場景
Alice 發(fā)送郵件給 Bob,但是郵件的內(nèi)容是不能被其他人看到的切端,如何處理才能滿足Alice的要求呢?
常用的算法
- DES
DES是一種將64比特的明文加密稱64比特的密文的對稱加密算法顷啼。他的密鑰長度是64比特踏枣,但其每隔7比特會設(shè)置一個用于
錯誤檢查的比特,因此實質(zhì)上其密鑰長度是56比特钙蒙。
DES 已經(jīng)可以被暴力破解茵瀑,現(xiàn)在不應(yīng)該再使用。
- 3DES
3DES是將DES重復(fù)3次所得到的一種密碼算法躬厌。
3DES 策略為 加密 —> 解密 —> 加密的過程马昨。采用這個過程的目的是為了兼容普通的DES。
3DES的密鑰長度實質(zhì)上是 56 x 3 = 168 比特烤咧。因此偏陪,其安全強(qiáng)度要遠(yuǎn)高于DES抢呆。
3DES處理速度不高煮嫌。
- AES
AES也叫 Rijndael。是目前最常用的加密算法抱虐。其密鑰長度可以為128昌阿、192、256比特恳邀。
關(guān)于Rijndael的詳細(xì)說明如下鏈接:
推薦使用:AES
分組密碼模式
DES或者AES都是對某一特定長度的比特序列為一個單位進(jìn)行加密懦冰,比如64比特,這個64比特的單位稱為一個分組谣沸,以分組為單位進(jìn)行處理的密碼算法稱為分組密碼(block cipher)刷钢。
由于明文通常會大于一個分組,那么對整個明文的加密就需要一個迭代的過程乳附,而迭代的方法稱為模式内地。
模式種類
ECB (Electronic CodeBook mode)
電子密碼本模式
ECB模式是將明文進(jìn)行分組伴澄,然后對這些分組采用同樣的密鑰就行加密。相同內(nèi)容的明文分組阱缓,得到的結(jié)果相同非凌。
優(yōu)點
簡單、快速荆针、支持并行計算
缺點
明文中的重復(fù)排列會反映在密文中
通過刪除敞嗡、替換密文分組可以對明文進(jìn)行操作
對包含某些比特錯誤的密文進(jìn)行解密時,對應(yīng)的分組會出錯
不能抵御重放攻擊
ECB已經(jīng)被證明有安全問題航背,因此喉悴,在工程里應(yīng)該避免使用ECB模式對數(shù)據(jù)進(jìn)行加密。golang標(biāo)準(zhǔn)已經(jīng)將ECB模式剔除沃粗。
CBC(Cipher Block Chaining mode)
密碼分組鏈接模式
CBC 模式是將前一個密文分組與當(dāng)前明文分組進(jìn)行XOR運算然后再進(jìn)行加密粥惧。
因為,第一個明文分組前沒有前一個密文分組最盅,因此突雪,需要事先準(zhǔn)備一個長度為一個分組的比特序列來代替前一個密文分組,這個比特序列稱為初始化向量(IV)涡贱。
優(yōu)點
明文的重復(fù)排列不會反映在密文中
支持并行計算(僅解密)
能夠解密任意密文分組
缺點
對包含某些錯誤比特的密文進(jìn)行解密時咏删,第一個分組的全部比特以及后一個分組的相應(yīng)比特會出錯
加密不支持并行計算
CFB(Cipher FeedBack mode)
密文反饋模式
CFB模式是將前一個密文分組送回到密碼算法的輸入端進(jìn)行加密然后與明文分組進(jìn)行XOR,作為下一個密文分組问词。
CFB同樣需要一個初始化向量督函。
優(yōu)點
不需要填充
支持并行計算(僅解密)
能夠解密任意密文分組
缺點
加密不支持并行計算
對包含某些錯誤比特的密文進(jìn)行解密時,第一個分組的全部比特以及后一個分組的相應(yīng)比特會出錯
不能抵御重放攻擊
不推薦使用
OFB(Output FeedBack mode)
輸出反饋模式
OFB是將明文分組和密碼算法的輸出進(jìn)行XOR來生成密文分組激挪。
優(yōu)點
不需要填充
可事先進(jìn)行加密辰狡、解密的準(zhǔn)備
加密、解密使用相同結(jié)構(gòu)
對包含某些錯誤比特的密文進(jìn)行解密時垄分,只有明文中相對應(yīng)的比特會出錯
缺點
不支持并行計算
主動攻擊者反轉(zhuǎn)密文分組中的某些比特時宛篇,明文分組中相對應(yīng)的比特也會被反轉(zhuǎn)
不推薦使用
CTR(CounTeR mode)
計數(shù)器模式
CTR 模式每個分組對應(yīng)一個逐次累加的計數(shù)器,通過對計數(shù)器進(jìn)行加密來生成密鑰流然后與明文進(jìn)行XOR來生成密文分組薄湿。
優(yōu)點
不需要填充
可事先進(jìn)行加密叫倍、解密的準(zhǔn)備
加密、解密使用相同結(jié)構(gòu)
對包含某些錯誤比特的密文進(jìn)行解密時豺瘤,只有明文中相對應(yīng)的比特會出錯
支持并行計算
缺點
- 主動攻擊者反轉(zhuǎn)密文分組中的某些比特時吆倦,明文分組中相對應(yīng)的比特也會被反轉(zhuǎn)
部分源碼實現(xiàn)
參考資料
圖片來源于維基百科
《圖解密碼技術(shù)》
《實用密碼學(xué)》