DES
算法描述
明文分组为64位,初始密钥64位,有效密钥56位,输出密文64位,16轮迭代的分组对称密码算法。由置换、替换、异或、循环移位组成。
流程图
加密过程
密钥生成
- 64位初始密钥先进行一个PC-1置换,目的是根据置换表去掉8位奇偶校验位,并打乱剩下的56位有效密钥的顺序。将这56位分成C0和D0。
- 两部分分别根据LSi的值进行循环左移,左移后通过PC-2置换,然后合并作为48位子密钥。
- 整个des中一共会左移十六轮,第1、2、9、16次是左移一位,其他都是左移两位。
处理明文
- 初始置换IP
先对明文(64位)进行一个初始置换IP,将明文分为L0、R0两个32位块。
该过程并不会增加DES的安全性,但这种做法在16位和32位的总线出现之前将使得数据更容易加载到DES芯片中。 - 迭代
进行16轮Feistel加密。每一轮都用一个从初始密钥导出的48位且每次不同的密钥(密钥生成过程如上文所述)。
每一轮操作:
(1)E扩展置换
用E置换处理每一轮的R0。目的是把32位的R0扩展为48位,和密钥长度相同,以进行异或操作。
置换过程就是:针对4比特×8组,把每一组的第一位放在上一组的最后一位后面,把每一组的最后一位放在下一组的第一位前面。
置换之后的R与该轮密钥进行异或。
(2)S盒替换
把异或之后得到的48位送入通过8个内有不同替代表的S-盒,进行替代运算。每个S盒有6位输入4位输出,48位输入分为8个6比特的分组,一个分组对应一个S盒。每一个S盒中是4行16列的表,盒中的每一项都是一个4位的数。用6位输入的第一位和第六位确定所在行,中间四位确定列,对应一个格子里的值,即该组的替代运算结果。
(3)P盒置换
S盒代替运算的32位输出输入P盒进行置换。
(1)(2)(3)加起来构成f函数
(4)左右交换
P盒置换的结果与64位分组L0异或,然后左、右半部分交换,开始下一轮。
注意第16轮中,最后一步不进行左右交换,而是直接把左右合并。 - 初始IP逆置换
第16轮结束后,左右合并的结果进行IP逆置换。最后得到密文。