0%

DES加密算法

前言

最近上了信息安全课,学了一点东西,感觉还蛮有趣的,在这里记录一下,DES加密算法应该是IBM研制的一种被广泛使用的对称加密算法,在这里,我们只是讨论一下简化的DES算法。

DES算法流程

请允许我盗用一下老师的图片,这个流程图还是很清楚的,但是里面的具体什么置换,怎样去置换,就在简化的DES中去讲解。

整个加密过程分为3个阶段:

  • 第一阶段进行初始置换IP,然后将明文分成两个32bit的字串——L0和R0
  • 对于L0和R0进行连续的16轮迭代运算
  • 将迭代后的信息进行逆置换,然后得到输出的密文。其中,逆置换是初始置换的逆运算

密钥的形成

对于一个给定的56bit密钥,在真正参与的加密的,其实只有48bit。

  • 密钥在第一阶段时,进行置换选择PC-1,根据置换选择表,转换成新的密钥,并拆分成两部分——C0和D0
  • 在第二阶段中,每次对密钥进行循环左移,然后进行置换选择PC-2,得到其中的48bit,但与到加密中。

初始置换

初始置换表如下:

1
2
3
4
58,50,42,34,26,18,10, 2,60,52,44,36,28,20,12, 4,
62,54,46,38,30,22,14, 6,64,56,48,40,32,24,16, 8,
57,49,41,33,25,17, 9, 1,59,51,43,35,27,19,11, 3,
61,53,45,37,29,21,13, 5,63,55,47,39,31,23,15, 7,

就是把64bit数据的第58位放到第一位,第50位放到第二位,依次类推,最后得到一个新的64bit的数据

来个简化的样例
设原始8bit数据为: 1111 0011
IP表为:2,6,3,1,4,8,5,7
那么对应的转换后的数据为:1011 1101

迭代运算

对于每次迭代运算,都需要经过以下5个步骤:

  • 扩展置换:将32bit的字串$RE_{i-1}$扩展成48bit的数据
  • 异或操作:将上一步得到的48bit数据与密钥形成中得到的48bit数据进行异或操作
  • 选择置换:将异或后得到的48bit数据重新变成32bit
  • 置换操作:将上一步得到的结果进行置换
  • 异或操作:将$LE_{i-1}$与上一步得到的数据进行亦或,得到$RE_i$,同时,$LE_i=RE_{i-1}$

具体流程图如下:

扩展置换

跟初始置换一样,根据对应的置换表格,进行置换

例如4bit -> 8bit置换表格为:4,1,2,3,2,1,4,3
对于输入数据:1011
输出数据为:1101 0111

与密钥异或

异或操作很简单,每一位对其,相同为0, 不同为1,不多解释了

选择置换

选择置换又称作S盒,是DES算法中唯一没有公开的一部分,只是给出了输入和输出,具体内部如何实现的,我们不知道。

简化的S盒如下所示:

在简化的DES算法中,我们使用两个S盒——S0和S1。

  1. 将8bit的数据平均分成两部分,前半部分使用S0, 后半部分使用S1
  2. 对于每一部分(以前半部分为例),设为D3,D2,D1,D0,将D3,D1组成一个二进制数,并转换成十进制数A1, 将D2, D1组成一个二进制数,并转换成十进制数A2
  3. 以A1指定一行,A2指定一列,对应的查找S0盒,得到数据M1,同理,用后半部分查找S1可以得到M2
  4. 将M1,M2合并成一个M,就得到了新的4bit的数据

例如,S盒如上图,对应的8bit输入数据为:1101 0111
前半部分: A1 = 11 -> 3 A2 = 10 -> 2 查表可得 M1 = 1 -> 01
后半部分:A1 = 01 -> 1 A2 = 11 -> 3 查表可得 M2 = 3 -> 11
所以转换后的数据为:0111

置换操作

跟初始置换差不多,不解释了

异或操作

应该很简单,也不多解释了

逆置换

逆置换是初始置换的逆过程,方法跟初始置换相同。

关于解密

DES算法是对称加密方法,对称加密的特点就是加解密过程相同,因此,方法跟加密完全一样,只需要将密文按同样的方法加密,就得到了明文。