3.1.1對稱加密的概述
對稱加密(也叫私鑰加密算法)指加密和解密使用相同密鑰的加密算法。它要求發(fā)送方和接收方在安全通信之前,商定一個密鑰。對稱算法的安全性依賴于密鑰,泄漏密鑰就意味著任何人都可以對他們發(fā)送或接收的消息解密,所以密鑰的保密性對通信的安全性至關(guān)重要。
對稱加密算法的優(yōu)點(diǎn)是計算量小、加密速度快、加密效率高。
不足之處是,參與方需要提前持有密鑰,一旦有人泄露則系統(tǒng)安全性被破壞;另外如何在不安全通道中提前分發(fā)密鑰也是個問題,密鑰管理非常困難。
基于“對稱密鑰”的加密算法主要有DES、3DES(TripleDES)、AES、RC2、RC4、RC5和Blowfish等。本章將介紹最常用的對稱加密算法DES、3DES(TripleDES)和AES。加密過程如圖13.4所示.

圖3.1?加密解密
3.1.2DES和TripleDES算法
DES算法全稱為Data Encryption Standard,即數(shù)據(jù)加密標(biāo)準(zhǔn)算法。DES是加密和解密使用相同密鑰的加密算法,也叫做單密鑰算法或私鑰加密算法,傳統(tǒng)密鑰算法。它是IBM公司于1975年研究成功并公開發(fā)表的。
DES算法的入口參數(shù)有三個:Key、Data、Mode。
l其中Key是DES算法的工作密鑰,8個字節(jié)共64位;
l?Data是要被加密或被解密的數(shù)據(jù);
l?Mode為DES的工作方式,有兩種:加密或解密。
在沒有密鑰的情況下,解密耗費(fèi)時間非常長,基本上認(rèn)為沒有可能。加密解密耗時和需要加密的文本大小成正比,這是P問題。如果知道明文和對應(yīng)的密文,求解所用的密鑰,這是NP問題。目前還沒有NP的求解算法,但是很容易得到驗證。想得到NP的解,只能暴力破解(窮舉破解)窮舉驗證成為對稱加密僅有的求解方式,求解時間呈指數(shù)級增長。
DES算法把64位的明文輸入塊變?yōu)閿?shù)據(jù)長度為64位的密文輸出塊,其中8位為奇偶校驗位,另外56位作為密碼的長度。首先,DES把輸入的64位數(shù)據(jù)塊按位重新組合,并把輸出分為L0、R0兩部分,每部分各長32位,并進(jìn)行前后置換,最終由L0輸出左32位,R0輸出右32位
根據(jù)這個法則經(jīng)過16次迭代運(yùn)算后,得到L16、R16,將此作為輸入,進(jìn)行與初始置換相反的逆置換,即得到密文輸出。DES算法具有極高的安全性,到目前為止,除了用窮舉搜索法對DES算法進(jìn)行攻擊外,還沒有發(fā)現(xiàn)更有效的辦法。56位長密鑰的窮舉空間為2^56,這意味著如果一臺計算機(jī)的速度是每秒種檢測100萬個密鑰,那么它搜索完全部密鑰就需要將近2285年的時間,因此DES算法是一種很可靠的加密方法。3DES密鑰是24字節(jié),即192位二進(jìn)制。
3.1.3AES加密
高級加密標(biāo)準(zhǔn)(英語:Advanced Encryption Standard,縮寫:AES),由美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)于2001年11月26日發(fā)布,并在2002年5月26日成為有效的標(biāo)準(zhǔn)。2006年,高級加密標(biāo)準(zhǔn)已然成為對稱密鑰加密中最流行的算法之一。該算法與其他對稱密碼算法相比更安全、效率更高等特點(diǎn)。
AES使用128位,192位或者256位的密鑰長度(密鑰分別是:16字節(jié)、24字節(jié)、32字節(jié)),使得它比密鑰長度為56位的DES更健壯可靠。
2^64 = 18446744073709551616
2^64這個數(shù)大于全球小麥1000年的產(chǎn)量。如果1微秒驗證一個密碼(1秒驗證100萬個),窮舉需要費(fèi)時58萬年。
2^256?約= 10 ^ 77
10^80?是當(dāng)前人類可見宇宙中所有物質(zhì)原子數(shù)目的總和。
3.1.4AES的加密模式
AES的加密模式對應(yīng)中文名稱如表所示。
加密模式(英文名稱及簡寫)中文名稱
Electronic Code Book(ECB)電子密碼本模式
Cipher Block Chaining(CBC)密碼分組鏈接模式
Cipher Feedback Mode(CFB)加密反饋模式
Output Feedback Mode(OFB)輸出反饋模式
ECB:最基本的加密模式,也就是通常理解的加密,相同的明文將永遠(yuǎn)加密成相同的密文,無初始向量,容易受到密碼本重放攻擊,一般情況下很少用。
CBC:明文被加密前要與前面的密文進(jìn)行異或運(yùn)算后再加密,因此只要選擇不同的初始向量,相同的密文加密后會形成不同的密文,這是目前應(yīng)用最廣泛的模式。CBC加密后的密文是上下文相關(guān)的,但明文的錯誤不會傳遞到后續(xù)分組,但如果一個分組丟失,后面的分組將全部作廢(同步錯誤)。
CFB:類似于自同步序列密碼,分組加密后,按8位分組將密文和明文進(jìn)行移位異或后得到輸出同時反饋回移位寄存器,優(yōu)點(diǎn)最小可以按字節(jié)進(jìn)行加解密,也可以是n位的,CFB也是上下文相關(guān)的,CFB模式下,明文的一個錯誤會影響后面的密文(錯誤擴(kuò)散)。
OFB:將分組密碼作為同步序列密碼運(yùn)行,和CFB相似,不過OFB用的是前一個n位密文輸出分組反饋回移位寄存器,OFB沒有錯誤擴(kuò)散問題。
3.1.5填充方式
進(jìn)行DES、3DES和AES三種對稱加密算法時,常采用的是PKCS5Padding填充、Zeros填充(0填充)。
1. PKCS5Padding
每個填充的字節(jié)都記錄了填充的總字節(jié)數(shù)
“a”填充后結(jié)果為:?[97 7 7 7 7 7 7 7] ??
“ab”填充后結(jié)果為:?[97 98 6 6 6 6 6 6] ??
“一a”填充后結(jié)果為:[228 184 128 97 4 4 4 4]
2. ZerosPadding
全部填充為0的字節(jié)
“a”填充后結(jié)果為:?[97 0 0 0 0 0 0 0] ?
“ab”填充后結(jié)果為:[97 98 0 0 0 0 0 0] ?
“一a”填充后結(jié)果為:[228 184 128 97 0 0 0 0]