.
密码学应用与实践课程实验报告
实验1:实现DES密码体制
一、实验目的 1. 编写程序实现DES的加、解密: 1)编程构造DES的密钥; 2)应用上述获得的密钥将一段英文或文件进行加、解密。 2. 用DES算法实现口令的安全 二、实验内容 1. DES原理 DES综合运用了置换,代换,移位多种密码技术,是一种乘积密码。在算法结构上采用迭代结构,从而使其结构清晰,调理清楚,算法为对合运算,便于实现,运行速度快。DES使用了初始置换IP和IP-1各一次(相应的置换看算法描述图表)置换P16次,安排使用这3个置换的目的是把数据彻底打乱重排。选择置换E一方面把数据打乱重排,另一方面把32位输入扩展为48位,算法中除了S-盒是非线性变换外,其余变换均为显示变换,所以保密的关键是选择S-盒。符合以下3条准则: (1)对任何一个S-盒而言,没有任何线性方程式等价于此S-盒的输出输入关系,即是S-盒是非线性函数。 (2)改变s-盒的任何一位输入,都会导致两位以上的输出改变,即满足\雪崩效应\。 (3)当固定某一个位的输入时,S-盒的4个出位之间,其中0和1的个数之差小。这个准则的本质是数据压缩,把四位输入压缩为4位输出。选择S-盒函数的输入中任意改变数位,其输出至少变化两位。因为算法中使用了16次迭代,大大提高了保密性。 2. DES算法由加密、解密和子密钥的生成三部分组成 1) 加密 DES算法处理的数据对象是一组64比特的明文串。设该明文串为m=m1m2…m64 (mi=0或1)。明文串经过64比特的密钥K来加密,最后生成长度为64比特的密文E。其加密过程图示如下: 1 / 6'.
2) 子密钥的生成 64比特的密钥生成16个48比特的子密钥。其生成过程见图: 2 / 6'.
.
.
3) 解密 DES的解密过程和DES的加密过程完全类似,只不过将16圈的子密钥序列K1,K2……K16的顺序倒过来。即第一圈用第16个子密钥K16,第二圈用K15,其余类推。第一圈: 加密后的结果 L=R15, R=L15⊕f(R15,K16)⊕f(R15,K16)=L15 同理R15=L14⊕f(R14,K15), L15=R14。 3 / 6'.
.
同理类推:得 L=R0, R=L0。 3. 密钥生成 (1) 取得密钥 从用户处取得一个64位(本文如未特指,均指二进制位))长的密码key , 去除64位密码中作为奇偶校验位的第8、16、24、32、40、48、56、64位,剩下的56位作为有效输入密钥. (2) 等分密钥 (3) 密钥移位 DES算法的密钥是经过16次迭代得到一组密钥的,把在1.1.2步中生成的A,B视为迭代的起始密钥. 比如在第1次迭代时密钥循环左移1位,第3次迭代时密钥循环左移2位. 第9次迭代时密钥循环左移1位,第14次迭代时密钥循环左移2位. 第一次迭代: A(1) = ?(1) A B(1) = ?(1) B 第i次迭代: A(i) = ?(i) A(i-1) B(i) = ?(i) B(i-1) (4) 密钥的选取 在(3)步中第i次迭代生成的两个28位长的密钥为 把合并 按照表4所示k的第一位为56位密钥的第14位,k的第2位为56位密钥的第17位,...,依此类推,k的最后一位最后一位是56位密钥的第32位。生成与进行第i次迭代加密的数据进行按位异或的48位使用密钥: (5) 迭代 DES算法密钥生成需要进行16次迭代,在完成16次迭代前,循环执行(3)(4)步.最终形成16套加密密钥:key[0] , key[1] , key[2] ,…. key[14] , key[15] . 4 / 6'.
.
4. 数据的加密操作 (1) 取得数据 把明文数据分成64位的数据块,不够64位的数据块以适当的方式补足。 (2) 数据扩展 第一次迭代以上步生成的newData作为输入数据,第i (i > 1)次迭代以第i-1次的64位输出数据为输入数据,把64位数据按位置等分成左右两部分: 保持left不变, 把扩展后的48位right与第i次迭代生成的48位加密密钥进行按位异或操作 形成一个新的48位的right. (3) 数据压缩 在1.2.3步中形成了48位的right值, 需要把48位的right值转换成32位的right值.把right视为由8个6位二进制块组成, a,b….h都是6位,强制转换成10进制整数的值都不大于64 ,a,b…h转成10进制整数后,在对应的表中根据转换后整数值取得对应位置的替代值, 每6位用一个4位替换这样就完成了从48位向32位数据的转换. 有些资料中介绍6位转4位的实现方法与本文所采用的不同,但殊途同归,最终的结果是相同的。 (4) 数据换位 把1.2.4步形成的32位right 5 / 6'.