DES算法之加密-从数学角度进行梳理

DES,Data Encryption Standard,数据加密标准。

DES属于分组密码,明文分组长度为64位,密钥长度亦为64位,形成的密文分组仍然为64位。

[分组密码:将明文划分为相同长度的段落,对每个段落分别进行加密的一种密码机制]

[序列密码:对明文字符进行逐位加密的一种密码机制,也称流密码]

[密钥长度:有些文章会直说DES密钥长度为56位,关于这点我们下面再详述]

 

DES加密算法框架图如下所示[这里仅考虑某一个分组的加密过程]

DES算法之加密-从数学角度进行梳理_第1张图片

我用底色来进行了大致的类型区分,分别为:

青底粉框的置换运算、绿底的轮结构、深灰底的左循环移位、浅灰底的左右交换

由于轮结构中会牵涉到左循环移位和左右交换,下面我们将分别讲解置换运算和轮结构。

 

--置换运算--

置换,通俗来说就是交换位置。

[对一个密码体制,考察其任一密钥控制下的加密变换:若任意密文c=c1c2cn的各信息元素{ci}均是相应明文m1m2mn的各信息元素{mi}的某种排列,则称该种密码为置换密码;否则,即存在密文c=c1c2cn的各信息元素{ci}不是相应明文m1m2mn的各信息元素{mi}的某种排列,则称该种密码为代换密码。]

DES算法中共有四种置换,通过上面的算法框架图可以看出分别是初始置换逆初始置换置换选择1置换选择2初始置换和逆初始置换分别是对明文和中间文(过程中产生的非明文和密文的所有文)进行置换运算,置换选择1和置换选择2则是对密钥进行运算,因此将他们分开讲解。

|||初始置换和逆初始置换如下图所示:

DES算法之加密-从数学角度进行梳理_第2张图片

有数字恐惧症的人请淡定,图中的数字指的是位置而不是数值。【有数学恐惧症的人会来看这个?】

原始状态指未操作前的位置的定义。我们看到它一共是64个位置,与分组长度相同。

初始置换(IP)进行后,分组中的64个位置上的字符开始互换位置,回想一下中学时老师给同学们重新排座位,就是这样。这位置怎么排看上图即可一一对照,我标注了位置1(原始状态表,第1行第1列)和其初始置换后的位置(初始置换表,第5行第8列),其他同理。

逆初始置换(IP^-1)是对已进行初始置换[以及其他操作]后的数据再次置换。

曾经我看到初始置换和逆初始置换这两个名字,就觉得他们俩之间…有问题。以原始状态的位置1为例简单分析了下,进行初始置换后,它处于位置40(第5行第8列),进行逆初始置换后,处于位置40的字符重新回到了位置1[从上图中可看到三个有青色底纹的位置变化]。好神奇。转了一圈回到了自己最初呆的位置。所以不负他们各自的名字啊。

|||置换选择1和置换选择2如下图所示:

DES算法之加密-从数学角度进行梳理_第3张图片

置换选择1和置换选择2所做的操作与初始置换和逆初始置换原理相同。

这里不同的地方在于,置换选择1表是7×8一共56位,置换选择表2是6×8一共48位。在置换过程中,某些位被丢弃了。丢弃的原因或者作用我们在讲解轮结构的时候会详细讲解。

一个很重要的概念是:所有置换操作都是线性的,都是一对一的关系。

 

--轮结构--

轮结构细节图如下图所示:

DES算法之加密-从数学角度进行梳理_第4张图片

图中左半部分是对明文的操作,右半部分是对密钥的操作。

先来看明文部分。

在轮结构的开始,一个64位的明文分组被分成了两个部分,L(Left)和R(Right)。抽出右半部分R,首先进行一个扩展置换,这一步将32位分组变成了48位扩展置换的规则如下图所示:

DES算法之加密-从数学角度进行梳理_第5张图片

这一步其实只是将某些位进行了二次重用。尽管如此,扩展置换仍然属于一种线性运算。[其实我也不知道为什么,有谁可以进行解答?]

扩展置换之后,明文分组与经过处理的密钥进行了异或[⊕]运算。于是我们先中断一下明文处理这边,先来看看密钥这边。

在本文的第二行就讲到,密钥是64位,但轮结构图中标明的密钥位数是56位,差异性在于:64位是指密钥的总位数,56位是指密钥的有效位。原因在于,密钥的每第8位为奇偶校验位。

密钥的处理流程:置换选择1→左循环移位→压缩置换[也就是前文所说的置换选择2]

左循环移位如下图所示:

DES算法之加密-从数学角度进行梳理_第6张图片

在进行左循环移位之前,56位密钥首先拆分成两部分,分别进行移位。循环移位的概念相信大家都清楚,这里不多讲。

左循环移位属于轮结构的一部分,轮结构共进行16次,在每一轮中进行的左循环移位也并非完全相同,如上图所示,在第1、2、9、16轮中,移位位数为1位,其他轮中移位位数为2位。

左循环移位操作完成后,之前分开的左右两半部分重新拼合起来进行一次压缩置换,也就是前文讲到的置换选择2。这里还要注意的是,拼合后的结果将作为下一次轮结构的密钥。

压缩置换后的结果,与明文右半部分经过扩展置换后的结果,进行异或运算。参与运算的两者皆为48位,异或后所得结果显然也是48位。

再将所得的48位结果进行一次S盒代替。

S盒代替如下图所示:

DES算法之加密-从数学角度进行梳理_第7张图片

S盒将48位输出等分成8个部分,分别经由8个S盒进行操作。对于每个S盒来说,输入6位,输出4位。

S盒1-8如下图所示:

DES算法之加密-从数学角度进行梳理_第8张图片

每一个S盒是一个4×16的矩阵,我们分别称其为[行:第0行、第1行、第2行、第3行,列:第0列、第1列、第2列、第3列、……、第15列]

下面我们来说一下S盒运算的规则:

假设进行S盒1的操作,输入6位为[1 1 1 0 1 0],我们最高位和最低位形成行、中间四位形成列,于是行为[1 0]等于2,列为[1 1 0 1]等于13,则查S盒1第2行第13列得到结果10,转换为四位二进制数为[1 0 1 0],这就是输出结果。

八个S盒的输出结果级联后还需经过一次P盒置换

P盒置换如下图所示:

DES算法之加密-从数学角度进行梳理_第9张图片

又见置换!哇哈哈这回终于安心地不解释了。

接下来将P盒置换后所得的结果与明文分组的左半部分进行异或,所得结果作为轮结果的右半部分。而轮结果的左半部分,直接由明文分组的右半部分担任。

这个时候大家可以回头再看看轮结构简图了。

十六轮操作完成之后,再进行一次左右交换和一次逆初始置换[此时看加密算法框架图],OK,大功告成了!

 

长嘘一口气……终于讲完了……

 

还要总结一下吗?来来来,死憋一口气,继续讲:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
有一段明文需要进行DES加密,首先进行分组,每组64位,对每一分组分别进行加密。
准备一个64位的密钥。注意每第8位属于奇偶校验位。因此有效密钥为56位。
密钥先进行一次置换,再分成两半进行左循环移位,接着合起来进行一次压缩置换。
明文首先进行一次置换,然后分成两半,右半边进行一次扩展置换,与压缩置换后的密钥进行异或。
然后S盒,然后P盒,然后与明文的左半部分进行异或,得到的结果作为右半部分。
原明文的右半部分作为左半部分,与上面得到的进行级联,然后进行下一轮。
轮结构共进行16次。
接着进行一次左右交换,再进行一次置换。OVER。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

就是这样。欢迎大家前来交流。鞠躬~


其他说明:

文中图片均为本人用PS制作,但内容大部分属于《应用密码学:协议、算法与C源程序》一书中所述。学生党可随意搬走使用,或联系我去掉图片水印,其他人员请保留水印,谢谢~





本文出自 “密码学&计算机取证” 博客,请务必保留此出处http://kweenzy.blog.51cto.com/1093584/1008506

你可能感兴趣的:(算法,des,密码学,详述)