多个加密算法的组合

4

我在考虑以下问题:我有一些数据流,希望尽可能地保护它的安全性 -- 是否有意义使用AES加上一些IV,然后再用Blowfish加上一些IV,最后再次使用AES加上一些IV?

加密/解密过程将被隐藏(甚至受到调试保护),因此很难猜测使用了哪种加密方法和哪些IVs(不过,我知道这个加密链的强度不能依赖于这个事实,因为每种防止调试的方法都是可破解的)。

我有足够的计算能力(数据量并不大),所以问题只是是否值得实现。例如,TripleDES的工作方式非常类似,使用三个IV并采用加密/解密/加密的方案,因此这可能并不是完全无意义的。另一个问题是当我对第1部分和第3部分使用相同的IV甚至对所有三个部分使用相同的IV时,我降低了多少安全性?

我欢迎任何关于这个主题的提示。

14个回答

11

我不确定这种特定的组合,但是通常混合使用这些东西都是一个坏主意,除非这种特定的组合已经被广泛研究过。可能数学变换实际上会相互抵消,最终结果会更容易被黑客攻击。单次AES或Blowfish足以满足需求。

更新:来自下面我的评论...

以TripleDES为例:想想全球最好的密码学家花了多少时间和精力来创建这个组合(请注意,DoubleDES存在漏洞),他们所能做到的最好的安全性只有112位,尽管密钥长度为192位。

更新2:我必须同意Diomidis的观点,即AES极不可能成为您系统的弱点。您系统的几乎所有其他方面都比AES更容易受到攻击。

更新3:根据您使用流的方式,您可能只需要使用TLS(SSL的后继)。我建议阅读Practical Cryptography以获取更多详细信息-它在解决您需要解决的许多问题方面做得很好。其中包括讨论stream ciphers,这可能比AES更合适(因为AES是block cipher,而您特别提到您有要加密的数据流)。


1
除非应用的算法组合是特别为一起工作而设计的(例如Triple DES的多重转换),否则可能会削弱安全性。重复使用相同的密钥尤其可疑,因为可能会揭示出有助于暴露密钥的模式。 - Cowan
您实际上不能使用不同的IV和密钥使它变得“更弱” - 如果这样做,那将是对单个密码的有效攻击。但这可能并没有显著增强其安全性。 - Nick Johnson
我强烈赞同“使用SSL”的更新。加密技术充满了陷阱。SSL专家处理这些问题,因此您不必担心。 - slim
@Arachnid是正确的:用第二个密码加密密文不能使其更弱。问题是:你为什么想要这样做?或者说:多少安全性才足够? - AJ.
你可以根据实现方式将块密码变成流密码,参见http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation。 - Arc the daft
关于将块密码转换为流密码的问题,.NET 包含了一个 CryptoStream 类,可以针对 AES 和其他块密码实现这一功能。 - Cheeso

4
我认为在第一个加密算法之上应用一个非常不同的加密算法,你不会有任何损失。但是,如果您在第一个算法之上再次运行同样的算法,即使您在中间运行了另一个算法,也要谨慎。两次运行之间的交互可能会打开漏洞。
话虽如此,我认为您在加密部分上纠结太多了。大多数数据泄露并不是通过破解像AES这样的行业标准加密算法实现的,而是通过系统中的其他弱点实现的。我建议更多时间用于查看密钥管理、未加密数据的处理、算法实现中的弱点(可能会泄露数据或密钥)和更广泛的系统问题,例如,您如何处理数据备份。

4
一个黑客总是会攻击链中最薄弱的环节,所以加强一个已经很强的环节帮助不大。128位密钥长度下破解AES加密已经不可能,Blowfish同样如此。选择更大的密钥长度可以让其更难被破解,但实际上到现在为止(也许未来10或20年内都不会),128位始终没有被破解。因此,这个加密方法很可能不是最薄弱的环节,那么为什么还要加强它呢?它已经足够强了。
想想其他可能是最薄弱的环节是什么?IV(Initialization Vector,初始化向量)吗?实际上我不会花太多时间去选择一个伟大的IV或隐藏它。最薄弱的密钥通常是加密密钥。例如,如果您正在对存储在磁盘上的数据进行加密,但是这些数据需要被您的应用程序读取,则您的应用程序需要知道IV和加密密钥,因此二者都需要包含在二进制文件中。这实际上是最薄弱的环节。即使您采用20种加密方法并将它们链接在您的数据上,所有20个加密方法的IV和加密密钥都需要包含在二进制文件中,如果黑客能够提取它们,则使用20种方法而不是1种加密方法提供了零额外安全性。
由于我仍然不知道整个过程是什么(谁加密数据,谁解密数据,数据存储在哪里,如何传输数据,谁需要知道加密密钥等),很难说最薄弱的环节到底是什么,但我怀疑AES或Blowfish加密本身并不是您最薄弱的环节。

2
优秀的密码学家从不说“不可能”。也许是“在当前的密码分析技术下计算上不可行的”;) - Nick Johnson
我们无法确定一个AES 128位加密是否可以被暴力破解。我们假设它可以被破解,我们可以通过数学证明它可以被破解,但是只有在它被破解的那一天我们才能确切知道;-)“我只是证明它是正确的,而没有尝试过。”- Donald Knuth - Mecki
嗯...是的,我们可以确定使用AES-128加密可以被暴力破解。列举所有可能的密钥(这就是“暴力破解”的意思),其中一个将会解密。这很容易证明。当然,实际上执行这个过程是非常困难的,但这是另一个问题。 - JUST MY correct OPINION
@ttmrichter:另一方面,如果AES被比暴力攻击更容易的方法破解,我怀疑更长的密钥也无法保护您。如果有一种简单的方法可以破解AES 128,我相信这种方法也可以应用于AES 256。 - Mecki

1
你想保护数据免受谁的攻击?是你的兄弟、竞争者、政府还是外星人?
针对不同的威胁,你需要在合理的时间和预算范围内,考虑将数据保护到最高安全性水平。

1

我不会依赖于混淆你正在使用的算法。这种“安全性靠混淆”的方法长期来看是行不通的。反编译代码是揭示你所使用的加密方式的一种方法,但通常人们不会保守这样的秘密太久。这就是为什么我们首先要使用私钥/公钥加密的原因。


0
此外,不要浪费时间混淆算法 - 应用基尔霍夫原理,并记住,AES本身被用于(并被认为是)许多需要“安全”的数据的地方。

0

Damien:你说得对,我应该写得更清楚一些。我在谈论竞争对手,这是商业用途。因此有充足的预算可用,但我不想在不确定自己为什么这样做的情况下实施它 :)

Hank:是的,这也是我担心的。这个想法最支持的来源是提到了TripleDES。另一方面,当我使用一个算法加密一些数据,然后应用另一个算法时,如果整个加密的“力量”比使用独立算法要小,那将会非常奇怪。但这并不意味着它不能相等...这就是为什么我要求一些提示的原因,这不是我的知识领域...


0

Diomidis:这基本上是我的观点,但我的同事试图说服我它真的可以“增强”安全性。我的建议是使用更强的加密密钥,而不是毫无思考或深入了解自己在做什么的算法。


那绝对是正确的方法。以TripleDES为例:想想世界上最好的密码学家花费了多少时间和精力来创建这个组合(请注意,DoubleDES存在漏洞),而他们所能做到的最好的安全性只有112位,尽管密钥长度为192位。 - Hank Gay

0

@Miro Kropacek - 你的同事试图通过巫术来增加安全性。相反,尝试构建一些简单的东西,你可以分析其中的缺陷 - 比如只使用AES。

我猜是他(她?)建议通过防止调试来增强安全性...


0

如果你使用不同的IV和密钥进行多次加密,实际上并不能使事情变得更不安全,但是安全性的提升可能比你预期的要少得多:以2DES为例,中间人攻击意味着破解难度只增加了两倍,而不是平方级别的难度。

总的来说,如果需要更高的安全性,最好还是坚持使用单一的知名算法,并增加密钥长度。将加密系统的组合留给专家(我自己也不是其中之一)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接