DES加密算法具体步骤详解

时间:2024-04-12 07:17:48

DES加密算法具体步骤

算法背景

DES全称为Data Encryption Standard,即数据加密标准,是一种使用**加密的块算法,1977年被美国联邦*的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级*通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。不过已经发现DES容易受到非常强大的攻击,因此DES的普及程度略有下降。

算法描述

DES算法明文分组长度为64 bit,**长度也为64 bit,但是实际**长度只有56位,其中第8、16、24、32、40、48、56、64位是奇偶校验位,用于检查**在产生、分配及存储过程中可能发生的错误。

算法流程图

原始文档给的算法流程图如下:
DES加密算法具体步骤详解

简化后流程图:

图片来源请点这里~
DES加密算法具体步骤详解

初始置换IP

利用初始置换IP(Initial Permutation)对明文X进行换位处理,打乱原来的次序,得到一个乱序的64 bit 明文组。

https://en.wikipedia.org/wiki/DES_supplementary_material

IP Table:

DES加密算法具体步骤详解

IP表的意思为:将X中的58位数据放在转换后生成的X表的第1位,X中的第50位放在X的第2位,X中的42位放在第3位…X中的第7位放在X的最后一位。

例如,初始X为:01010011 01100101 01100011 01110010 01100101 01110100 00100000 01001101

则经过初始置换IP表进行置换后 变成:10111111 00101001 10110010 10010111 00000000 01111110 10000000 00001101 。

进行完IP置换后,将X分成左右两部分,左边记为L0,右边记为R0:

L0 = 10111111 00101001 10110010 10010111

R0 = 00000000 01111110 10000000 00001101

然后进入轮函数。

子**生成

在DES中,加密者输入的明文和**都是64 bit,其中只有56 bit是有用的位数(因为有8位为奇偶校验位)。但是DES加密过程有16轮循环函数,其中需要用到16个**,所以要将这56 bit**扩展生成16个48 bit 的子**。步骤如下:

1. 用PC_1表置换

DES加密算法具体步骤详解

PC_1置换的主要步骤和初始IP置换一样,PC_1置换的目的是为了去掉64 bit**k中的8个奇偶校验位,并对其余56位打乱排列。置换完成后,同样将**分成左右两部分各28 bit,左边为C0, 右边为D0

例如:原始**:K=00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

经过PC_1置换后:K=1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111

分成左右两部分C0和D0

C0= 1111000 0110011 0010101 0101111

D0= 0101010 1011001 1001111 0001111

2. 创建16个块Cn和Dn

对于1<=n<=16,在第n轮分别对Cn-1和Dn-1进行循环左移,所移的位数为1位或者2位,取决于n的值,当n=1,2,9,16时左移1位,其它左移2位。因此表格如下:

n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
左移位数 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1

进行移位后得到C1到C16,,D1到D16

3. 得到16个子**K

DES加密算法具体步骤详解

Kn = PC_2(CnDn),PC_2为固定置换,用于从 CnDn 中选取48 bit作为子**Kn,CnDn 表示从左到右将 Dn 排在 Cn 的后面,CnDn 的长度为56 bit。

至此,子**全部生成,进入轮函数。

轮函数

轮函数中将IP置换后的明文进行16次迭代,每个循环都使用我们之前计算的16个48 bit **之一。

DES加密算法具体步骤详解

F函数

DES加密算法具体步骤详解

加密函数f是整个DES算法的核心。函数f如上图所示,函数以长度为32 的比特串 A = R(32 bit)作为第1个输入,以长度为48的比特串变元J = K(48 bit)作为第2个输入,产生的输出是长度为32的比特串。

1. 位选择函数E

DES加密算法具体步骤详解

对第一个变元A,由给定的选择扩展函数可以将其扩展为48 比特串E(A)。

2. S盒代换

将 E(A) 和 K 进行异或操作后,把比特串分为8组,一组 6 bit,分别对每一组进行S盒代换。经过S盒,每一组由 6 bit 缩减为 4 bit。

S盒的行号从0到3,列号从0到15。

代换的过程如下,例如需要代换的第一组数据输入为011001,则第一位0和最后一位1组合成的01即为行号,中间的1101为列号,第一组数据对应S1,01转化成10进制为1,1101转化成10进制为13,因此S1中的第1行第13列就为对应的输出,查表得5,转化成2进制为0101。因此0101就为最终的4位输出。
DES加密算法具体步骤详解

DES加密算法具体步骤详解

3. P盒代换

P为固定置换,将经过S盒变换得到的32 bit进行一个置换操作。
DES加密算法具体步骤详解

至此,得到F函数的最终输出。

轮函数步骤

令+表示XOR加法 (模2诸位加法) ,对于第n轮有:

DES加密算法具体步骤详解

进行16轮,得到R16和L16

逆初始置换IP-1

轮函数最后一步的左边32 bit和右边32 bit合成64 bit,再进行逆初始置换,得到最终密文。

IP-1 Table:

DES加密算法具体步骤详解

DES解密

DES的解密过程与加密过程相同,只不过在16次迭代中使用子**的次序正好相反。解密时,第1次迭代使用子**K16,第2次使用子**K15,以此类推…,第16次使用子**K1

三重DES

DES的**长度被证明已经不能满足当前安全的要求,为了增强DES安全性,人们开始提出针对DES的各种改进方案,一种简单的方法就是使用多重DES,其中三重DES应用最广泛。三重DES就是使用3次DES运算,**长度增加到112 bit或168 bit,可以有效克服DES面临的穷举攻击,但实现速度更慢。因此,三重DES只是在DES变得不安全的情况下一种临时解决方案。