加倍或循环加密算法

信息安全 密码学 加密
2021-08-29 23:36:21

我偶尔会阅读通过加倍加密算法(使用一种算法加密消息一次,然后使用不同的加密算法再次加密密文)或定期循环浏览加密算法列表来增强安全性的建议。

我怀疑这并不比一个单一的、精心选择的和实施良好的加密算法更安全,但我不确定我是否可以论证我的观点。

加倍或循环加密算法会提高安全性吗?为什么或者为什么不?

4个回答

级联或循环加密算法增加了实现的复杂性,这对安全性非常不利。算法内在安全性(前提是您使用已发布的、经过充分分析的算法,而不是自制设计)总是远远大于实现安全性:大多数实现可能会通过执行时间、缓存访问或不够严格的行为泄露各种元素,包括密钥位当遇到不正确的数据时。

如果你已经涵盖了所有的实现风险,那么就该担心算法本身了;那时,您是一名训练有素的密码学家,并且您比依赖非理性技巧(例如级联或加倍)更清楚。基本上,算法加倍或循环保证的一件事是,提出建议的人在加密实现领域并不过分胜任,因此您不想使用他的代码。

从历史上看,级联或循环是应对弱加密算法的方法;这是关于假设任何算法都会被破坏,并且您尝试进行损坏控制。这在某种程度上否定了自 70 年代以来对密码学的所有研究。在实践中,安全问题在于如何使用算法(例如,使用分组密码的链接模式)、如何实现算法,以及最重要的是如何管理密钥(创建、存储、销毁......)。为了让算法本身成为弱点,你必须付出巨大的努力(例如设计自己的算法,就像 DVD 联盟所做的那样)。例如,当现代游戏机被黑客入侵时,算法本身(AES、ECDSA...)并没有被破坏,而是被规避(对于 ECDSA 和 Sony/PS3,这是一个彻头彻尾的实现错误)。

想要的是具有算法敏捷性:您定义协议,以便使用的算法是可配置的参数。因此,如果一个给定的算法被证明是不稳定的(这根本不会经常发生),那么你可以切换到另一个。

我认为,在使用具有固定大小密钥的密码时,链接加密轮次是增加有效密钥长度的合法方式。将较长的钥匙分成几部分,并在不同的回合中使用这些部分。

这就是三重DES存在的原因。56 位在 1977 年似乎足够了,但现在受到现代硬件的暴力攻击。

级联加密算法确实使密文更加安全,前提是两种加密算法完全不同,并且都经过广泛的同行评审。我的论点如下:

  1. 假设加密算法#1 是真正安全的加密算法,用它加密明文将产生伪随机密文。在这个时间点上,密文无法在任何合理的时间内被破解。

  2. 假设加密算法#2 也使用加密算法#2 安全地加密了先前操作的密文,它将产生一个在任何合理时间内都无法破解的伪随机密文。

  3. 如果加密算法#1 或加密算法#2 在其中发现了弱点,那么在未来的任何时候,您的明文仍然会受到另一个加密的保护。

  4. 有人可能会争辩说,即使加密算法 #1 或加密算法 #2 在未来的任何时候都发现了它们的弱点,你的明文可能仍然是安全的,因为 [原文如此,第 1-3 点?]。

事实是,有些人不希望您或任何人级联加密算法,因为这可能使它们无法破解。想象一下有人疯狂地级联加密算法,例如:

AES -> Blowfish -> DES -> Serpent -> Twofish -> Triple DES

谁能破解这个加密?

当然,还要考虑其他问题,例如侧信道攻击和实施弱点,因为您可能知道安全性是一个巨大的话题。

每天轮换一个简单的密码,在常规加密前后排列 2048 位块,并将它们存储在与加密数据不同的位置。

仅这一点就很烦人,因为所有人都试图破解您的硬化密码。