DES加密算法的过程分析研究

2018-02-26 08:11余启航李斌勇杨雄凯
网络安全技术与应用 2018年2期
关键词:明文加密算法解密

◆余启航 李斌勇 杨雄凯 姚 瑶

DES加密算法的过程分析研究

◆余启航 李斌勇 杨雄凯 姚 瑶

(成都信息工程大学网络空间安全学院 四川 610225)

本文围绕DES算法的加密问题,分析了DES算法的明文分组加密和子密钥生成过程。针对DES所涉及的核心算法模块,分别对IP初始置换、子密钥获取、E盒与S盒扩展、异或运算、P盒置换和逆初始置换模块进行了深入地研究与设计。在此基础上给出DES的部分核心算法的输入与输出实现,并对其安全性进行了分析。本文所开展的研究,为深入理解DES加密算法和常规应用加密问题,提供了可行的参考。

DES;子密钥;置换;加密算法

0 引言

DES加密解密算法最初由美国IBM公司研究人员所设计发明,且为第一个公开的商用密码算法标准,自诞生以来便得到了ISO的一致认可。DES是分组密码算法的典型代表,它的明文分组长度为64bits,密钥长度为64bits,其中包括有8bits的奇偶校验,因此有效密钥长度为56bits。DES加密解密算法使用的过程相同,且可以随时均都可以进行变动。它们其中有极少数被认为是易破解的弱密钥,但是很容易抛开它们不使用,因此其自身安全性主要依赖于有效密钥。由于DES算法使用最大为64bits的逻辑运算以及标准算术,它的子密钥产生较为容易,可以适用于当前大部分计算机当中,因此近三十多年以来,其在保密通信密码算法的研究使用中,扮演着极其重要的作用。

1 DES算法分析

DES算法加密过程首先先对明文分组进行操作,需要加密的明文分为每块64bits的固定大小。如图1所示左右两部分分别为64bits的明文分组加密过程和其16个子密钥生成的过程。

图1 DES加密算法流程

2 DES核心算法模块

2.1 IP初始置换

IP初始置换,在第一轮运算之前执行,对输入的分组采用如表1所示的IP初始变换,按照从左向右、从上向下进行置换。

表1 IP初始置换

2.2子密钥获取流程

子密钥的获取流程如图2所示。

图2 子密钥获取流程

Step1:此处,用户输入 64 位的密钥。根据密钥置换表PC-1,将 64 位变成 56 位密钥(此处去掉了奇偶校验位)。

Step2:PC-1 置换得到的56 位密钥。此处密钥被分为前28位 C0 和后28位 D0。分别对它们进行循环左移,C0 左移得到 C1,D0 左移得到 D1。

Step3:将 C1 和 D1 合并变成 56 位。然后通过PC-2表进行压缩置换,得到此轮的 48 位子密钥 K1。

Step4:再对 C1 和 D1 进行相同的左移和压缩置换,获取下一轮的子密钥……一共进行16轮,于是可以得到 16 个 48 bits的子密钥。

2.3 E盒扩展

E盒扩展置换,则是将右半部分32bits按照8行4列方式依次排列,得到一个8*4的二维矩阵,然后根据如表2所示的E盒扩展置换表扩展为8*6的二维矩阵。

表2 E盒扩展

2.4异或运算

将P盒置换的结果与最初的64bits分组的左半部分异或,然后左、右半部分交换,接着开始另一轮。

2.5 S盒扩展

当产生了48bits密钥后就可以和明文进行异或运算,便可得到48bits的密文。再开始下轮的S盒迭代运算,其功能是把6bit数据变为4bits数据,每个S盒是一个4行、16列的表。每个S盒的使用方法为:S盒收到6bits的输入,6bits的第1个bit和最后1个bits构成的2位二进制为该S盒行号,中间的4bits二进制为该S盒的列号,然后根据行号和列号查S盒定义表得到对应的值(通常为十进制),该值就是S盒变换的输出,并转化为二进制。

2.6 P盒置换

S盒代替运算之后,输出32bits,作为F函数最后一个变换P盒置换的输入。将该 32bits位数据进行P盒置换,置换后得到一个仍然是 32 bits的结果,此处可得F函数的输出值。

2.7 逆初始置换

DES完成16轮变换后,得到64bits数据作为IP-1逆初始置换的输入,经过IP-1逆初始置换表(如表3所示),64bits输入数据位置重新编排,就得到64bits的密文。

表3 逆初始置换

3 DES核心算法实现

3.1通过UnitoHex函数将unicode字符转换为16进制

def UnitoHex(string):

return_string=''

for i in string:

return_string+="%02x"%ord(i)

return return_string

输入:unicode字符串

输出:十六进制数据流

3.2通过_CodeIP函数对密文或明文初始置换

def _CodeIP(self,code):

changed_code=''

for i in range(64):

changed_code+=code[ip[i]-1]

return changed_code

输入:明文或密文

输出:对明文或密文初始置换后的64bit数据

3.3通过_KeyIP函数对密钥初始置换。

def _KeyIP (self,key):

changed_key=''

for i in range(56):

changed_key+=key[pc1[i]-1]

return changed_key

输入:初始密钥

输出:对密钥初始置换后的56bit数据

3.4通过_EBox函数进行E盒扩展置换

def _EBox(self,code):

return_list=''

for i in range(48):

return_list+=code[e[i]-1]

return return_list

输入:32bit数据

输出:E盒扩展置换后的48bit数据

3.5通过_Sbox函数进行S盒代替选择置换

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数据

输出:S盒代替选择置换后的32bit数据

3.6通过_Pbox函数进行P盒置换

def _PBox(self,code):

return_list=''

for i in range(32):

return_list+=code[p[i]-1]

return return_list

输入:32bit数据

输出:P盒置换后的32bit数据

3.7通过_Xor函数对数据和子密钥进行异或

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盒扩展置换后的48bit数据和PC-2的48bit子密钥。

输出:异或后的48bit数据。

4 安全性分析

由于DES算法中只用到64bits密钥中的其中56bits密钥,而第8、16、...64bits中的8个bits并未参与DES运算,可以发现即DES的安全性是基于除8、16、...64bits以外的其余56bits的排列组合才可以得到保证的。因此,在实际进行保密通信中,应尽量避免使用第8、16、24等bits作为有效数据位进行加密解密,以免在进行保密通信的系统中产生数据被破译的隐患。

5 结束语

DES加密解密算法较为复杂,其中用到多次不同置换方式,以及进制的转换和有效位的采用等,这给实现此算法带来了一定的难度。但是也正是因为此,它的安全性相比其他一般密码算法的安全性较高。在未来进一步研究中,应着力研究DES有效位的使用,以及完善加密解密的过程和简便其算法的实现过程,以增强其安全性,使之能更加广泛地解决日常应用加密问题。

[1]刘浪,周新卫.基于DES对称加密体制的探讨[J].科技广场,2012.

[2]方亮.DES加密算法IP模块实现[D].电子科技大学,2011.

[3]张芯苑.基于python的加密解密算法实现与研究[J].纺织报告,2017.

[4]徐洪波,李颖华.DES加密算法在保护文件传输中数据安全的应用[J].信息网络安全,2009.

[5]张温泉,赵红敏,郝晓东.一种高速高安全性的DES算法设计[J].微电子学与计算机,2014.

[6]张峰,郑春来,耶晓东. DES加密算法的FPGA实现[J]. 现代电子技术,2008.

四川省教育厅重点项目(17ZA0069)、成都信息工程大学科研基金资助项目(KYTZ201618)。

猜你喜欢
明文加密算法解密
炫词解密
解密“一包三改”
炫词解密
基于整数矩阵乘法的图像加密算法
基于混沌系统和DNA编码的量子图像加密算法
奇怪的处罚
混沌参数调制下RSA数据加密算法研究
奇怪的处罚
基于小波变换和混沌映射的图像加密算法
四部委明文反对垃圾焚烧低价竞争