码迷,mamicode.com
首页 > 其他好文 > 详细

DES加密

时间:2016-06-17 19:13:31      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:

  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,与初始置换互逆)。

  可逆验证    M=IP-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]⊕C=A⊕[B⊕C]        

    A⊕A=0       

    A⊕0=A

  以 i 轮为例

          技术分享

    加密时有                                              解密时有

      Li=Ri-1                    Li’=Ri-1‘   ==>   Li’=Li=Ri-1  

      Ri=Li-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、对移位后的值再做一次置换,如下表。

  技术分享

  

DES加密

标签:

原文地址:http://www.cnblogs.com/block2016/p/5502544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!