于偉 黎玉香
摘 要:在對(duì)稱密碼體制中,發(fā)收雙方使用相同密鑰,有著同樣的加密密鑰和解密密鑰。在眾多的加密算法中影響最大的是DES加密算法。本文詳細(xì)介紹了DES加密的過(guò)程及其C語(yǔ)言實(shí)現(xiàn)。
關(guān)鍵詞:DES;密鑰;加密;C語(yǔ)言
0 引言
分組密碼是目前應(yīng)用較為廣泛的一種密碼體制,而DES(Data Encryption Standard)加密算法是分組密碼的典型代表,也是第一個(gè)被公布出來(lái)的加密標(biāo)準(zhǔn)算法。它是第一個(gè)將密碼算法公開的加密標(biāo)準(zhǔn),如果只知道算法但沒有正確的密鑰就不能單純的通過(guò)算法得到明文,其安全性得益于在破解密碼時(shí)計(jì)算上和時(shí)間上的復(fù)雜性。DES分組明文的長(zhǎng)度為64位,加密階段卻沒有依照這個(gè)長(zhǎng)度來(lái)處理,而是選擇了56位密鑰的方式來(lái),由此生成對(duì)應(yīng)的64為密文。
1 DES加密的流程步驟
對(duì)于DES加密而言,其操作步驟可以分為兩個(gè)環(huán)節(jié):首先,是加密階段;接著就是子密鑰產(chǎn)生的階段,實(shí)現(xiàn)對(duì)于上述兩個(gè)階段的控制,可以完成加密的任務(wù)。
加密步驟如下:
(1)將明文以重新排列順序 64位分組后進(jìn)行初始置換,且分為左右兩半,各32位;
(2)兩半分別經(jīng)過(guò)16輪迭代,即進(jìn)行16次相同的變換,每輪迭代中使用置換和代換技術(shù)。16輪迭代后兩半對(duì)調(diào);
(3)在得到對(duì)應(yīng)的兩半之后,需要進(jìn)行逆初始置換,由此實(shí)現(xiàn)對(duì)應(yīng)64為密文的生成,這就是第三步驟。
子密鑰的產(chǎn)生則由56位密鑰,產(chǎn)生16個(gè)48位子密鑰,分別供左半邊的16輪迭代加密使用。
1.1 初始置換
對(duì)于分組加密,初始置換是第一步,通過(guò)一個(gè)初始置換函數(shù)DES_IP_Transform()后將64位明文分成兩部分:左半部分L0和右半部分R0各32位。
1.2 新一輪數(shù)據(jù)的生成
左右兩半再經(jīng)過(guò)16輪迭代,在每輪迭代中,使用函數(shù) memcpy()將上一輪的右邊Ri-1直接變換為本輪的左邊Li,將上一輪的右邊Ri–1通過(guò)擴(kuò)展置換函數(shù)DES_E_Transform(),由32位擴(kuò)展到48位,再與48位子密鑰經(jīng)函數(shù)DES_XOR()進(jìn)行異或運(yùn)算后,通過(guò)S盒函數(shù)DES_SBOX()壓縮成32位,經(jīng)置換函數(shù)DES_P_Transform()得到32位的加密函數(shù)F,F(xiàn)與Li–1異或后作為本輪的右邊Ri。
16輪迭代后,使用函數(shù)DES_Swap()將左右兩半交換,再經(jīng)逆初始置換函數(shù)DES_IP_1_Transform()得到64位密文。
1.3 S盒
在加密函數(shù)計(jì)算過(guò)程中使用了8個(gè)S盒,48位數(shù)據(jù)經(jīng)過(guò)8個(gè)S盒后輸出32位數(shù)據(jù),每個(gè)S盒都由4行、16列組成,定義成一個(gè)三維數(shù)組 S[8][4][16]。對(duì)于每個(gè)S盒,輸入6位,輸出4位。對(duì)于上述輸入數(shù)據(jù)進(jìn)行分析,明確最高位和最低位,以兩者為基礎(chǔ)形成對(duì)應(yīng)二進(jìn)制數(shù),由此去選擇S盒4行中的行。剩下還有4位數(shù)字,可以選擇S盒16列中的行。在上述行列選擇之后會(huì)看到行列存在交叉的部分,這就是此處要輸出的數(shù)據(jù),最后將該數(shù)據(jù)轉(zhuǎn)換為4位二進(jìn)制數(shù)。這樣,48位數(shù)據(jù)經(jīng)過(guò)8個(gè)S盒后得到了32位。
2 子密鑰產(chǎn)生
首先將56位密鑰經(jīng)過(guò)置換選擇1,這里使用函數(shù)DES_PC1_Transform()將其位置重新排列。并排列后的前28位用C0表示,后28位用D0表示,如圖1。
接下來(lái)要產(chǎn)生16個(gè)48位的子密鑰也需要經(jīng)過(guò)16輪迭代。在實(shí)際迭代的過(guò)程中,原本28位的 Ci-1和Di-1因?yàn)楹瘮?shù)循環(huán)作用,使得其出現(xiàn)位移的情況,一般表現(xiàn)為向左移動(dòng)一位或者兩位,左移位數(shù)由數(shù)組int MOVE_TIMES[16] = {1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1}定義。通過(guò)移位我們可以獲取Ci和Di,接著就需要將這兩者實(shí)現(xiàn)合并,此時(shí)就可以得到對(duì)應(yīng)56位,接著以置換的方式將其原來(lái)的次序打亂,具體過(guò)程可以參見圖2,由函數(shù)DES_PC2_Transform()實(shí)現(xiàn),從56位中挑出48位作為該輪的子密鑰。
3 DES解密
DES解密過(guò)程和加密過(guò)程本質(zhì)一致,有著相同的步驟和算法,另外DES加密算法屬于對(duì)稱加密技術(shù),因此解密和加密使用相同的密鑰。不同之處在于:其一,解密時(shí)是將64位密文作為算法的輸入,其二,子密鑰在使用時(shí)是加密過(guò)程的逆序,K16是解密過(guò)程中第1輪的子密鑰,K15是第2輪的子密鑰,K1是最后一輪的子密鑰。
4 結(jié)束語(yǔ)
信息的加密和解密是數(shù)據(jù)傳輸中保證信息安全性和完整性的常用方法,而DES加密標(biāo)準(zhǔn)綜合使用了多種置換和代換技術(shù),具有較高的安全性,在國(guó)際上被用來(lái)作為商用保密通信和計(jì)算機(jī)通信的有效算法。該加密標(biāo)準(zhǔn)的安全性不依賴于算法本身,而取決于密鑰,是一種高效、經(jīng)濟(jì)的算法。
參考文獻(xiàn)
[1]郭亞軍,宋建華,李莉,等.信息安全原理與技術(shù)(第2版)[M].北京:清華大學(xué)出版社,2013.
[2]張潔,朱麗娟.DES加密算法分析與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2007,(3):95-97.
[3]王昭,袁春.信息安全原理與應(yīng)用[M].北京:電子工業(yè)出版社,2010