DES、二重DES、三重DES

0x01 DES简介

DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。

0x02 DES算法入口参数

DES算法的入口参数有三个:Key、Data、Mode。key是密钥,长度为64bits,有8bits奇偶校验,有效密钥长度为56bits。;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。

0x03 DES 基本原则

DES设计中使用了分组密码设计的两个原则:混淆(confusion)和扩散(diffusion),其目的是抗击敌手对密码系统的统计分析。混淆是使密文的统计特性与密钥的取值之间的关系尽可能复杂化,以使密钥和明文以及密文之间的依赖性对密码分析者来说是无法利用的。扩散的作用就是将每一位明文的影响尽可能迅速地作用到较多的输出密文位中,以便在大量的密文中消除明文的统计结构,并且使每一位密钥的影响尽可能迅速地扩展到较多的密文位中,以防对密钥进行逐段破译。

0x04 算法步骤

DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位(实际用到了56位,第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1),其算法主要分为:初始置换IP、16轮迭代的乘积变换、逆初始置换IP-1以及16个子密钥产生器。

4.1 初始置换IP

其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,置换表如下:
初始置换表
4.2 16轮迭代的乘积变换

16次迭代运算,每一次迭代如图:
在这里插入图片描述

无论f函数如何选取,DES的轮函数是一个对合变换(经过两次变换,又能回到初始值)
在这里插入图片描述
我们将每轮展开,就是下图:
在这里插入图片描述
我们可以看出,f函数是由几个变化合成的。

4.2.1 拓展/置换
在这里插入图片描述
右边的32经过选择拓展运算得到48位,然后与48位的密钥进行xor运算,得到的结果作为S盒的输入,一共8个S盒,每个盒子输入6位,输出4位。

选择拓展运算是首先将32位排成8行,每行4位:
在这里插入图片描述
将最左边的一列,每个序号减一,1减一为32,得到的结果成为拓展的最左边一列,将最右边的一列的序号值加1,32加1为1,构成最新的最右边一列,这样就变成了48位
在这里插入图片描述
接下来我们看S盒,S盒也叫选择压缩运算。将48位压缩成32位
在这里插入图片描述
每个盒都是4*16的矩阵,那么它是如何压缩的呢?比如说一个盒的输入为 101100,将第0位和第5位放在一起,转成十进制,就是2,表示我们要选择的值在第2行,中间4个值放在一起,转成十进制,就是6,表示我们选择的值在第6列,一个行号、一个列号就确定我们要选择的值2,将2转成4位二进制,所以S盒将6位数据压缩成4位数据是0010。每个盒都这样运算,刚好32位。
在这里插入图片描述
得到的32位数据在进行P盒运算,得到的结果就是每轮f函数的值。P盒置换如下:
在这里插入图片描述
现在我们来看看秘钥是如何变换的。
在这里插入图片描述
首先将8个校验位去掉,经过置换选择1,置换选择1如下图:
在这里插入图片描述
之后得到C0和D0,然后分别左移1位,再经过置换选择2,就得到第一轮秘钥,置换选择2为:
在这里插入图片描述
每轮都是这样,第i轮移位次数表为:
在这里插入图片描述

经过16次迭代运算后。得到L16、R16,将此作为输入,进行逆置换,即得到密文输出

0x05 二重DES

多重DES就是使用多个密钥利用DES对明文进行多次加密。使用多重DES可以增加密钥量,从而大大提高抵抗穷举密钥搜索攻击的能力。

二重DES是简单的对消息x利用两个不同的秘钥进行两次加密。目的是为了抵抗穷搜索攻击,期望秘钥长度扩展为112比特。
在这里插入图片描述
中间相遇攻击
若有明文/密文对(xi,yi)满足yi=Ek2[Ek1[xi]]
则可得z=Ek1[xi]=Dk2[yi]
在这里插入图片描述
步骤:

  • 以密钥k1的所有256个可能的取值对此明文xi加密,并将密文z存储在一个表中
  • 从所有可能的256个密钥k2中依任意次序选出一个对给定的密文yi解密,并将每次解密结果z在上述表中查找相匹配的值。一旦找到,则可确定出两个密钥k1和k2;
  • 以此对密钥k1和k2对另一已知明文密文对(x2,y2)中的明文x2进行加密,如果能得出相应的密文y2就可确定k1和k2是所要找的密钥。

复杂度:
对于给定明文x,以两重DES加密将有264个可能的密文。可能的密钥数为2112个。所以,在给定明文下,将有2112/264=248个密钥能产生给定的密文。用另一对64比特明文/密文对进行检验,就使虚报率降为248-64=2-16。这一攻击法所需的存储量为256×8Byte,最大试验的加密次数2×256=257。这说明破译双重DES的难度为257量级。

0x06 三重DES

三重DES中三个密码组件既可以是一个加密函数,也可以是一个解密函数。当k1=k3时,则称为双密钥三重DES
在这里插入图片描述
加密:y=Ek1[Dk2[Ek1[x]]]
解密:x=Dk1[Ek2[Dk1[y]]]

在这里插入图片描述
加密-解密-加密方案,简记为EDE

发布了184 篇原创文章 · 获赞 15 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41683305/article/details/105058158
DES