DES是最著名的保密密钥或对称密钥加密算法,它是由IBM公司在20世纪70年代发展起来的,并经美国政府的加密标准筛选后,于1976年11月被美国政府采用。
DES可以分成初始置换、16次迭代过程和逆置换。在迭代过程中,使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。在每轮编码时,首先将待加密的右半部分由32位扩展为48位,然后与由56位密钥生成的48位某一密钥进行异或,得到的结果通过S盒压缩到32位(上述通过图8-2中的函数f完成),这32位数据经过置换再与左半部分异或,最后产生新的右半部分。它的整体框图如图8-2所示。
图8-2 DES整体框图
下面把DES框图用文字分步来进行一下详细说明。
(1)DES的明文初始置换。把64位明文按初始置换表换位,如表8-3所示。表中给出的为每位二进制数据的下标。
表8-3 初始置换表
(2)在初始置换后,把64位二进制明文分成左32位和右32位,进入迭代。
(3)把R0(32)赋给L1(32)。
(4)将右半部分R0(32)进行扩展排列,由32位扩展为48位。扩展排列下标次序如表8-4所示。
表8-4 扩展排列表
(5)生成第一轮的子密钥,首先把64位密钥每隔7位删除1位,即删除第8、16位等,使之成为56位的密钥。56位密钥经过置换选择1,即生成56位初始子密钥,置换选择1如表8-5所示(表中为数据下标)。
表8-5 置换选择1
(6)经过置换选择1后,把56位的初始密钥分成左28位和右28位,对左右两部分分别循环移位LSi位,各轮移位次数如表8-6所示。然后将两部分拼合起来。
表8-6 各轮移位次数表
(7)拼合后,对56位密钥用置换选择2进行置换(置换选择2如表8-7所示,表中为数据下标),置换后即为本轮子密钥,本轮子密钥与经过扩展的数据的右半部分进行异或得到48位数据。
表8-7 置换选择2
(8)得到的48位数据按顺序平均分成8组,这8组通过S盒(Substitution Box)变换,把每组的6位输入变成4位输出,从而得到32位数据。S盒变换数据如表8-8所示。
表8-8 S盒数据变换表
续表
S盒的用法:对于8组中的每组Si,6个输入端依次为b1b2b3b4b5b6,求出b1b6合在一起的十进制数并作为行,求出b2b3b4b5合在一起表示的十进制数并作为列,在S盒数据表中找出对应的值,即为Si对应的4位二进制给出的十进制值。
例如:S1的输入为101110,则b1b6=(10)2=(2)10,b2b3b4b5=(0111)2=(7)10。
那么在S1组中查找第2行第7列,可以得到值(11)10,所以S1(2,7)=11,(11)10的二进制表示形式为(1011)2,得到S1的输出就为4位二进制数1011。
9)S盒输出的32位数据还要经过Permutation置换,简称P置换(P置换如表8-9所示)。P置换后再与左32位按位异或,所得即为新的右半部分。
表8-9 表8-9P置换位詈表
10)上面只是16次迭代中的一次,经过16次这样的迭代后,把得到的64位二进制数进行逆初始置换,便得到了64位可输出的密文。逆置换表如表8-10所示。
表8-10 逆初始置换表
至此才算完成了一次DES加密。
DES的解密过程和加密过程类似,不同的16轮子密钥的顺序是颠倒的,即第一轮用子密钥16,第二轮用子密钥15,最后一轮用子密钥1。这个过程用文字表示比较烦琐,但为了让读者对DES加密过程有更强的感性认识,下面用例子来说明DES加密过程的一部分。
假如给出明文为M=’FOOTBALL’,密钥为K=’OVERSEAS’,它们的ASCII码如下。
明文M=(0100 0110 0100 1111 0100 1111 0101 0100 0100 0010 0100 0001 0100 1100 0100 1100)2
密钥K=(0100 1111 0101 0110 0100 0101 0101 0010 0101 0011 01000101 0100 0001 0101 0011)2
(1)明文M按表8-3初始变换后得到以下结果。
M初始置换后=1111 1111 0000 1010 1100 1111 0010 0110 0000 0000 0000 0000 1100 011 00001 0111(www.xing528.com)
读者可观察表8-3,会很容易发现它的规律,在练习初始变换时,画一张8×8的表格,把明文的二进制数顺序写入,然后依2、4、6、8、1、3、5、7列的次序把数据依次倒写即可。
(2)把明文分成左32位和右32位后得到以下结果。
L0(32)=1111 1111 0000 1010 1100 1111 0010 0110
R0(32)=0000 0000 0000 0000 1100 0110 0001 0111
把R0(32)赋给L1(32),即L1(32)=R0(32)。
(3)把R0(32)按表8-4扩展为48位得到以下结果。
R0(48)=1000 0000 0000 0000 0000 0001 0110 0000 1100 0000 1010 1110
(4)再来看密钥,把64位的密钥K删除第8、16、24、32、40、48、56、64位,变成56位的K’:
K’=0100 111 0101011 0100 010 0101 001 0101 001 0100 010 0100 000 0101 001
(5)K’按表8-5置换选择1进行置换,得到以下结果。
K’置换选择1=0000 0000 1111 1111 0000 0000 1001 1001 1011 0010 0111 0000 0001 1010
对于密钥的变换同样可以用8×8的表格,把密钥的64位二进制数依次写入表格,先删除最后一列,然后把表格中的数值依1、2、3、4列的次序倒着写数据,写到第36位,即第4列的中间,再从最后一列依7、6、5的次序把数据倒着往前写,最后倒着补上第4列的上面4位。读者可研究一下表8-5置换选择1中下标的次序,就会得出规律。
(6)把K’置换选择1分成左28位和右28位得到以下结果。
L0=0000 0000 1111 1111 0000 0000 1001
R0=1001 101 1 0010 01 1 1 0000 0001 1010
(7)把L0、R0循环左移LS1位,通过查表8-6各轮移位次数表可知,LS1为1,循环左移1位后即有以下结果。
L1=0000 0001 1111 1110 0000 0001 0010
R1=0011 0110 0100 1110 0000 0011 0101
(8)L1、R1重新拼合在一起,用置换选择2进行置换(置换见表8-7置换选择2),即可得到第一个子密钥K1如下所示。
K1=1011 0000 0001 0010 0100 0010 1111 0000 1000 0001 1000 0001
(9)得到R0(48)和K1后,把这两个48位的数值进行异或后得到以下结果。
A=001 10000 0001 0010 0100 001 l 1001 0000 0100 000l 0010 1111
(10)将上面的A值平均分成8组,再通过查表8-8的S盒数据变换表,得到以下结果。
A1=001100,S1(0,6)=11=(1011)2
A2=000001,S2(1,0)=3=(0011)2
A3=001001,S3(1,4)=3=(0011)2
A4=000011,S4(1,1)=g=(1000)2
A5=100100,S5(2,2)=1=(0001)2
A6=000100,S6(0,2)=10=(1010)2
A7=000100,S7(0,2)=2=(0010)2
A8=101111,S8(3,7)=13=(1101)2
(11)依次合并S1(0,6)到S8(3,7),得到以下数据:
B=1011 0011 0011 1000 0001 1010 0010 1101
(12)对B值进行Permution置换,查表8-9的P置换位置表,得到:
X0=0111 1100 1010 0000 0100 1110 0100 0110
(13)L0(32)与X0按位异或可以得到以下结果。
R1(32)=1000 0011 1010 1010 1000 0001 0110 0000
令L2(32)=R1(32),这样第一轮迭代就完成了,有了R1(32)和L1(32)就可以开始下一轮迭代了,以此类推就可求出R16(32)和L16(32),然后把R16(32)和L16(32)拼合在一起进行逆初始变换就可得到密文。
DES算法具有极高的安全性,到目前为止,除了用穷举搜索法对DES进行攻击外,还没有发现更有效的办法,即到目前为止还没有发现DES算法有什么缺陷。但随着计算机速度的提高和价格下降,DES也存在密钥长度不足、不够复杂以及密钥传递困难等因素。针对DES存在的问题,人们发展了许多变形DES算法,比如多重DES、S盒可选择的DES、具有独立子密钥的DES和G-DES等。
多重DES是将DES进行级联,在不同密钥的作用下连续多次对一组明文进行加密,现在人们建议使用三重DES,并已达成共识。三重DES(TDEA)是将128位的密钥分成两个64位的组,用这两个密钥对明文进行三次加解密。假设两个密钥为K1、K2,首先用密钥K1对明文进行DES加密,然后用K2对上面加密后的结果进行DES解密,最后再用密钥K1对解密后的信息进行DES加密。据称,目前尚无人找到针对此方案的攻击方法。
S盒可选择的DES也称交换S盒的DES算法。它可使S盒的次序随密钥而变化或使S盒的内容本身可变。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。