DES算法加密简介

什么是DES

数据加密标准(Data Encryption Standard,DES)是由IBM公司在1971年设计的一个加密算法。1977年由美国国家标准局(现美国国家标准技术委员会)作为第46号联邦信息处理标准而采用的一种数据加密标准。
DES成为金融界及其他非军事行业应用最为广泛的对称加密标准。
DES是分组密码的典型代表,也是第一个被公布出来的标准算法。DES的算法完全公开,在密码学史上开创了先河。
简单来说DES(Data Encryption Standard)是一种对称加密算法。它是在20世纪70年代初期由IBM研发的。它的设计目标是提供高度的数据安全性和性能,并且能够在各种硬件和软件平台上实现。

分组加密算法:明文和密文为64位分组长度。
对称算法:加密和解密除密钥编排不同外,使用同一算法。
密钥长度:56位,看起来是64位,但每个第8位为奇偶校验位,可忽略。
采用混乱和扩散的组合,每个组合先替代后置换,共16轮。

DES的基本概念

DES使用56位的密钥和64位的明文块进行加密。DES算法的分组大小是64位,因此,如果需要加密的明文长度不足64位,需要进行填充;如果明文长度超过64位,则需要使用分组模式进行分组加密。
虽然DES算法的分组大小是64位,但是由于DES算法的密钥长度只有56位,因此DES算法存在着弱点,容易受到暴力破解和差分攻击等攻击手段的威胁。因此,在实际应用中,DES算法已经不再被广泛使用,而被更加安全的算法所取代,如AES算法等。
尽管DES已经被取代,但它在密码学的历史上仍然具有重要意义。通过DES可以帮助我们了解对称密钥加密算法的基本概念和运作原理。

DES的基本流程

20231120143320

1、初始置换(IP置换):将输入的64位明文块进行置换和重新排列,生成新的64位数据块。

2、加密轮次:DES加密算法共有16个轮次,每个轮次都包括四个步骤:

a. 将64位数据块分为左右两个32位块。

b. 右侧32位块作为输入,经过扩展、异或、置换等操作生成一个48位的数据块。这个48位的数据块被称为“轮密钥”,它是根据加密算法的主密钥生成的子密钥。

c. 将左侧32位块和轮密钥进行异或运算,结果作为新的右侧32位块。

d. 将右侧32位块与原来的左侧32位块进行连接,生成一个新的64位数据块,作为下一轮的输入。

3 末置换(FP置换):在最后一个轮次完成后,将经过加密的数据块进行置换和重新排列,得到加密后的64位密文。

DES加密算法详解

初始置换(IP置换)

IP置换是将输入的64位明文块进行置换和重新排列,生成新的64位数据块。
目的:增加加密的混乱程度,使明文中的每一位都能够对后面的加密过程产生影响,提高加密强度。
我们将把64位的顺序按下表中规定的顺序放置,图中的数字是在64位明文中每个比特的索引位置。注意,在DES中,这个置放规则是固定的。(IP逆置换同理,与IP置换互补)

20231120152457

加密轮次

20231120155804

20231120144720

f 函数

20231120155823

20231120145044

E-扩展运算

20231120155837

20231120145436

20231120155850

密钥 K 如何生成

DES算法采用了每轮子密钥生成的方式来增加密钥的复杂性和安全性。每轮子密钥都是由主密钥(64位)通过密钥调度算法(Key Schedule Algorithm)生成的。DES算法的密钥调度算法可以将64位的主密钥分成16个子密钥,每个子密钥48位,用于每轮加密中与输入数据进行异或运算。
通过子密钥生成的流程图来看下整个过程

20231120153333

20231120155917

PC-1 置换函数如下:

20231120153711

从PC-1的置换表中可以看到,舍弃掉的8位数据是原始数据中每8位数据的最后一位,也就是我们所熟知的奇偶检验位。这8位被丢弃是因为它们对于密钥的安全性没有贡献,而且能够使DES算法的计算速度更快。

20231120155951

20231120154210

20231120160033

20231120154313

PC-2置换表的第一行表示选择了输入密钥中的第14、17、11、24、1和5位,并将它们作为输出子密钥的前6位。以此类推…

20231120160050

S-盒运算

S-盒如下图所示:

20231120150413

每个 S-盒都是6位的输入,4位的输出,因此能将48位的结果转化为32位的结果
例如在第一轮中,前六个数据是101010,S1会将第一位跟第六位(即两头的两个数字) 在此处是10 作为S1的行,将中间四位 此处是0101 作为列,将行列从二进制转换为十进制,即为行为 2 列为 5 ,映射到S1盒上的位置便是(2,5),找到S1盒的(2,5)的位置,即为第三行第六列(从 0 开始),即为 6,转换为二进制为110,S盒的输出是4位,于是得到S(101010)=0110

因此,可以看到S盒其实是一种非线性的加密技术,它能够抵御许多传统的密码分析攻击,如差分攻击和线性攻击

P 盒替换

在 S-盒运算后,将进行 P 函数的运算,即为 P 盒替换,置换函数 P 如下:

20231120151409

将 S-盒运算得到的结果进行 P 盒替换即可得到新的32位长度的结果


20231120160112

IP逆置换

在得到轮函数的最后一轮结束的结果后,将左右两部分合并成为64位长度的结果,然后进行IP逆置换,IP逆置换表如下:

20231120152515


在IP逆置换完成后,便得到长度为64位的密文 C 了

理解DES加密算法参考自:https://blog.csdn.net/Demonslzh/article/details/129129493

可以去看下这个原文章,讲的还是很清楚的