密码学中的数据加密标准(DES)

一、背景与历史

数据加密标准(Data Encryption Standard,DES)也称为数据加密算法(Data Encryption Algorithm,DEA)(ANSI)和DEA-1(ISO),是最近20年来使用的加密算法。介绍DES的细节还有两个作用:第一:介绍DES;第二,更重要的是分析和理解实际的加密算法。利用这个方法,我们还要从概念上介绍其他的加密算法,但不准备深入介绍,因为通过DES介绍已经可以了解计算机加密算法的工作原理。
DES的产生可以追溯到1972年,美国的国家标准局(NBS,即现在的国家标准与技术会NIST)启动了一个项目,旨在保护计算机和计算机通信中的数据。它们想开发一个加密算法。两年之后,NBS发现IBM公司的Lucifer相当理想,没必要从头开发一个新的加算法。经过几次讨论,NBS于1975年发布了这个加密算法的细节。到1976年底,美国邦政府决定采用这个算法,并将其更名为DES。不久,其他组织也认可和采用DES作为算法。

二、DES的工作原理

1.基本与原理
DES是个块加密法,按64位块长加密数据,即把64位明文作为DES的输入,产生64位密文输出。加密与解密使用相同的算法和密钥,只是稍作改变。密钥长度位56位,下图显示了DES的工作原理:
在这里插入图片描述
DES使用56位密钥。实际上,最初的密钥是64位,但在DES过程开始之前放弃密钥的第8位,从而得到56位密钥,即放弃第8、16、24、32、40、48、56和64位。放弃之前,可以用这些位进行奇偶校验,保证密钥中不包含任何错误。
简单地说,DES利用加密的两个基本属性:替换和变换。DES一共16步,每一步称为一轮,每一轮进行替换与变换步骤,下面介绍DES的主要步骤:
(1)首先将64位明文块送入初始置换函数。
(2)对明文进行初始置换。
(3)初始置换产生转换块的两半,假设为左明文(LPT)和右明文(RPT)。
(4)每个左明文与右明文经过16轮加密过程,各有各的密钥。
(5)最后,将左明文和右明文重新连接起来,对组成的块进行最终置换。
(6)这个过程的结果得到64位密文。
其过程如下图:
在这里插入图片描述
2.初始置换
初始置换只发生一次,是在第一轮之前进行的,指定初始置换中的变换如何进行,如下表所示。例如,它指出初始置换将原明文块中的第一位换成原明文块的第58位,第二位换成明文块的第50位,等等,这只是把明文块的进行移位。

明文块中各个位置初始置换后的内容
158
260
342
647

上表显示了IP使用的一部分变换规则表。IP完成后,得到的64位置换文本块分成两半,各32位,左块称为左明文(LPT),右块称为右明文(RPT)。然后对这两块进行16轮操作。
3.DES的一轮
DES的每一轮包括如下图所示的所有步骤:
在这里插入图片描述
第一步:密钥交换
最初的64位密钥通过放弃每个第8位而得到的56位密钥。这样,每一轮有56位密钥。每一轮从这个56位密钥产生不同的48位子密钥,称为密钥交换。为此,56位密钥分成两半,各为28位,循环左移一位或两位。例如,可以用下表显示每一轮移动的密钥位数:

轮次12345678910111213141516
移动的密钥位数1122222212222221

相应移位后,选择56位中的48位。选择56位中的48位时使用如下表:

14171124153281562110
23191242681672720132
415231374755304051453348
444939563453464250362932

由于密钥交换要进行置换和选择56位的48位,因此称为压缩置换。
第二步:扩展置换
经过初试置换后,我们得到两个32位的明文区,分别称为左明文和右明文。扩展置换将32位扩展到48位。除了从32位扩展到48位之外,这些位也进行置换,因此称为扩展置换,其过程可以如下表示:
(1)将32位右明文分成8块,每块各有4位。
(2)将上一步的每个4位块扩展成6位,即每个4位块增加2位。增加的2位实际上是重复4位块的第一位和第四位。其扩展的流程如下图:
在这里插入图片描述
注意第一个输入位在第二个输入位重复,并在48位重复,同样第32个输出位在第47个输出位和第一个输出位。因此扩展置换实际上可以用如下表所示:

3212345456789
8910111213121314151617
161718192021202122232425
24252627282928293031321

现在将密钥与48位右明文进行异或运算,将结果传递到下一步。
第三步:S盒替换
S盒替换过程从压缩密钥与扩展右明文异或运算得到的48位输入用替换技术得到32位输出。替换使用了8个替换盒(也称为S盒),每个盒有6个输入位和4个输出位。48位输入块分成8个字块(各有6位),每个子块制定一个S盒。S盒将6为输入变成4位输出,其过程如下图所示:
在这里插入图片描述
可以把每个S盒看成一个表,4行(0到3)和16列(0到15),这样共有8个表。在每个行和列的相交处,有一个4位数(是S盒的4位输出),S盒的8个表,如下表所示:

1441312151183106125907
0157414213110612119538
4114813621115129731050
1512824917511314100613
1518146113497213120510
3134715281412011069115
0147111041315812693215
1381013154211671205149
1009146315511312711428
1370934610285141211151
1364981530111212510147
1101306987415143115212
7131430691012851112415
1381156150347212110149
1069012117131513145284
3150610113894511127214
2124171011685315130149
1411212471315015103986
4211110137815912563014
1181271142136150910453
1211015926801334147511
1015427129561131401138
9141552812370410113116
4321295151011141760813
4112141508133129751061
1301174911014351221586
1411131237141015680592
6111381410795015142312
1328461511110931450127
1151381037412561101492
7114191214206101315358
2114741081315129035611

6位输入表示选择哪个行哪个列(即那个交点),因此确定4个输出。假设S盒的6位表示为b1、b2、b3、b4、b5、与b6。现在,b1和b6组合,形成一个两位数,两位数可以存储0到3的任何值,它指定行号。其余四位b2、b3、b4和b5形成一个四位数,指定0到15的列号。这样,这个6位输入自动选择行号和列号,可以选择输出。所有S盒的输出组成32位块,传递到一轮的下一阶段,即P盒置换。
第四步:P盒置换
所有S盒的输出组成32位块,对该32位要进行P盒置换。P盒置换机制只是进行简单的置换(即按P表指定把一位换成另一位,而不进行扩展的压缩)。下表显示了P盒:

16720212912281711523265183110
28241432273919133062211425

第一块的16位表示源输入的第16位移到输出的第一位,第16块的10表示源输入的第10位移到输出的第16位。
第五步:异或或交换
注意上述步骤只是处理了64位明文的右边32位(即右明文),还没有处理左边部分(左明文)。这时,最初的64位明文的左半部分与P盒置换的结果进行异或运算,结果成为新的右明文,并通过交换将旧的右明文变成新的左明文,其过程如下图所示:
在这里插入图片描述
4.最终置换
16轮结束之后,进行最终置换(只有一次),即按如下表格进行变换:

408481656246432397471555236331
386461454226230375451353216129
364441252206028353431151195927
34242105018582633141949175725

上表所示可以发现第40位输入代替第1位输出,等等。
最终置换的输出就是64位加密块。
5.DES解密
DES加密算法也适用于解密,各个表的值和操作及其顺序是经过精心选择的,使得这个算法可逆。加密与解密过程的唯一差别是密钥部分倒过来了。如果原先的密钥K分解为K1,K2,K3,…,K16,用于16轮加密,则解密密钥应为K16,K15,K14,…,K1。
6.分析DES
S盒的使用:DES中的替换表被IBM保密,IBM花费17年的时间提出了S盒的内部设计。一些研究认为,通过S盒,可以对DES进行一定范围的攻击,但是知道现在,也没有具体示例出现。
密钥长度:任何加密系统都有两个重要方面:加密算法和密钥。DES算法的内部工作原理对公众是完全公开的。因此,DES的抗攻击强度只能依赖密钥,这必须是保密的。
DES使用的是56位密钥,这样就有 2 56 2^{56} 256中可能的密钥,这看起来使用蛮力攻击不太实际的。假设即使检查一般密钥(即一般密钥空间)就可以找到正确的密钥,一台计算机每微秒进行一次DES加密,也要1000年的时间才能破解。
差分与线性密码分析:1990年,EH Biham与Adi Shamir引人了差分密码分析的概念。这个方法寻找明文具有特定差分的密文对,在明文经过DES不同轮次时分析这些差分的进展。目的是选择具有固定差别的明文对。可以随机选择两个明文,只要其满足特定差分条件(可以是简单异成)。然后在得到的密文中使用差别,对不同密钥指定不同相似性。分析越来越多的密文对后,就可以得到正确的密钥。
线性密码分析攻击是Mitsuru Matsui发明的,采用线性近似法。如果把一些明文位进行异或操作,把一些密文位进行异或,然后把结果进行异或,则会得到一个位,是一些密钥位的异成。
计时攻击:计时攻击更多的是针对非对你密钥加密,但也可用于对称密钥加密。其思想很简单:观察加密算法在解密不同密文块所花费的时间长短。通过观察这些计时,来尝试获得明文或用于加密的密钥。通常,解密不同长度的明文块所花费的时间是不同的。

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhInen丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值