多次使用相同的加密算法会有所不同吗?

信息安全 加密
2021-08-28 16:18:26

在 TrueCrypt 中,我注意到使用多种加密算法(即 AES-Twofish-Serpent)加密卷的选项。多次使用相同的算法加密某些东西会有用吗?例如 AES-AES-AES。我猜如果发现算法中的缺陷或后门,这种防御将毫无用处,但它会使蛮力攻击更难吗?

编辑:应用多次迭代有何不同?

4个回答

是的,它有所作为。它使您的系统更具风险。

在回答这个问题时,我将假设您正在使用合理的操作模式(例如 CBC 或 GCM)和独立的密钥来实现 AES-AES 级联。

您似乎提出的好处是您可以通过使用多层来防止暴力攻击。问题是,如果对手有任何机会破解 128 位密钥,那么必须破解其中三个对他们来说几乎为零。您在谈论 2 128和 2 129.58操作之间的区别。考虑到计算的限制使破解一个 128 位密钥所涉及的成本大约是人类所产生的所有能量的 1/100 左右,这点额外的成本几乎无关紧要。

AES-AES 级联带来的唯一好处是,针对分组密码的许多类别的攻击变得更加困难。例如,选择明文攻击依赖于让系统加密攻击者选择的明文,并且通常涉及比较结果密文。但是,使用 AES-AES 级联,您不可能选择第二个密码的输入。

不过有一个问题。记得当我说我会假设你做出了明智的决定?这就是事情开始分崩离析的地方。通过增加系统的复杂性,您增加了必须做出的安全决策的数量,并增加了安全故障和错误的可能性。您是对 CBC 中的每个块进程执行两次连续的 AES 块转换,还是使用 AES-CBC 加密所有内容然后再次加密?您是否使用过两个独立的 IV?您是否独立选择 IV?您是否独立选择键?您如何申请和检查真实性?你将如何安全地交换、存储或派生协议中的密钥和 IV?您的所有实现都对侧信道攻击(例如 DPA 和定时攻击)具有很强的抵抗力吗?有很多问题要解决,还有很多潜在的失败领域。

最后,我想提醒您级联的目的:确保一个密码中的弱点不会导致数据机密性的丢失。通过正确实现 AES-Serpent 的级联,您可以确保在数据受到破坏之前需要破坏 AES 和 Serpent。

两次使用相同的算法不会提供显着的额外安全性。您将很容易受到中间攻击。使用相同的算法 3 次确实可以为您提供大约相当于将密钥大小增加一倍的额外安全性。您可以对三个加密中的第一个和最后一个使用相同的密钥。以这种方式仅使用两个密钥可能与使用三个不同的密钥一样安全。

这种具有 2 或 3 个密钥的方法已与 DES 算法一起使用,称为三重 DES

一种更简单且更快的方法是在应用密码之前和之后应用带有常数的 XOR。这种方法已与 DES 一起使用,称为DES-X

泛化可以在与密钥的 XOR 和与密钥的加密之间交替。以 XOR 开始和结束。通过适当地设置密钥,这种通用方法可以减少到三重 DES 或 DES-X。但这种笼统的做法并没有太多的分析。

在 AES 的情况下,应用上述任何方法都等同于使用具有不同密钥调度的 AES。对于每个密码来说,这通常都不是真的,它特定于 AES 的结构。

这意味着,如果 AES 的密钥大小太小,或者 AES 的标准化密钥计划存在一些弱点,上述任何方法实际上都会有所帮助。换句话说,使用不同的密钥应用 AES-128 三次应该提供与 AES-256 一样多的安全性。如果 AES 密钥计划没有弱点。

然而,AES 密钥计划中存在已知的弱点,特别是 AES-256 已被证明比您对 256 位密钥的预期要弱得多。因此,据我所知,使用不同的密钥三次应用 AES-128 比 AES-256 更安全。

简短的回答:

从实际的角度来看,暴力破解最初使用 AES 加密的东西的 128 位密钥是不可能的。从技术上讲,这是可能的,但需要十亿年(1.02 x 10^18)才能计算、测试和耗尽密钥空间,这就是为什么它实际上是不可能的。按照这个逻辑,加密 3 次是不可能的^3 破解(也就是仍然不可能)。虽然通过 3 次加密不会提高被加密数据的机密性,但与仅通过一次加密所需的计算资源相比,额外的 2 次加密通道将占用 200% 的计算资源。

细节:

在暴力破解方面,多次使用相同的加密算法和密钥对数据进行加密不会改变攻击的结果。也就是说,如果攻击将成功地针对使用算法/密钥仅加密一次的数据,则相同的攻击将成功地用于针对使用相同算法/密钥多次加密的数据。这主要是由于密码学组件屈服于蛮力(提示:不是算法)。

密码学有两个基本部分容易受到攻击——算法和密钥。这两个部分中的每一个都容易受到不同风险的影响。算法可能容易受到后门和数学缺陷的影响,而这些都不会直接受到暴力攻击的威胁。在使用 128 位密钥的 AES 中,这两者都没有被发现,尽管该算法是 100% 对世界开源的。(注意:使用 192 位和 256 位密钥时,AES 算法存在一个缺陷,最终使它们比使用 128 位密钥时更弱 - 不过不要担心这一点,因为 128 在数学上足够强大(更多关于这在下面))。对算法的攻击不多,让我们看看另一半。

与算法不同,加密密钥非常容易受到暴力攻击,但只有当加密密钥是从非随机数据生成时(即用户输入加密“密码”),才存在这种敏感性。在这种情况下,加密算法的强度无法最大化,暴力破解成为可能。对于从随机数据构建的最大大小的 128 位密钥,蛮力攻击不起作用。实际上,它们确实有效,但是即使使用分布式处理和摩尔定律计算,可能的密钥空间在我们有生之年也无法计算。针对 128 位密钥的蛮力攻击是从可能的 340 undecillion 密钥空间(又名 3.4 × 10^38)中寻找 1 个密钥。从数学上讲,我们有生之年不可能从那个空间暴力破解一把钥匙,

尽管如此,如果用于生成密钥的密码很弱(例如“P@ssW0rd1”等...),则密钥空间没有被最大化,并且可能存在暴力破解。故事的寓意:随机化加密密钥并充分利用密钥空间。这消除了除了算法缺陷和后门之外的所有内容,对于 AES,我们不需要担心这两个问题,因为整个算法在十多年内都可以被全世界看到。只要保管好钥匙,你也很安全。

我同意多重加密的好处很小,正确执行有几个潜在的陷阱(不回退到单一加密的安全性),并且执行额外加密需要 CPU 成本。但是,我不认为这是一种像发明自己的密码那样的安全反模式。

是的,每当您向系统添加复杂性时,您可能会无意中让自己面临侧信道攻击。当然,执行此操作的应用程序代码不必笨重或复杂。

在我看来,使用 E AES (K 1 , E AES (K 2 , E AES (K 3 , P))),因为与使用 E AES (K 1 , P)作为您的分组密码。

从表面上看,您只是将使用 128 位密钥的分组密码更改为使用 384 位密钥的分组密码,因此从表面上看,您可以声称使用新方案更加安全。

当然有一些警告:

  1. 您应该小心,它不可能按顺序破坏您的密钥。如果可以验证您是否破解了第一个密钥,那么您将拥有 129 位的安全性,而不是 384 位密钥。您应该将 E(K 1 , E(K 2 , (E(K 3 ,P block ))) 视为您的分组密码,并在此新密码之上应用您的分组密码加密模式(例如,带有填充的 CBC)。错误是使用 E CBC (K 1 , E CBC (K 2 , (E CBC (K 3 ,P message ))),其中 E AES-CBC根据 PKCS7 填充方案根据需要添加填充,并对整个消息进行操作。请注意,当明文是块长度的精确倍数时, PKCS-7 填充方案会添加完整的填充块(AES 为 128 位 = 16 字节)。因此,对于外部的两个 CBC 加密步骤,您将在加密之前将 128 位块附加到消息的末尾。因此,您可以通过尝试使用所有 2 128个密钥加密填充块来求解 K 1和 K 2 ,直到在分组密码模式中找到与最后两个块匹配的两个密钥。

  2. 如果攻击者知道或可以猜出与密文块对应的明文块,则存在中间相遇攻击,需要 O(2 128 ) 空间和 O(2 256 ) 时间。中间相遇攻击就是为什么三重 DES 是三轮加密,而不仅仅是双 DES。攻击者通常有可能合理地猜测一个块,因此更准确地说,在实践中这种三重 AES 方案只能提供 256 位安全性。

  3. 说 256 位加密(暴力破解时间为 2 256)比 128 位加密(暴力破解时间 2 128 )更安全并不是真的两者都远远超出了攻击者的范围。2 128 = 340 282 366 920 938 463 463 374 607 431 768 211 456(3400亿亿)。这是地球上 10 亿人,每人操作 100 万台计算机,每台计算机每秒尝试 10 亿个密钥,持续一百万年,然后有 10% 的机会暴力破解密钥。因此,暴力破解在 2 128处是非常不可能的——因此,除非我们的计算能力有重大进步,否则对此类攻击的讨论与实际目的无关。必须使用其他攻击,例如键盘记录器、从 RAM 中窃取密钥、5 美元扳手,分组密码中的缺陷。因此,即使 2 256比 2 128大得多(实际上是 2 128倍) ,但它在很大程度上是无关紧要的。有点像比较你前往半人马座阿尔法星(4.3 光年远)的能力和你前往仙女座星系(250万光年)的能力光年之外)。(作为参考,月球距离我们只有 0.000 000 04 光年。)是的,仙女座星系更远,但目前尚不清楚在实践中旅行是否真的更难,因为两者目前都是不可能的。当然,看起来如果人类曾经前往其他恒星,我们可能会首先前往半人马座阿尔法星,但不知道我们是否会前往其他恒星,如果是这样,它需要一些令人难以置信的突破才能实现可以很容易地前往其他星系,使这两项任务触手可及。