**DES(Data Encryption Standard,数据加密标准)**是一种对称密钥算法,用于加密和解密数据。它最初由IBM开发,并在1977年被美国国家标准与技术研究院(NIST)采纳为联邦信息处理标准(FIPS),用于非机密政府通信以及商业应用。
一. 算法流程概述
DES算法属于对称加密算法中的分组加密算法。其中密钥长度为64位,56位为有效位,其余8位为校验位。明文数据块的大小为64位。算法整体可分为3步,分别为初始置换、迭代运算和末置换。算法的流程如下图所示。
二. 算法流程详解
1. 初始置换
初始置换即按照特定的规则,将明文数据块的64位二进制位重新排列。其置换表,即
I
P
IP
IP表如下
如何根据表格进行置换?将原数据块的第58位二进制位重置在第一位,将将原数据块的第50位二进制位重置在第二位,将原数据块的第42位二进制位重置在第三位…
2. 迭代运算
2.1 E扩展
由算法流程图可知,64位明文数据块被分为左右两部分,每部分32位。
E
E
E扩展的目的则是将32位的右半部分扩展为48位。E表如下
E
E
E表的使用方法和
I
P
IP
IP表相同
2.2 异或
E E E扩展后的右半部分和48位轮密钥进行异或运算。密钥的生成放在文章的后面阐述。
2.3 S盒
异或运算后,将运算结果进行S盒压缩处理。
S
S
S表的使用方法与前面的表格不同。将48位分为8块,每块6位。第一块使用第一个S盒,第二块使用第二个S盒,以此类推,将每块的6位中的第1位和第6位组合成一个两位的二进制数,用来作为行值;将每块的6位中的第2位、第3位、第4位和第5位组合成一个四位的二进制数,用来作为列值,用取得的行值和列值到
S
S
S表中取值,得到一个四位的二进制数,这样就把6位二进制压缩成了4位二进制。输入的48位二进制也就被压缩成为了32位二进制。
2.4 P置换
S
S
S盒运算后,进行
P
P
P盒置换。
P
P
P盒的使用方法与
I
P
IP
IP表和
E
E
E表的使用方法一致。
P P P盒置换后,需要和明文数据块的左半部分进行异或运算,运算完成后,一轮迭代运算结束。
将左右部分互换,进行下一轮运算。需要注意的是:第16轮,也就是最后一轮,左右部分没有进行交换。
3. 末置换
经过16轮的迭代运算后,进行末置换。
置换方法和初始置换一致。
三. 密钥生成
前文提到,密钥为64位,参与运算的为56位,其中的具体过程如下
置换选择1
将64位密钥进行置换选择1,结果为56位。置换表如下
和前文涉及的表格相同,将原密钥块的第57位二进制位重置在第一位,原密钥块的第49位二进制位重置在第二位,从表中可知,原密钥块的第8、16、24、32、40、48、56和64不在表中,不参与运算。
循环移位
置换选择1运算后,将结果分为左右两部分,每部分28位,分别进行循环左移,循环左移的位数取决于DES算法流程中的16轮迭代运算的迭代轮数,具体如下表
置换选择2
循环左移后,将左右密钥块合并,进行置换选择2,置换表如下
置换方法同置换选择1。
参考资料
https://csrc.nist.gov/files/pubs/fips/46-3/final/docs/fips46-3.pdf