1相关概念数据加密标准(DES:Data Encryption Standard)
对称组加密算法;
1979年,美国银行协会批准使用
1980年,美国国家标准局(ANSI )同意DES作为私人使用的标准,称为DEA(ansix.392 )。
1983年,国际化标准化组织ISO同意将DES作为国际标准称为DEA-1;
该标准规定每五年审查一次,预计10年后将采用新标准
最近一次评估是在1994年1月,决定自1998年12月以来不再使用DES作为联邦加密标准。
(1) 明文
明文是指未加密的数据。 一般来说,明文是等待传输的数据。 因为没有加密,所以明文很容易被识别和解密,所以在发送明文之前需要进行加密处理。
(2) 密文
密文只是通过某种加密算法获得的数据,通常密文的形式很复杂,难以识别和理解。
(3) 密钥
密钥是输入到从明文转换为密文或从密文转换为明文的算法中的参数。
(4) 对称加密
通信同时掌握一个密钥,加密解密用一个密钥进行。 也就是说,加密密钥等于解密密钥,加密解密密钥可以互相推翻。 双方在通信前共同制作私钥,不公开给第三方。
(5) 分组密码
组密码将明文分为固定长度的组,各组用相同的密钥和算法加密,输出也是固定长度的密文。
2 DES加密算法(1) 分组长度
DES是组密码,明文和密文是64位组。 密钥的长度为64位,但密钥的第8位设置为奇偶校验位,因此密钥的实际长度为56位。
(2) 算法流程
算法流程如下。
使用初始置换表置换明文,但这里的置换只是改变数据的位置得到新的数据。 初始反向置换表和初始置换表相互可逆,是恢复原始数据的位置。
(3) 初始置换
通过明文m和密钥k得到m,即由明文m的初始IP来替换。
IP置换表58、50、42、34、26、18、10、02、60、52、44、36、28、20、12、04、62、54、46、38、30、22、14、06、64
选择的密钥k是0001001100110011010101011011011011011001100110011001101100110011001101101110001
对其进行初始置换,最终得到的m’为1111111101101100001101101100110011001100011000011111111111001000011
注: IP替换表中的数据指的是位置。 例如,58表示将m的第58位放在第1位,50表示将第50位放在第2位。
如果m’的前32位为L0,则有L0(32位) 111111111011011011011011011011011010111
假设m’的后32位为R0,则有r0(32位(00000001111111110000011010000011 )
如图所示,左边的32位L0转换为下一轮的右边输入,右边的32位R0保持不变成为下一轮的左边输入。
3 DES算法子密钥生成DES算法子密钥输入长度为64位,因为只有48位有效,需要对密钥k进行转换以得到每循环所需的子密钥。 16次迭代需要16个48位的子密钥进行加密。
DES算法子密钥的生产相对简单,64位密钥被替换选择,其中仅56位被选择。 56比特密钥同样分为左右28比特,根据子密钥计算的逻辑表,进行每一个循环左移运算,分别得到新的56比特,这56比特经过第二次置换选择后得到本循环的子密钥。
根据替换表选择有效的位数。
例如:键k=00010011001100110011001100110011011011011011011011011011010110111011101011101110111110000011
经过PC-1表置换,执行置换选择1进程。 PC-1表有8行
7列的表,密钥K经PC-1后变为56位数据K’。最终得出K’=11110000110011001010101011110101010101100110011110001111
取K’的前28位作为C0,则有C0(28位):1111000011001100101010101111
取K’的后28位作为D0,则有D0(28位):0101010101100110011110001111
获得C0,D0后进行左移操作需要查询移动位数表,每轮移动移动位数表如下:
轮数 12345678910111213141516位数 1122222212222221
进行第一轮移位,轮数为1,查表得左移位数为1。
C0左移1位为C1:C1(28位):1110000110011001010101011111
D0左移1位为D1:D1(28位):1010101011001100111100011110
将C1和D1合并后,经过PC-2表置换得到子密钥K1,PC-2表中去除了第9,18,22,25,35,38,43,54位。
由于PC-2表为6X8的表,经PC-2置换后的数据为48位,置换后得到密钥K1,K1(48位) 000110110000001011101111111111000111000001110010
4 DES算法一轮的运算过程
这里讲述本轮右边的输入是如何从上一轮左边32位进行复杂的迭代得到的。
此处的R0先进行扩充置换变成了48位,因为在DES算法中有效密钥的长度是48位所以要对其进行扩充置换,将32位的输入扩充为48位,以便于与48位的密钥进行运算。
扩充之后与48位的密钥进行异或运算,又得到了一个临时的48位数据。因为下一轮的输入只需要32位,所以这48位数据需要转换为32位的数据。接下来将这32位数据与上一轮的L0进行异或运算得到了R1的输入。
扩充置换表 32,01,02,03,04,05,04,05,06,07,08,09,08,09,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,01 例如:
L0(32位)数据:11111111101110000111011001010111
R0(32位)数据:00000000111111110000011010000011
扩充之后的数据为48位R0:100000000001011111111110100000001101010000000110
R0^K1得到: 100110110001010100010001011111001010010001110100
这一步之后得到48位数据经过代换/选择变为32位,这需要用到S盒。
5 S盒
48位数据如何经过代换/选择变为32位是整个DES算法的核心,简称S盒。整个变换中的非线性的运算过程也是在S盒中完成的,接下来讲述S盒的原理。
输入是48比特,输出是32个比特。在算法执行的过程中,将48比特划分为8个S盒,每个S盒的输入是6比特,输出是4比特,通过6选4的变换过程,最终就得到了一个32位的内容输出。
S盒的设计原理是将0~15这16个整数划分成4行16列的数据集合,每一行每一列定位一个整数。
对每个盒,6比特输入中的第1和第6比特组成的二进制数确定的行,中间4位二进制数用来确定的列,相应行、列位置的十进制数的4位二进制数表示作为输出。
例如的输入为101001,则行数和列数的二进制表示分别是11和0100,即第3行和第4列,第3行和第4列的十进制数为3,用4位二进制数表示为0011,所以的输出为0011。
6 逆置换
将初始置换进行16次的迭代,即进行活泼的书本的加密变换,得到L16和R16,将此作为输入块,进行逆置换得到最终的密文输出块。逆置换是初始置换的逆运算。从初始置换规则中可以看到,原始数据的第1位置换到了第40位,第2位置换到了第8位。则逆置换就是将第40位置换到第1位,第8位置换到第2位。以此类推,逆置换规则表如下:
40,08,48,16,56,24,64,32,39,07,47,15,55,23,63,31,38,06,46,14,54,22,62,30,37,05,45,13,53,21,61,29,36,04,44,12,52,20,60,28,35,03,43,11,51,19,59,27,34,02,42,10,50,18,58,26,33,01,41,09,49,17,57,25,
将L16与R16构成64位数据,经过逆置换表输出密文为:0101100000001000001100000000101111001101110101100001100001101000
7 总结
经过上面的描述,我们知道DES算法的总体过程为:明文64位->初始置换IP->16轮加密变换->逆初始置换IP-1->密文。在每一轮的迭代中,我们通过查询每一轮移动的位数来得到每一轮中的48位子秘钥,通过置换移位进行复杂的迭代,最终得到密文。