3DES是从原始数据加密标准(DES)派生的加密密码。它在90年代末期变得很重要,但是由于更安全的算法的兴起,此后就不再受到青睐。.
尽管将于2023年弃用,但在某些情况下仍会实施。由于它基于最早被广泛研究的算法之一DES,因此了解3DES是什么以及它如何工作仍然很重要.
本指南将详细介绍DES流程的每个步骤,然后介绍如何在3DES中修改DES以使其更安全。它还涉及各种安全问题以及是否应使用该算法.
什么是3DES?
尽管它被正式称为三重数据加密算法(3DEA),但通常被称为3DES。这是因为3DES算法使用了三次数据加密标准(DES)密码来加密其数据.
DES是基于Feistel网络的对称密钥算法。作为对称密钥密码,它在加密和解密过程中使用相同的密钥。 Feistel网络使这两个过程几乎完全相同,这导致算法的实现效率更高.
DES具有64位块和密钥大小,但实际上,密钥仅授予56位安全性。由于DES的密钥长度短,因此3DES被开发为一种更安全的替代方案。在3DES中,DES算法使用三个密钥运行了3次,但是只有使用三个单独的密钥时,才被认为是安全的.
3DES的用途
一旦普通DES的弱点变得更加明显,3DES就被广泛应用。它是AES兴起之前最常用的加密方案之一.
其实现的一些示例包括Microsoft Office,Firefox和EMV支付系统。这些平台中的许多不再使用3DES,因为还有更好的选择.
美国国家标准技术研究院(NIST)发布了一项提案草案,该草案指出,所有形式的3DES将在2023年之前弃用,并从2024年起禁止使用。尽管只是草稿,但该提案标志着时代的终结,现在已经到了使用其他更安全的算法的时代了.
3DES加密的历史
由于3DES源自DES,因此最好先引入较早的标准。七十年代,国家标准局(NBS-此后改名为NIST)正在寻找一种算法,可以用作加密敏感但未分类的政府信息的标准.
国家统计局接受了适合其要求的标准提案,但最初一轮的候选人都不适合。它邀请了更多的提交者,这次IBM通过其团队开发的算法发送了邮件。提交的内容来自Horst Feistel设计的Lucifer密码.
1975年,NBS将IBM算法发布为拟议的数据加密标准。邀请公众对此设计发表评论,引起了一些批评.
著名的密码学家,例如Diffie-Hellman密钥交换的设计师Whitfield Diffie和Martin Hellman,声称密钥长度太短,并且S盒已从其最初的设计中进行了更改.
当时,密码学界的许多人认为,国家安全局破坏了该项目并削弱了算法,因此它是唯一可以破坏DES的机构。.
当美国参议院情报选择委员会对此进行调查时,发现“ NSA确信IBM减小了密钥大小就足够了;间接协助了S盒结构的开发;并证明,据他们所知,最终的DES算法没有任何统计或数学上的缺陷。”
同一份报告还说:“ NSA丝毫没有篡改设计。”这得到了一些IBM前员工的支持,他们声称DES算法完全是由IBM团队设计的。.
美国国家安全局(NSA)自己的解密文件称,该机构“与IBM紧密合作,以加强除暴力攻击之外的所有算法,并加强替代表……”
公开发现差异密码分析后,九十年代对NSA篡改的怀疑就减轻了。当使用新技术测试了大受攻击的S-box时,与随机选择它们相比,发现它们具有更强的抵抗攻击能力.
这表明IBM团队在70年代就已经知道了差分密码分析,Steven Levy声称NSA要求他们将技术保密以保护国家安全。.
著名的密码学家布鲁斯·施耐尔(Bruce Schneier)曾打趣说:“学术界花了二十年的时间才知道,美国国家安全局(NSA)的“调整”实际上提高了DES的安全性。”
尽管最初对该算法的安全性和NSA涉及存在疑问,但IBM算法于1976年被批准为数据加密标准。该算法于1977年发布,并于1983、1988和1993年再次被确认为该标准。.
线性密码分析在1994年首次发布时,就开始引起人们对该算法安全性的质疑。在1997年,NIST宣布正在寻找一种算法来代替DES。随着技术的进一步发展和潜在攻击的增强,对新算法的需求也越来越大.
各种破解尝试表明,破解该算法比以前认为的难。 1998年,distributed.net能够破解DES的时间是39天.
到1999年初,电子前沿基金会的“深层破解”已将时间缩短到22个小时多一点。这标志着DES的终结,因为这种性质的攻击现在已经在资源丰富的对手手中.
主要问题是密钥空间小,因此迫切需要一种新算法。这是一个问题,因为NIST要花上几年的时间才能确定成为替代标准的算法,即高级加密标准(AES).
在确定AES的密码时,提出了3DES作为权宜之计。它涉及使用三个单独的密钥运行DES算法3次。在1999年,再次确认使用DES,但是将3DES作为理想算法。仅在旧版应用程序中允许使用普通DES.
3DES继续成为一种广泛的加密算法,尽管其大量使用资源和安全性限制使其在大多数用例中被AES取代.
了解DES算法
在讨论3DES的细节之前,了解它的DES算法很重要。因此,让我们从头开始.
我们使用加密将我们的纯文本数据转换为密文,即攻击者无法访问的信息(只要我们使用适当的算法即可).
加密算法本质上是复杂的数学公式。当涉及到诸如“让我们去海边”这样的加密时,许多人会感到困惑。毕竟,如何将数学应用于字母和字符?
编码文字
现实情况是,计算机不处理字母和字符。相反,它们在称为二进制的1和0的系统上工作。每个1或0称为一个位,其中八个的集合称为一个字节.
您既可以手动查找它,也可以使用在线转换器查看二进制文件中的“我们去海边”,其中包括:
01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111 00100000 01110100 01101111 00100000 01110100 01101000 01100101 00100000 01100010 01100101 01100001 01100011 01101000
积木
数据加密后,会分为不同的块进行处理。 DES具有64位的块大小,这实际上意味着每个块都适合64个1和0的混合。我们的第一个块(上面显示的二进制文件的前64位)为:
01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111
我们的第二个是:
00100000 01110100 01101111 00100000 01110100 01101000 01100101 00100000
我们的最后一个块是:
01100010 01100101 01100001 01100011 01101000
填充
您可能已经注意到,我们的第三个块只有40位长。在对其进行加密之前,需要先将其构建为64位块大小。这是用 填充, 这涉及到将额外的信息添加到块以完成它。这可以通过许多不同的方案来完成,并且还可以使加密的信息更难以破解,但是我们将不在本文中介绍。.
DES密钥时间表
加密算法使用密钥来添加数据,这将改变过程的最终结果。如果DES仅涉及排列和S-boxes之类的步骤(排列说明如下,而S-boxs包含在 代换 部分),攻击者所要做的就是揭露算法的细节,然后反向执行每个步骤以揭示初始消息.
由于我们大多数算法都广为人知,因此这实际上并不会增加太多安全性。而是添加秘密密钥,以仅通过了解算法就无法预测的方式更改输出(只要使用了足够复杂的算法).
DES以单个密钥开头,该密钥用于生成在每个回合中应用的子密钥。这是一个64位密钥,与我们的块大小相同。假设我们的密钥是:
01001010 10101101 11101000 10100101 01110001 01010100 10101001 11111010
现在,此密钥以二进制形式输入,这是计算机处理数据时表示数据的方式。当人们处理密钥时,它们通常会以字符混合的形式出现,如下所示:
kj329nf982bc9wn1
在DES中,派生我们的圆形密钥的第一步是根据下表对密钥进行置换(将其四处移动):
在排列中,原始密钥的每一位都按表所示改组到新位置。由于(C的)左上角的单元格说 57, 置换密钥的第一个数字将是旧块中第57个位置的数字:
01001010 10101101 11101000 10100101 01110001 01010100 10101001 1个1111010
第二个单元格说 49, 这意味着我们新密钥的第二位数字将是旧代码块第49位的数字:
01001010 10101101 11101000 10100101 01110001 01010100 1个0101001 1111010
第三格说 41, 因此我们在第41位寻找数字:
01001010 10101101 11101000 10100101 01110001 01010100 10101001 1111010
到目前为止,我们的密钥由“110”.
根据表的值,其余键的排列方式相同。我们从左到右移动,直到到达一行的结尾,然后像往常一样跳到下一个。一旦 表C 完成后,我们跳到 表D 完成关键的下半场.
没有任何简单的方法可以根据初始排列表对整个块进行转置。您可以手动完成全部操作,或为此编写脚本(甚至可以幸运地在Internet的深处找到一个脚本),但我们将作弊并加以弥补:
1100010 1010010 1010101 0101010 1010000 1111001 0001011 1000111
您可能会担心我们会编造本指南中的一些数字,但现实情况是这并不重要。不再有人手动加密数据,这些都是通过程序完成的。本教程最关键的方面是您可以清楚地了解我们正在处理的概念。数字本身只是用来帮助您可视化正在发生的事情.
一些读者可能已经注意到,该表(现在是我们的密钥)只有56位而不是64位。这是因为跳过了每8位。这是来自较早技术的一种产物,当时具有奇偶校验位很重要,奇偶校验位用于验证密钥是否已正确接收。这些奇偶校验位意味着实际上,DES仅具有56位密钥的安全性。.
表C和D为我们提供了一个包含两个28位半部分的密钥。有时,两半分别称为C和D,但在本文中,我们将左右分别称为L和R。我们的左侧是:
1100010 1010010 1010101 0101010
虽然我们的权利是:
1010000 1111001 0001011 1000111
下一步是根据回合将键向左移动一个或两个空格。确切的空格数是根据下表确定的:
1个 | 1个 |
2 | 1个 |
3 | 2 |
4 | 2 |
5 | 2 |
6 | 2 |
7 | 2 |
8 | 2 |
9 | 1个 |
10 | 2 |
11 | 2 |
12 | 2 |
13 | 2 |
14 | 2 |
15 | 2 |
16 | 1个 |
因此,让我们左右两半:
L 1010010 1010010 1010101 0101010
R 1010000 1111001 0001011 1000111
并将它们都向左移动一个位置,因为第一轮的位移为 1个 根据表格(左端的数字移到右端).
第一轮子项:
L 0100101 0100101 0101010 1010101个
R 0100001 1110010 0010111 0001111个
在第二轮中,表格还显示 1个, 因此,通过将每个数字向左移动一个位置,可以再次更改此结果.
第二轮 子项:
L 1001010 1001010 1010101 0101010
R 1000011 1100100 0101110 0011110
在第三轮中,数字将向左移动两个位置,因为表格现在显示 2.
第三轮子项:
L 0101010 0101010 1010101 0101010
R 0001111 0010001 0111000 1111010
在随后的回合中,数字会根据表中指定的距离向左移动,每次移位都会应用于上一回合的结果。最后,这为我们提供了16个不同的子项,每个DES进程都有一个子项.
下一步是根据如下所示的PC2表进行的另一个排列:
到现在为止,您应该已经熟悉排列,因此我们不会深入研究该过程。如果要详细了解其工作原理,请参阅本节开头附近的说明。尽管搬迁位置不同,但过程相同.
现在,根据表对在转换过程中派生的16个键分别进行了打乱,从第14位移到了第一位,从第17位移到了第二位,从第11位移到了第三位等。..
如果仔细查看表,您会发现只有48位,而不是我们以前的56位。此过程称为压缩置换.
您还可以看到表的上半部分具有介于1到28之间的数字,而下半部分包含从29到56之间的数字。这使子键的左半部分和右半部分分开,下面用较大的空格表示在键的中间.
同样,我们将作弊并补足数字。假设整个过程为我们提供了以下子项:
第一回合: 010101 010101 101010 110100 101001 100101 101010 101010
第二轮: 011010 110101 101110 110010 010100 110010 111101 101101
第三回合: 010100 100110 110110 101010 100110 011000 101011 011001
第四轮: 011001 110101 011001 110101 000011 001011 010101 010101
第五回合: 110101 001101 010101 010101 010011 001011 010111 100101
第六轮: 010111 110101 011001 111001 101001 100101 101010 101010
第七回合: 110101 111010 101110 101010 100110 010110 111011 001110
第八回合: 011001 110101 010101 001001 010011 001011 010100 101010
第九回合: 111011 011010 011110 100010 100010 010110 110011 110010
第十回合: 011010 010101 101110 101001 010010 010110 111000 101010
第十一回合: 110101 001101 101110 101010 100101 100101 101010 001010
第十二回合: 101001 100100 101001 101010 100110 011000 101011 011001
第十三回合: 010010 010010 010101 010101 010110 110001 100101 101010
第14回合: 101001 100110 010101 011101 010001 001010 110010 111110
第十五回合: 011001 011010 011001 110101 001001 011001 100101 101101
第16回合 010010 100110 010101 010101 010001 101000 110010 111010
这种移位过程会导致在16个子密钥中的大约14个子密钥中使用初始密钥的每个比特,尽管有些比特的使用量比其他比特稍多.
初始排列
将数据划分为块并根据需要填充后,就可以开始进行DES加密过程了。我们将在稍后的阶段回到刚才创建的子项。第一步称为初始置换,其中的数据根据下表重新排列:
最初的排列过程不会使算法更加安全。这是因为它不涉及任何键的输入,并且很容易反转。该算法最初是用这种方式设计的,因为它在某些情况下使实现变得更容易.
由于我们已经介绍了几次排列,因此在此将跳过任何主要说明。回去 DES密钥时间表 部分,如果您需要有关其工作方式的更多信息.
让我们从“我们去海边”消息中获取第一个街区,该消息是我们在 块 下节 了解DES算法:
01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111
因为第一个单元格说 58, 我们可以从第58位选择数字:
01001100 01100101 01110100 00100111 01110011 00100000 01100111 01个101111
然后我们从第50位开始取数字:
01001100 01100101 01110100 00100111 01110011 00100000 01个100111 01101111
以及从第42位开始的数字:
01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111
这给了我们“110“ 至今。我们将弥补其余的数字:
11010111 01001010 10101000 10011101 01001011 10110101 10000111 10101001
初始置换完成后,数据将继续进行下一步.
分割块
数据经过初始排列后,将分为两半。我们以刚刚进行了初始排列的代码块为例:
11010111 01001010 10101000 10011101 01001011 10110101 10000111 10101001
然后将其分成两个块,一个左块(由前32位数字组成),称为 大号0:
大号0 11010111 01001010 10101000 10011101
还有一个右图块(由后32位数字组成),称为 [R0:
[R0 01001011 10110101 10000111 10101001
F功能
现在,该块已被拆分,是时候执行F功能了。在第一轮中,它将仅应用于块的右半部分,而左半部分则保留到稍后。右侧作为F功能的一部分,经过以下四个步骤:
- 扩展排列(图中的E)
- 按键混合(图中的⊕)
- 替换(图中的每个S1,S2等)
- 排列(图中的P)
扩展排列
扩展排列完成了三件事。最重要的是,它允许输入数据的单个位影响其他两个位的输出,从而引起雪崩效应。它还使右半部分为48位,因此其大小与下一步的子项相同。扩展置换的另一个作用是使输出比输入更长。这允许它在替换操作中被压缩.
这些位将根据下表重新排列。该表中的某些单个位是两次,这就是该块如何从32位扩展到48位:
由于第一个单元格为32,所以我们在右边的代码块中从第32个位置中选择数字,就像在上面列出的其他排列示例中一样:
[R0 01001011 10110101 10000111 10101001个
然后,我们从第一个位置到第二个位置,依此类推,一直向上直到到达块的右下角。由于有一个 1个 在此单元格中,最后一位数字也将是出现在我们区块第一个位置的数字.
假设扩展排列为我们提供了一个新的48位块:
101110 100110 100100 000000 001100 001110 101101 011110
按键混音
将代码块扩展到48位后,就该应用第一轮的子密钥了,该子密钥是我们在 DES密钥时间表 以上部分。子密钥使用XOR密码修改该块.
XOR密码是遵循简单过程的加法,特别是与我们已经讨论过的其他元素相比时.
在XOR密码中:
0 + 0 = 0
1 + 0 = 1
1 +1 = 0
因此,假设您必须对以下两个数字进行二进制异或运算:
1101
0101
每个数字将添加到它下面的数字。根据上面显示的三个规则,得出以下结果:
1000
为了完成密钥混合步骤,我们将代码块的右侧扩展到48位,并使用了第一轮密钥。然后,我们执行XOR加法:
块: 101110 100110 100100 000000 001100 001110 101101 011110
第一轮钥匙: 010101 010101 101010 110100 101001 100101 101010 101010
XOR结果: 111011 110011 001110 110100 100101 101011 000111 110100
XOR操作的结果然后传递到下一轮.
代换
替代会使数据混乱。通常使用查找表(也称为替换框或S框)来完成。 DES使用八个单独的表或S-box,每6位数据使用一个不同的表或S-box。下表显示了DES的八个S盒:
八个单独的S盒用于将每个6位输入转换为4位输出。该过程的第一步是获取6位段开头和结尾的数字,然后将该二进制值转换为十进制.
让我们看一下在上一步中完成异或的数据:
111011 110011 001110 110100 100101 101011 000111 110100
我们将查看第一个6位段,以向您展示替换过程的工作方式:
1个11011个
由于第一个数字和最后一个数字都是 1个, 这给了我们一个价值 11. 然后我们转换 11 从二进制到十进制,这给了我们 3. 这些只是等价的值,用不同的方式编写。将其视为将计算机语言转换为人类语言。如果需要,您可以使用在线计算器自己查看转换.
然后,我们取第一个6位段的四个中间数字:
1个11011个
并将它们从二进制转换为十进制. 1101 转换为13.
现在,我们采用这两个数字并在 小号1个 表:
我们的第一个电话, 3, 告诉我们看第三行,而第二个数字, 13 告诉我们看第13栏。第13列第三行的值是 0.
现在我们已经在表中查找了数字,我们将其转换回四位数的二进制数。零通常以二进制形式写为0,但是 0000 是一样的,这是最适合我们目的的格式.
完成此过程后,S-box将转换我们的第一个6位数据段(111011)转换为其他4位值(0000)。似乎令人费解,但是这种技术有助于进一步模糊密文和链接到的明文之间的关系。.
然后,数据的下一个6位部分将经过相同的过程,但是它将使用上面显示的S2框。第三部分使用S3表,依此类推,直到最后一部分通过S8表进行替换.
同样,我们将欺骗其余的价值。假设替换框为我们提供了以下结果:
0000 1010 1100 1001 0100 1001 0111 0001
数据的每个部分都经过其S盒后,便进入下一步.
排列
F函数的最后阶段是另一个置换,使用下表:
到目前为止,您应该对置换如何将数字从旧块移动到新块中的其他位置有了一个不错的了解,因此我们不再赘述.
假设此排列采用了我们之前的结果:
0000 1010 1100 1001 0100 1001 0111 0001
并给我们输出:
0101 0110 1001 0101 0010 0100 0101 0010
既然排列已经完成,那么本轮我们就完成了F函数的四个步骤。用数学符号表示,该值称为 (0, ķ1个). 这意味着结果是函数(F)(R0)的初始右侧和第一轮的子项(ķ1个).
与左块进行异或
还记得我们在开始F函数步骤之前如何将块分割成两半吗?我们将块(L0)的左侧放在一边,而右侧则进行了这些处理。好吧,现在是L0恢复行动的时候了.
我们采用刚刚处理过的右侧 (0, ķ1个) 并将其添加到旧的左侧(大号0)使用XOR密码。这给了我们 [R1个, 我们第一轮的结果:
(0, ķ1个): 0101 0110 1001 0101 0010 0100 0101 0010
大号0: 1101 0111 0100 1010 1010 1000 1001 1101
XOR结果(R1个): 1000 0001 1101 1111 1000 1100 1100 1111
请参阅 按键混音 如果您需要提醒XOR密码的工作原理,请参见上文.
还有15轮…
如果您到此为止,那么DES似乎是一个艰巨的过程。但这还没有完成。数据经过F函数的四个步骤,然后进行XOR,再进行15次,总共16轮.
在第二轮中,我们将块的右侧(R0)保留为原始的原始形式,并使其变为新的左侧(L1)。同时,我们获取第一轮结果并将其通过F函数发送。一切都与上次相同,但是这次使用第二回合的子项。假设这个过程给我们带来了以下结果:
(1个, ķ2): 1011 0111 1000 1011 1001 1101 1001 1110
然后,我们将结果与L1(实际上是R0)进行XOR(我们在 分割块 部分)。这给了我们第二轮的结果,R2:
(1个, ķ2): 1011 0111 1000 1011 1001 1101 1001 1110
大号1个: 0100 1011 1011 0101 1000 0111 1010 1001
[R2: 1111 1100 0011 1110 0001 1010 0011 0111
此步骤似乎有些混乱,但是在Feistel方案下,旧的右侧变为新的左侧,而运算结果变为新的右侧.
下图使您直观地看到了正在发生的事情。 IP代表初始排列,F是整个F函数的替代物,⊕表示XOR函数,箭头表示该块在左右之间移动的每一侧:
每个步骤的确切公式为:
大号ñ = [Rn-1
[Rñ = 大号n-1 + F([Rn-1,ķñ)
哪里:
L =块的左半部分(从最初分割块时的L0开始)
R =块的右半部分(从最初分割块时的R0开始)
n =轮数(从0开始,最初是在块被分割时)
f = F函数
Kn =第n轮的子项
根据公式和图表,在第三轮中,R1变为新的左半部分(L2),而R2通过F函数进行处理。假设它给我们带来以下结果:
(2, ķ3) 1001 0111 0000 1011 1101 0111 1011 1011
然后,我们使用XOR密码计算第三轮(R3)的结果,就像之前一样:
(2, ķ3): 1011 0111 1000 1011 1001 1101 1001 1110
大号2: 0100 1011 1011 0101 1000 0111 1010 1001
[R3: 1111 1100 0011 1110 0001 1010 0011 0111
相同的过程一直持续到第15轮,切换块并在每个轮次中使用下一个子键。在第16个也是最后一个回合中,块不会切换。相反,它们被组合形成一个64位块。在最后阶段避免交换块,该算法可用于加密和解密.
假设最后一轮的结果是:
1010 0101 0100 1011 1001 0001 0100 1000 0101 1010 1101 0001 1101 1001 1001 1101
最终排列
此排列是初始排列的逆,并且再次,它没有添加任何额外的安全性值。它根据下表重新排列数据:
该排列表的工作方式与之前的相同。由于这是加密过程的最后一步,因此结果将是“我们走吧 到海滩”。假设加密的块是:
0100 1001 0011 0010 1001 0101 0111 0100 1011 1010 0111 0101 0111 1010 0101 0101
现在,如果您想获得“让我们一起去海滩”的真实密文,则可以跳过整个学习过程,而直接使用在线DES加密工具。如果我们在关键字旁边输入句子(例如kj329nf982bc9wn1),则该工具会为我们提供以下加密文本:
U2FsdGVkX19Pienyu3w3q4zCd2IPKEPUWBzu3AeyVu2H3FeimZe6hA
如果需要,可以将密钥和密文转换为二进制,然后比较 第一块的密文 符合概述的整个过程.
DES解密
在DES中,解密过程非常简单。该算法的Feistel结构使其可以轻松逆转。解密信息的过程几乎完全相同。唯一的区别是子键是反向应用的。这是一种有效的设置,因为这意味着可以在加密和解密过程中使用相同的软件和硬件.
要解密数据,首先要进行初始排列,然后拆分该块,右半部分通过F函数。不同之处在于,在第一轮解密中,将应用第16个子密钥。其他所有操作均正常进行。 F函数完成后,将与块的左侧进行异或.
切换块,并且结果进行第二轮相同的过程,唯一的例外是应用了第15个子项。使用第一个子项时,此过程一直持续到第16轮。.
就像在加密过程中一样,在最后阶段不交换块,然后对数据进行最后的排列。这样就完成了解密过程,从而产生了消息的原始明文.
3DES
随着DES的安全性弱点变得越来越明显,提出了3DES作为扩展其密钥大小的方法,而无需构建全新的算法。 3DES不会使用DES中的单个密钥,而是使用三个56位密钥运行DES算法三次。
- 密钥一用来 加密 明文.
- 密钥二用于 解密 用密钥一加密的文本.
- 密钥三用于 加密 密钥三解密的文本.
在每个阶段,都遵循上述的完整DES过程.
现在,您可能想知道“第二步如何应用解密来增强安全性?”
答案是它使用单独的密钥。如果在第二步中还使用了第一个密钥来解密数据,那么数据将立即返回到其开始位置.
但是,由于它使用了不同的密钥,因此解密过程实际上并不能用来解密数据。在逻辑上看似不正确,但使用单独的密钥进行解密只会使数据更加混乱.
一旦第二个密钥“解密”了数据,则应用第三个密钥再次对其进行加密。结果是3DES密文.
3DES的结构是这样的,因为它允许实现与单键DES,两个键DES和三个键DES兼容(在下一节中介绍)。如果在所有三个步骤中都使用了加密,则将无法使用.
3DES键控选项
从技术上讲,可以使用三种不同的关键配置来实现3DES。尽管如此,第二和第三种选择是不安全的,永远不应该执行.
- 键控选项一 –此选项使用三个独立的密钥,是最安全的.
- 键控选项二 –在此配置中,第一和第三键相同.
- 键控选项三 –这使用三个相同的键。当使用相同的密钥时,第二阶段的解密过程会取消第一个加密,仅保留最终的加密来更改数据。这使得结果 与普通DES相同.
3DES流程:键入选项一
坦白地说,整个3DES流程会使您旋转,特别是如果您不熟悉加密技术。为帮助其深入研究,以下是3DES算法的整个加密方案的简要摘要:
明文首先进入3DES算法 用密钥一加密 在以下步骤中:
-
-
密钥计划– 16个子密钥是从密钥1派生的
-
初始排列
-
块分为左右两半
-
-
-
-
右半部分通过F功能发送
-
扩展排列
-
与子项进行异或运算
-
代换
-
排列
-
-
将F函数的结果与左侧进行XOR
-
使旧的右侧为新的左侧,结果为新的右侧
重复上述步骤14次
-
-
-
-
-
右半部分通过F功能发送
-
扩展排列
-
与第16轮的子项异或
-
代换
-
排列
-
-
将F函数的结果与左侧进行XOR
-
结合块的左侧和右侧
-
-
-
-
最终排列
-
取用密钥1加密的文本,然后通过 与“解密”过程 键 二:
-
-
密钥计划– 16个子密钥是从密钥2派生的
-
初始排列
-
块分为左右两半
-
-
-
-
右半部分通过F功能发送
-
扩展排列
-
与子密钥进行异或运算(从第16个子密钥开始解密)
-
代换
-
排列
-
-
将F函数的结果与左侧进行XOR
-
使旧的右侧为新的左侧,结果为新的右侧
重复上述步骤14次
-
-
-
-
-
右半部分通过F功能发送
-
扩展排列
-
与子项进行第一轮异或
-
代换
-
排列
-
-
将F函数的结果与左侧进行XOR
- 结合块的左侧和右侧
-
- 最终排列
-
取用密钥二“解密”的数据,然后通过 恩加密过程 键 三:
-
-
密钥计划– 16个子密钥是从密钥3派生的
-
初始排列
-
块分为左右两半
-
-
-
-
右半部分通过F功能发送
-
扩展排列
-
与子项进行异或运算
-
代换
-
排列
-
-
将F函数的结果与左侧进行XOR
-
使旧的右侧为新的左侧,结果为新的右侧
重复上述步骤14次
-
-
-
-
-
右半部分通过F功能发送
-
扩展排列
-
与第16轮的子项异或
-
代换
-
排列
-
-
将F函数的结果与左侧进行XOR
-
结合块的左侧和右侧
-
-
-
-
最终排列
-
结果是3DES密文.
3DES的安全性
3DES的安全性取决于所使用的密钥选项。密钥选项一涉及三个不同的56位密钥,因此密钥总长度为168位。中间相遇攻击大大降低了有效长度,从而使实际安全性降低到112位.
中间相遇攻击对于多次重复相同算法的加密方案很有用。该技术存储每个加密阶段的立即值,然后使用此信息从根本上改善暴力破解算法所需的时间.
选项2和3的密钥明显较小,并且容易受到已知明文和选择明文攻击以及其他攻击.
当攻击者可以访问消息的明文和密文时,就可以进行明文攻击。如果算法易受这些攻击的影响,则攻击者可以使用此信息来推断密钥,从而使他们可以破解已被同一密钥加密的所有其他数据。.
选择明文攻击是类似的,但它涉及攻击者通过将密文与任意明文进行比较来发现密钥。.
由于存在这些漏洞以及所涉及的总体较小的密钥大小,因此密钥选项二和密钥三是不安全的,因此不应实施.
3DES安全吗?
由于3DES将在未来几年内弃用,因此最好使用其他算法。尽管对于许多应用程序来说,密钥选择选项一仍然被认为是安全的,但并没有很多充分的理由说明为什么应该使用它来代替诸如AES之类的替代方法。.
尽管3DES作为DES的后续技术在加密技术中占有重要地位,但它的辉煌岁月已经过去,现在该继续前进了。如果您想确保将来的系统安全,则应该使用更新的算法.
有关: 常见的加密类型说明
X计划 由DoD授权 CC0
这篇文章介绍了3DES算法,它是从原始数据加密标准(DES)派生的加密密码。虽然由于更安全的算法的兴起,3DES已经不再受到青睐,但在某些情况下仍会实施。本文详细介绍了DES流程的每个步骤,然后介绍了如何在3DES中修改DES以使其更安全。它还涉及各种安全问题以及是否应使用该算法。虽然3DES将于2023年弃用,但了解3DES是什么以及它如何工作仍然很重要。