◆余啟航 李斌勇 楊雄凱 姚 瑤
DES加密算法的過程分析研究
◆余啟航 李斌勇 楊雄凱 姚 瑤
(成都信息工程大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 四川 610225)
本文圍繞DES算法的加密問題,分析了DES算法的明文分組加密和子密鑰生成過程。針對DES所涉及的核心算法模塊,分別對IP初始置換、子密鑰獲取、E盒與S盒擴(kuò)展、異或運(yùn)算、P盒置換和逆初始置換模塊進(jìn)行了深入地研究與設(shè)計(jì)。在此基礎(chǔ)上給出DES的部分核心算法的輸入與輸出實(shí)現(xiàn),并對其安全性進(jìn)行了分析。本文所開展的研究,為深入理解DES加密算法和常規(guī)應(yīng)用加密問題,提供了可行的參考。
DES;子密鑰;置換;加密算法
DES加密解密算法最初由美國IBM公司研究人員所設(shè)計(jì)發(fā)明,且為第一個公開的商用密碼算法標(biāo)準(zhǔn),自誕生以來便得到了ISO的一致認(rèn)可。DES是分組密碼算法的典型代表,它的明文分組長度為64bits,密鑰長度為64bits,其中包括有8bits的奇偶校驗(yàn),因此有效密鑰長度為56bits。DES加密解密算法使用的過程相同,且可以隨時均都可以進(jìn)行變動。它們其中有極少數(shù)被認(rèn)為是易破解的弱密鑰,但是很容易拋開它們不使用,因此其自身安全性主要依賴于有效密鑰。由于DES算法使用最大為64bits的邏輯運(yùn)算以及標(biāo)準(zhǔn)算術(shù),它的子密鑰產(chǎn)生較為容易,可以適用于當(dāng)前大部分計(jì)算機(jī)當(dāng)中,因此近三十多年以來,其在保密通信密碼算法的研究使用中,扮演著極其重要的作用。
DES算法加密過程首先先對明文分組進(jìn)行操作,需要加密的明文分為每塊64bits的固定大小。如圖1所示左右兩部分分別為64bits的明文分組加密過程和其16個子密鑰生成的過程。
圖1 DES加密算法流程
IP初始置換,在第一輪運(yùn)算之前執(zhí)行,對輸入的分組采用如表1所示的IP初始變換,按照從左向右、從上向下進(jìn)行置換。
表1 IP初始置換
子密鑰的獲取流程如圖2所示。
圖2 子密鑰獲取流程
Step1:此處,用戶輸入 64 位的密鑰。根據(jù)密鑰置換表PC-1,將 64 位變成 56 位密鑰(此處去掉了奇偶校驗(yàn)位)。
Step2:PC-1 置換得到的56 位密鑰。此處密鑰被分為前28位 C0 和后28位 D0。分別對它們進(jìn)行循環(huán)左移,C0 左移得到 C1,D0 左移得到 D1。
Step3:將 C1 和 D1 合并變成 56 位。然后通過PC-2表進(jìn)行壓縮置換,得到此輪的 48 位子密鑰 K1。
Step4:再對 C1 和 D1 進(jìn)行相同的左移和壓縮置換,獲取下一輪的子密鑰……一共進(jìn)行16輪,于是可以得到 16 個 48 bits的子密鑰。
E盒擴(kuò)展置換,則是將右半部分32bits按照8行4列方式依次排列,得到一個8*4的二維矩陣,然后根據(jù)如表2所示的E盒擴(kuò)展置換表擴(kuò)展為8*6的二維矩陣。
表2 E盒擴(kuò)展
將P盒置換的結(jié)果與最初的64bits分組的左半部分異或,然后左、右半部分交換,接著開始另一輪。
當(dāng)產(chǎn)生了48bits密鑰后就可以和明文進(jìn)行異或運(yùn)算,便可得到48bits的密文。再開始下輪的S盒迭代運(yùn)算,其功能是把6bit數(shù)據(jù)變?yōu)?bits數(shù)據(jù),每個S盒是一個4行、16列的表。每個S盒的使用方法為:S盒收到6bits的輸入,6bits的第1個bit和最后1個bits構(gòu)成的2位二進(jìn)制為該S盒行號,中間的4bits二進(jìn)制為該S盒的列號,然后根據(jù)行號和列號查S盒定義表得到對應(yīng)的值(通常為十進(jìn)制),該值就是S盒變換的輸出,并轉(zhuǎn)化為二進(jìn)制。
S盒代替運(yùn)算之后,輸出32bits,作為F函數(shù)最后一個變換P盒置換的輸入。將該 32bits位數(shù)據(jù)進(jìn)行P盒置換,置換后得到一個仍然是 32 bits的結(jié)果,此處可得F函數(shù)的輸出值。
DES完成16輪變換后,得到64bits數(shù)據(jù)作為IP-1逆初始置換的輸入,經(jīng)過IP-1逆初始置換表(如表3所示),64bits輸入數(shù)據(jù)位置重新編排,就得到64bits的密文。
表3 逆初始置換
def UnitoHex(string):
return_string=''
for i in string:
return_string+="%02x"%ord(i)
return return_string
輸入:unicode字符串
輸出:十六進(jìn)制數(shù)據(jù)流
def _CodeIP(self,code):
changed_code=''
for i in range(64):
changed_code+=code[ip[i]-1]
return changed_code
輸入:明文或密文
輸出:對明文或密文初始置換后的64bit數(shù)據(jù)
def _KeyIP (self,key):
changed_key=''
for i in range(56):
changed_key+=key[pc1[i]-1]
return changed_key
輸入:初始密鑰
輸出:對密鑰初始置換后的56bit數(shù)據(jù)
def _EBox(self,code):
return_list=''
for i in range(48):
return_list+=code[e[i]-1]
return return_list
輸入:32bit數(shù)據(jù)
輸出:E盒擴(kuò)展置換后的48bit數(shù)據(jù)
def _SBox(self, key):
return_list=''
for i in range(8):
row=int(str(key[i*6])+str(key[i*6+5]),2) raw=int(str( key[i*6+1])+str(key[i*6+2])+str(key[i*6+3])+str(key[i*6+4]),2)
return_list+=self._toByte(s[i][row][raw],4)
return return_list
輸入:48bit數(shù)據(jù)
輸出:S盒代替選擇置換后的32bit數(shù)據(jù)
def _PBox(self,code):
return_list=''
for i in range(32):
return_list+=code[p[i]-1]
return return_list
輸入:32bit數(shù)據(jù)
輸出:P盒置換后的32bit數(shù)據(jù)
def _Xor(self,code,key):
code_len=len(key)
return_list=''
for i in range(code_len):
if code[i]==key[i]:
return_list+='0'
else:
return_list+='1'
return return_list
輸入:E盒擴(kuò)展置換后的48bit數(shù)據(jù)和PC-2的48bit子密鑰。
輸出:異或后的48bit數(shù)據(jù)。
由于DES算法中只用到64bits密鑰中的其中56bits密鑰,而第8、16、...64bits中的8個bits并未參與DES運(yùn)算,可以發(fā)現(xiàn)即DES的安全性是基于除8、16、...64bits以外的其余56bits的排列組合才可以得到保證的。因此,在實(shí)際進(jìn)行保密通信中,應(yīng)盡量避免使用第8、16、24等bits作為有效數(shù)據(jù)位進(jìn)行加密解密,以免在進(jìn)行保密通信的系統(tǒng)中產(chǎn)生數(shù)據(jù)被破譯的隱患。
DES加密解密算法較為復(fù)雜,其中用到多次不同置換方式,以及進(jìn)制的轉(zhuǎn)換和有效位的采用等,這給實(shí)現(xiàn)此算法帶來了一定的難度。但是也正是因?yàn)榇?,它的安全性相比其他一般密碼算法的安全性較高。在未來進(jìn)一步研究中,應(yīng)著力研究DES有效位的使用,以及完善加密解密的過程和簡便其算法的實(shí)現(xiàn)過程,以增強(qiáng)其安全性,使之能更加廣泛地解決日常應(yīng)用加密問題。
[1]劉浪,周新衛(wèi).基于DES對稱加密體制的探討[J].科技廣場,2012.
[2]方亮.DES加密算法IP模塊實(shí)現(xiàn)[D].電子科技大學(xué),2011.
[3]張芯苑.基于python的加密解密算法實(shí)現(xiàn)與研究[J].紡織報告,2017.
[4]徐洪波,李穎華.DES加密算法在保護(hù)文件傳輸中數(shù)據(jù)安全的應(yīng)用[J].信息網(wǎng)絡(luò)安全,2009.
[5]張溫泉,趙紅敏,郝曉東.一種高速高安全性的DES算法設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī),2014.
[6]張峰,鄭春來,耶曉東. DES加密算法的FPGA實(shí)現(xiàn)[J]. 現(xiàn)代電子技術(shù),2008.
四川省教育廳重點(diǎn)項(xiàng)目(17ZA0069)、成都信息工程大學(xué)科研基金資助項(xiàng)目(KYTZ201618)。