·1.編碼
·2.DES
·2.1什么是DES
·2.2加密和解密
·3.AES
·4.對(duì)稱加密方式的選擇
“對(duì)稱加密:也稱為對(duì)稱密碼,是指在加密和解碼時(shí)使用同一秘鑰的加密方式”
1.編碼
現(xiàn)代的密碼都是建立在計(jì)算機(jī)的基礎(chǔ)之上的,這是因?yàn)楝F(xiàn)代的密碼所處理的數(shù)據(jù)量非常大,而且密碼算法也非常復(fù)雜,不借助計(jì)算機(jī)的力量就無(wú)法完成加密和解密的操作。
計(jì)算機(jī)的操作對(duì)象并不是文字,而是由0和1排列而成的比特序列。無(wú)論是文字、圖像、聲音、視頻還是程序,在計(jì)算機(jī)中都是用比特序列來(lái)表示的。執(zhí)行加密操作的程序,就是將表示明文的比特序列轉(zhuǎn)換為表示密文的比特序列。
將現(xiàn)實(shí)世界中的東西映射為比特序列的操作稱為編碼(encoding)。例如midnight(深夜)這個(gè)詞,我們可以對(duì)其中的每個(gè)字母逐一進(jìn)行編碼,這種編碼規(guī)則叫作ASCII。
注意這里的m-->01101101這一轉(zhuǎn)換并不是加密而是編碼。盡管在人類看來(lái)0和1的序列跟密碼沒(méi)什么兩樣,但計(jì)算機(jī)卻可以“看懂"這些比特序列,并很快地反應(yīng)出其所對(duì)應(yīng)的字符midnight
2.DES
2.1什么是DES
DES(DataEncryptionStandard)是1977年美國(guó)聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS)中所采用的一種對(duì)稱密碼(FIPS46.3)。DES一直以來(lái)被美國(guó)以及其他國(guó)家的政府和銀行等廣泛使用。然而,隨著計(jì)算機(jī)的進(jìn)步,現(xiàn)在DES已經(jīng)能夠被暴力破解,強(qiáng)度大不如前了。RSA公司舉辦過(guò)破譯DES密鑰的比賽(DESChallenge),我們可以看一看RSA公司官方公布的比賽結(jié)果:
·1997年的DES Challenge1中用了96天破譯密鑰
·1998年的DES ChallengeIl-I中用了41天破譯密鑰
·1998年的DES ChallengeII-2中用了56小時(shí)破譯密鑰
·1999年的DES ChallengeIll中只用了22小時(shí)15分鐘破譯密鑰
由于DES的密文可以在短時(shí)間內(nèi)被破譯,因此除了用它來(lái)解密以前的密文以外,現(xiàn)在我們不應(yīng)該再使用DES了。
2.2加密和解密
DES是一種將64比特的明文加密成64比特的密文的對(duì)稱密碼算法,它的密鑰長(zhǎng)度是56比特。盡管從規(guī)格上來(lái)說(shuō),DES的密鑰長(zhǎng)度是64比特,但由于每隔7比特會(huì)設(shè)置一個(gè)用于錯(cuò)誤檢查的比特,因此實(shí)質(zhì)上其密鑰長(zhǎng)度是56比特。
DES是以64比特的明文(比特序列)為一個(gè)單位來(lái)進(jìn)行加密的,這個(gè)64比特的單位稱為分組。一般來(lái)說(shuō),以分組為單位進(jìn)行處理的密碼算法稱為分組密碼(blockcipher),DES就是分組密碼的一種。
DES每次只能加密64比特的數(shù)據(jù),如果要加密的明文比較長(zhǎng),就需要對(duì)DES加密進(jìn)行迭代(反復(fù)),而迭代的具體方式就稱為模式(mode)。
·DES的加密與解密
2.3三重DES
現(xiàn)在DES已經(jīng)可以在現(xiàn)實(shí)的時(shí)間內(nèi)被暴力破解,因此我們需要一種用來(lái)替代DES的分組密碼,三重DES就是出于這個(gè)目的被開(kāi)發(fā)出來(lái)的。
三重DES(triple-DES)是為了增加DES的強(qiáng)度,將DES重復(fù)3次所得到的一種密碼算法,通常縮寫為3DES。
·三重DES的加密
明文經(jīng)過(guò)三次DES處理才能變成最后的密文,由于DES密鑰的長(zhǎng)度實(shí)質(zhì)上是56比特,因此三重DES的密鑰長(zhǎng)度就是56×3=168比特。
從上圖我們可以發(fā)現(xiàn),三重DES并不是進(jìn)行三次DES加密(加密–>加密–>加密),而是加密–>解密–>加密的過(guò)程。在加密算法中加人解密操作讓人感覺(jué)很不可思議,實(shí)際上這個(gè)方法是IBM公司設(shè)計(jì)出來(lái)的,目的是為了讓三重DES能夠兼容普通的DES。
當(dāng)三重DES中所有的密鑰都相同時(shí),三重DES也就等同于普通的DES了。這是因?yàn)樵谇皟刹郊用?ndash;>解密之后,得到的就是最初的明文。因此,以前用DES加密的密文,就可以通過(guò)這種方式用三重DES來(lái)進(jìn)行解密。也就是說(shuō),三重DES對(duì)DES具備向下兼容性。
如果密鑰1和密鑰3使用相同的密鑰,而密鑰2使用不同的密鑰(也就是只使用兩個(gè)DES密鑰),這種三重DES就稱為DES-EDE2(下圖)。EDE表示的是加密(Encryption)-->解密(Decryption)-->加密(Encryption)這個(gè)流程。
密鑰1、密鑰2、密鑰3全部使用不同的比特序列的三重DES稱為DES-EDE3。
盡管三重DES目前還被銀行等機(jī)構(gòu)使用,但其處理速度不高,而且在安全性方面也逐漸顯現(xiàn)出了一些問(wèn)題。(新的項(xiàng)目不要最好再使用這種方式了)
3.AES
AES(Advanced Encryption Standard)是取代其前任標(biāo)準(zhǔn)(DES)而成為新標(biāo)準(zhǔn)的一種對(duì)稱密碼算法。全世界的企業(yè)和密碼學(xué)家提交了多個(gè)對(duì)稱密碼算法作為AES的候選,最終在2000年從這些候選算法中選出了一種名為Rijndael的對(duì)稱密碼算法,并將其確定為了AES。
Rijndael是由比利時(shí)密碼學(xué)家Joan Daemen和Vincent Rijmen設(shè)計(jì)的分組密碼算法,今后會(huì)有越來(lái)越多的密碼軟件支持這種算法。
Rijndael的分組長(zhǎng)度為128比特,密鑰長(zhǎng)度可以以32比特為單位在128比特到256比特的范圍內(nèi)進(jìn)行選擇(不過(guò)在AES的規(guī)格中,密鑰長(zhǎng)度只有128、192和256比特三種)。
4.對(duì)稱加密方式的選擇
DES、三重DES和AES等對(duì)稱密碼,那么到底應(yīng)該使用哪一種對(duì)稱密碼算法呢?
1.今后最好不要將DES用于新的用途,因?yàn)殡S著計(jì)算機(jī)技術(shù)的進(jìn)步,現(xiàn)在用暴力破解法已經(jīng)能夠在現(xiàn)實(shí)的時(shí)間內(nèi)完成對(duì)DES的破譯。但是,在某些情況下也需要保持與舊版本軟件的兼容性。
2.出于兼容性的因素三重DES在今后還會(huì)使用一段時(shí)間,但會(huì)逐漸被AES所取代。
3.應(yīng)該使用的算法是AES(Rijndael),因?yàn)樗踩?、快速,而且能夠在各種平臺(tái)上工作。此外,由于全世界的密碼學(xué)家都在對(duì)AES進(jìn)行不斷的驗(yàn)證,因此即便萬(wàn)一發(fā)現(xiàn)它有什么缺陷,也會(huì)立刻告知全世界并修復(fù)這些缺陷。
一般來(lái)說(shuō),我們不應(yīng)該使用任何自制的密碼算法,而是應(yīng)該使用AES。因?yàn)锳ES在其選定過(guò)程中,經(jīng)過(guò)了全世界密碼學(xué)家所進(jìn)行的高品質(zhì)的驗(yàn)證工作,而對(duì)于自制的密碼算法則很難進(jìn)行這樣的驗(yàn)證。