什么是DES算法
DES是一种对称密码,加密和解密用的都是同一个密钥,有效密钥长度为56位。DES是一个分组密码算法,分组长度为64位,即对数据进行加解密的单位是64位,明文和密文的长度相同。由于加密和解密用的是同一算法,所以有利于硬件和软件上的实现。注意上面说的56位是有效密钥长度,事实上我们用的是64位密钥,但是第8,16,24,32,40,56和64位是奇偶校验位
DES算法的概述
1.分组的加密算法
明文和密文为64位分组长度。
2.对称算法
加密和解密除密钥编排不同外,使用同一算法。
3.密钥长度
56位,但存在弱密钥,容易避开。
4.采用混乱和扩散的组合,每个组合先替代后置换,共16轮
5.只使用了标准的算术和逻辑运算,易于实现
6.现代密码学诞生的标志之一,揭开了商用密码研究的序幕
DES加密流程图
DES算法的实现
(一)初始置换(IP)。将明文块的位进行换位,其置换表示固定的。初始置换表为8*8的表格,第一位58表示该位置存放明文中的第58位字符。第1位字符已经变换到40位的位置。
注意初始置换是固定公开的函数,因此没有密码的意义。作用不大,它们的作用在于打乱原来输入x的ASCII码字划分的关系。经过初始置换之后,64位明文分成了两组L和R,各32位。由于这种方法软件实现较为麻烦,所有很多软件实现都删去了初始置换。经过初始置换,64位的输入得到了两个32位的输出。
(二)16轮的轮函数F变换。轮函数F由3个部分组成:扩展置换(E盒),非线性代换(S盒)和线性置换(P盒)。
(1)E盒的作用是将32为扩展为48位,其扩展规则按下表进行。该表大小为6*8,去掉最左和最右两行,中间的四列包含了1-32的顺序。第1列和第6列分别是对第4和第1列的扩展。经过扩展置换,32位的输入得到了48位的输出。
(2)S盒的作用是进行非线性代换。S盒是DES中唯一的非线性部分,DES的安全强度主要取决于S盒的安全程度。S盒运算其实是一个查表运算。在E盒的扩展之后得到了48位的数据,将其和48位的子密钥进行异或运算,这是密钥参与运算的步骤。将其分成8个组,每组6个,送到8个S盒中去。每一个S盒都是一个6位输入4位输出的结构,也就是说,48位输入到8个S盒会得到4*8=32位的输出。6位输入到8位输出的映射关系如下表所示,其中,第一位和最后一位作为行号,第二位到第五位最为列号。例如,101100,则行号为10=2,列号为0110=6。查得(2,6)=2,化成二进制位0010。注意,8个S盒的映射关系各不相同。
(3)P盒的作用只是进行简单的位置置换,只是简单地把一位换成另一位,不进行扩展和压缩。经过P盒操作,32位的输入得到32位的输出。
轮函数F剩下的步骤通过轮函数的组成图可以清晰看出,这里不再详细介绍。主要就是进行异或操作。就这样对经过E盒拓展的64位数据进行16轮的变换。
(三)逆初始置换。如果进行初始置换,则必须进行逆初始置换,逆初始置换的实现和初始置换一样,只是置换表不同而已。
DES子密钥生成方法
DES的初始64位密钥通过置换选择PC-1得到有效的56位密钥。这56位分为2个28位数据C0和D0。每轮迭代中Ci-1和Di-1分别循环左移1位或2位,移位后的值作为下一轮的输入,同时也作为置换选择PC-2的输入,通过置换选择PC-2产生一个48位的输出,即为一个子密钥。64位密钥生成了16个48位的子密钥。
PC-1表(用于置换选择1)
PC-2表(用于置换选择2)
DES的核心技术
S盒设计准则
1.具有良好的非线性;
2.每一行包括所有16种4位二进制;
3.两个输入相差1比特时,输出相差2比特;
4.如果两个输入刚好在中间两个比特上不同,则输出至少有输入至少有两个比特不同;
5.如果两个输入前两位不同而最后两位相同,则输出一定不同。
P盒设计准则
1.每个S盒的4位输出影响下一轮6个不同的S盒,但是没有两位影响同一S盒;
2.在第i轮S盒的4位输出中,2位将影响i+1轮中间位置,其余2位数将影响两端位;
3.如个一个S盒的4位输出影响另一个S盒的中间的一位,则后一个的输出位不会影响前面一个S盒的中间位。