中国交通建设监理协网站,智慧校园,博罗网站建设,wordpress公众号管理DES采用了64位的分组长度和56位的密钥长度#xff0c;是对称加密的一种。 DES的理论进化主线是 1945年Shannon大神提出的交替使用混淆#xff08;使密文与密钥的统计关系变复杂#xff09;和扩散#xff08;使明文与密文的统计关系变复杂#xff09;的乘积密码#xff08… DES采用了64位的分组长度和56位的密钥长度是对称加密的一种。 DES的理论进化主线是 1945年Shannon大神提出的交替使用混淆使密文与密钥的统计关系变复杂和扩散使明文与密文的统计关系变复杂的乘积密码DES加密的核心思想--1960s的Feistel结构--DES。实践主线是 1971年基于Feistel结构的LUCIFER算法--Tuchman-Mayer方案将LUCIFER的128位密钥简化为56位--1977年被采纳的DES增加S盒产生非线性。 下图为DES加密的整个机制。 DES加密操作分两块明文加密以及生成子密钥两部分。 上图左半部分描述了明文加密成密文的三个阶段。 1、64位的明文经初始置换IP而重新排列。 2、进行16轮的置换和转换基于Feistel结构。 3、再做一次置换IP-1与初始置换互逆。 可逆验证 MIP-1{F[IP(P)]} IP-1{F[IP(M)]} IP-1{F[IPIP-1{F[IP(P)]}]}IP-1{FF[IP(P)]}IP-1IP(P)P 结论加密和解密的过程基本一致F函数代表16轮转换的整体效果实际上子密钥在加密和解密中顺序是相反的 上图右半部分是56位密钥的操作过程。 1、密钥先做一个置换。 2、再做16次包含循环左移和置换的操作组合每次都产生一个子密钥Ki。每一轮的置换操作都完全相同但由于循环左移而使得每个子密钥不同。 下面介绍初始置换及其逆置换。 如上表分别代表初始置换和初始置换的逆置换。表中数字包含1-64代表输入的64位分组的每一比特在置换输出后的位置。 很显然以上两个置换确实是可逆的如明文分组的第1位经初始置换后出现在第58位而逆置换的第58位将输出到第1位。 这个置换的原理实际上是对置换群的可逆操作。 Feistel结构的加密与解密 Feistel结构的加密算法将明文分组分成等长的左右两部分这两半经过n轮迭代后组成密文分组。每一轮的迭代操作都完全相同解密过程本质上与加密过程操作是一致的只是子密钥的使用顺序与加密过程完全相反。因此为了研究加密与解密过程的可逆性可将问题简化为只有一轮的迭代如下图。 feistel结构的可逆性其运用的数学原理是异或的几个基本性质 [A⊕B]⊕CA⊕[B⊕C] A⊕A0 A⊕0A 以 i 轮为例 加密时有 解密时有 LiRi-1 Li’Ri-1‘ Li’LiRi-1 RiLi-1⊕F(Ri-1,Ki) Ri’Li-1‘⊕F(Ri-1’,Ki) Ri’Ri⊕F(Li,Ki)Li-1⊕F(Ri-1,Ki)⊕F(Ri-1,Ki)Li-1 结论每轮加密和解密的中间结果都完全一样且与F函数无关。而F函数越复杂Ri与Li-1的关系越复杂因而越难被破解。 DES第二阶段每轮变换的详细过程 由于轮密钥长48位R是32位首先要将R进行置换扩展为48位其中有16位是重复的如用下表进行置换扩展。 然后将扩展后的48位与轮密钥进行异或所得结果再用一个替代函数作用S盒并输出32位。下图解释了S盒在函数F中的作用。 代替函数由8个S盒组成S盒的变换参见下表。 每个S盒都输入6位输出4位。盒Si输入的第1位和最后1位组成一个2位的二进制数用来选择S盒4行代替值中的一行中间4位用来选择16列中的某一列。行列交叉处的十进制转换为二进制之后可得到输出的4位二进制数。 S盒实现了非线性的特性。通过S盒不同的输入可以有相同的输出进一步增加了明文与密文之间的映射关系的复杂度使得破解更加艰难。 最后再做一次置换后输出该置换例子如下表。 密钥产生 1、首先输入64位密钥密钥各位分别标记为1-64。从64位中选择56位作为有效密钥如选择下表阴影部分。 2、将所得56位有效密钥进行置换并划分成等长的两部分C0和D0如下表。 3、每轮进行迭代时Ci-1和Di-1分别循环左移一位或者两位具体移位数见下表。 4、对移位后的值再做一次置换如下表。 转载于:https://www.cnblogs.com/block2016/p/5502544.html