三重DES加密算法原理與實現(xiàn)(一)
隨著信息技術(shù)的飛速發(fā)展,人們對信息系統(tǒng)的安全性,信息傳輸?shù)谋C苄砸笤絹碓礁摺0殡S著通信和計算機技術(shù)發(fā)展起來的現(xiàn)代密碼學(xué),不僅在解決信息的機密性、而且在解決信息的完整性、可用性和抗抵賴性方面發(fā)揮著不可替代的作用。密碼技術(shù)使得兩個在不安全信道中通信的人,以一種使其敵手不能明白和理解通信內(nèi)容的方式進行通信,保證了信息的安全。就密碼體制而言,一般分為兩類,對稱密碼體制和公鑰密碼體制。
對稱密碼體制其特點是發(fā)送和接收的雙方使用同一密鑰,且該密鑰必須保證不被泄露;加密算法的安全性依賴于密鑰的秘密性,而非算法的秘密性。DES加密算法就是對稱加密體制中的佼佼者。1977年1月,美國政府采納IBM公司設(shè)計的方案作為非機密數(shù)據(jù)的正式數(shù)據(jù)加密標(biāo)準(zhǔn)(DES)。DES被授權(quán)用于所有公開的和私人的非保密通信場合,后來它又曾被國際標(biāo)準(zhǔn)組織采納為國際標(biāo)準(zhǔn)。
雖然現(xiàn)在DES已不作為數(shù)據(jù)加密標(biāo)準(zhǔn),但至今它仍然被廣泛的應(yīng)用,而且它是一種最有代表性的分組加密體制。因此,研究這一算法的基本原理、設(shè)計思想、安全性分析以及實際應(yīng)用中有關(guān)問題,對于掌握分組密碼理論和當(dāng)前的實際應(yīng)用都是很有意義的。
一、 DES算法原理
DES是一種分組加密算法。明文分組長度為64位。加密得到的密文分組長度為64位。密鑰長度64位,8個字節(jié)。每一個字節(jié)的最高位用于奇偶效驗,所以有效密鑰長度為56位。其分組加密過程描述如下:①子密鑰Ki的生成。②64位的明文經(jīng)過一個初始置換IP后,被分成左右兩半部分,每個部分32位,以L0和R0表示。③進行16輪迭代變換:第i 輪變換將上一輪變換所得到的結(jié)果的右半部分與第i個子密鑰Ki結(jié)合,這個過程稱為f函數(shù)。第i輪變換結(jié)果的左半部分為上一輪變換結(jié)果的右半部分(即:Li=Ri-1),其右半部分為上一輪變換結(jié)果的左半部與上一輪變換結(jié)果的右半部經(jīng)過F函數(shù)處理所的結(jié)果的異或:Ri=Li-1⊕F(Ri-1,Ki)。④16輪變換之后左右兩部分再連接起來,經(jīng)過一個初始逆置換IP-1得到密文。 其加密過程如圖1所示。
DES的解密算法與加密算法完全相同,只需要將密鑰的應(yīng)用次序與加密時相反應(yīng)用即可。即解密過程是初始置換函IP數(shù)接受長度為64比特的密文輸入, 將16個子密鑰按照K16到K1的順序應(yīng)用與F函數(shù)的16輪迭代運算中, 然后將迭代的結(jié)果經(jīng)由末置換函數(shù)IP-1得到64位的明文輸出。
二、 兩個密鑰的三重DES
由于DES密鑰只有56bit,易于遭受窮舉時攻擊。作為一種替代加密方案,Tuchman提出使用兩個密鑰的三重DES加密方法,并在1985年成為美國的一個商用加密標(biāo)準(zhǔn)。該方法使用兩個密鑰,執(zhí)行三次DES算法,如圖2所示。加密的過程是加密-解密-加密,解密的過程是解密-加密-解密。
采用兩個密鑰進行三重加密的好處有:①兩個密鑰合起來有效密鑰長度有112bit,可以滿足商業(yè)應(yīng)用的需要,若采用總長為168bit的三個密鑰,會產(chǎn)生不必要的開銷。②加密時采用加密-解密-加密,而不是加密-加密-加密的形式,這樣有效的實現(xiàn)了與現(xiàn)有DES系統(tǒng)的向后兼容問題。因為當(dāng)K1=K2時,三重DES的效果就和原來的DES一樣,有助于逐漸推廣三重DES。③三重DES具有足夠的安全性,目前還沒有關(guān)于攻破三重DES的報道。
三、Java語言編程實現(xiàn)DES算法
1、 子密鑰的生成
1) PC-1變換。
將原密鑰的各位按照PC-1矩陣重新排列,這一過程剔除了奇偶校驗位。PC-1如下:
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
2) 將排好的密鑰分成兩部分,前面28位為C0,后面28位為D0。
3) 從i=1開始,循環(huán)執(zhí)行16次以下步驟得到16個子密鑰。
① 對Ci-1和Di-1進行相同位數(shù)的循環(huán)左移,得到Ci和Di
左移的位數(shù)為:
i取數(shù)值: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
移 動 數(shù): 1 1 2 2 2 2 2 2 1 2 2 22 221
② 連接Ci和Di,按照矩陣PC-2排列選擇合適的位,構(gòu)成子密鑰Ki,該過程將56位壓縮到48位,PC-2如下:
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32
知識點:
三重DES就是對明文使用兩個以上不同的密鑰利用相同的加解密算法分別加解密處理三次。









