2008-09-23 60 views
4

我正在考虑以下内容:我有我想保护尽可能安全的一些数据流 - 它任何意义,运用假设AES一些IV,然后河豚与一些IV,最后再一次与一些IV的AES?加密/解密过程将被隐藏(甚至可以防止调试),因此不容易猜测使用哪种加密方法和使用什么IV(然而,我意识到这个加密链的强大功能可以不要依赖于这个事实,因为每一次调试的保护在一段时间后都是可破坏的)。组合多个加密算法的

我对这个电脑的电源(数据的量并不大),所以这个问题不仅是它是否值得实施。例如,TripleDES工作非常相似,使用三个IV和加密/解密/加密方案,因此它可能不是完全废话。另一个问题是,当我在第一部分和第三部分中使用相同的IV,或者在所有三部分使用相同的IV时,我会降低安全性多少?

我欢迎这个问题

回答

11

我不知道这个特定的组合,但混合这样的东西通常是一个糟糕的主意,除非这个特定的组合已经被广泛研究。数学变换实际上可能会相互抵消,最终结果将更容易被破解。 AES或Blowfish的一次通过应该是绰绰有余的。

UPDATE:从我下面的评论...

使用的TripleDES为例:认为多少时间和精力从世界上最好的密码学家走进创建组合(注意DoubleDES有一个漏洞),并且最好尽管有192位密钥,他们仍然可以做到112位安全。

更新2:我必须同意Diomidis的AES是极其不太可能成为您系统中的薄弱环节。几乎系统的其他方面都比AES更容易受到攻击。

更新3:根据您与流做什么,你可能希望只使用TLS(后继者SSL)。我建议Practical Cryptography更多细节,它确实解决了很多你需要解决相关问题的一个不错的工作。除其他外,它讨论了stream ciphers,它可能比AES更合适(因为AES是block cipher,并且您特别提到您有数据流进行加密)。

+1

+1。除非正在使用的算法组合专门用于协同工作(对三重DES进行多重转换),那么您可能会削弱安全性。 使用相同的密钥>一次会特别令人怀疑,因为可能存在显示哪些模式有助于揭示密钥。 – Cowan 2008-09-23 10:23:35

+0

实际上,你不能使用不同的IV和密钥_weaker_ - 如果是的话,那将是对单个密码的有效攻击。但它可能不会使其显着更强。 – 2008-09-23 10:34:14

+0

我非常同意'使用SSL'更新。 Crypto充满了陷阱。 SSL人处理这些,所以你不必。 – slim 2008-09-24 11:19:48

1

谁是你想保护您的数据的任何提示?你的兄弟,你的竞争对手,你的政府,还是外星人?

每一个都有不同层次上,你可以考虑的数据是“尽可能安全”,一个有意义的预算之内(时间/现金)

0

另外,不要浪费时间对算法进行混淆 - 应用基尔霍夫原理,并记住在需要数据的大量地方使用AES(并确认使用了AES) “安全”。

4

我不认为你有什么松散的应用一个加密算法的另一个顶部是非常不同的第一个。然而,我会警惕在第一次运行第二轮相同的算法,即使你已经运行了另一个算法。两次运行之间的交互可能会造成漏洞。

话虽如此,我认为你在加密部分太痛苦了。大多数数据暴露不是通过打破行业标准的加密算法(如AES)而是通过系统中的其他弱点发生的。我会建议花更多的时间来研究密钥管理,未加密数据的处理,算法实现中的弱点(数据或密钥泄漏的可能性)以及更广泛的系统问题,例如,您如何处理数据备份。

0

达米安:你说得对,我应该更清楚地写。我在谈论竞争对手,这是为了商业用途。所以这是有意义的预算可用,但我不希望执行它而不相信我知道我为什么这样做:)

汉克:是的,这就是我害怕的了。 TripleDES提到了这个想法最支持的来源。另一方面,当我使用一种算法对一些数据进行加密时,则应用另一种算法,如果整个加密的“功率”比使用独立算法的功率要小,那将是非常奇怪的。但是,这并不意味着它不能等于...这就是为什么我要求一些提示的原因,这不是我的知识范围......

0

季奥米季斯:这基本上是我的观点的观点,但我的同事试图说服我真的'提高'安全。我的建议是使用更强大的加密密钥,而不是一种接一种的算法,没有任何想法或深入的知识,我正在做什么。

0

我不会依赖于模糊你正在使用的算法。这种“默默无闻的安全”并不能长久发挥作用。反编译代码是揭示你正在使用的加密的一种方式,但通常人们不会长时间保守这种秘密。这就是为什么我们首先有私钥/公钥密码。

0

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

我猜那是他(她?)谁建议从调试也通过加强保护安全......

0

你不能真正使事情安全的,如果你加密比一次更不同的IV和密钥,但是安全性的提高可能远远低于您预期的水平:在2DES的例子中,遇见中间攻击意味着它只有两次难以破解,而不是平衡难度。

一般情况下,虽然,它是更安全坚持一个众所周知的算法,提高了密钥长度,如果你需要更多的安全性。将专门的密码系统留给专家(我自己也没有给自己编号)。

4

黑客总是会攻击链条中最弱的元素。因此,强壮的元素变得更加强大,对它的帮助不大。 128位密钥长度已经不可能破解AES加密。 Blowfish也一样。选择更大的密钥长度使其变得更加困难,但实际上128位从未被破解到现在(并且在未来10年或20年内可能不会)。所以这种加密可能不是最薄弱的部分,为什么使它更强?它已经很强大。

想想还有什么可能是最弱的元素? IV?其实我不会浪费太多时间来选择一个伟大的IV或隐藏它。最弱的密钥通常是加密密钥。例如。如果您要加密存储到磁盘的数据,但这些数据需要由您的应用程序读取,您的应用程序需要知道的IV,它需要知道加密密钥,因此他们都必须二进制。这实际上是最弱的因素。即使你采用了20种加密方法并将它们链接到你的数据上,所有20的IV和加密密钥都需要在二进制文件中,如果黑客能够提取它们,那么使用20而不是1加密方法的事实提供了零增加安全。

因为我还不知道整个过程是什么(谁加密数据,谁解密数据,数据存储在哪里,如何传输,谁需要知道加密密钥等等) ,很难说最弱的元素是什么,但我怀疑AES或Blowfish加密本身是你最弱的元素。

1

加密两次比加密一次更安全,尽管这可能一开始并不清楚。

直观地看来,使用相同的算法进行两次加密并没有提供额外的保护,因为攻击者可能会发现一个密钥,从最终的密文一直解密回明文。 ... 但这种情况并非如此。

E.g.我从明文A开始,并使用密钥K1加密以得到B。然后我使用密钥K2加密B得到C

直观上看,似乎是合理的假设,有可能是一个关键,K3,我可以用它来加密一个,并得到Ç直接。如果是这种情况,那么使用蛮力的攻击者最终会偶然发现K3并能够解密C,结果是额外的加密步骤没有添加任何安全性。

但是,这样的密钥存在的可能性很小(对于任何现代的加密方案)。 (当我在这里说“极不可能”时,我的意思是一个普通人用“不可能”这个词来表达)。

为什么?
将密钥看作是提供从明文到密文映射的函数。
如果我们的密钥都是KL位长,那么有2^KL这样的映射。
但是,如果我使用2个密钥,每个都使用2(2^KL)^ 2个映射。
并非所有这些都可以等同于单级加密。

如果2个不同的算法用于,加密两次的另一个优点是,如果一个漏洞在的算法之一发现,其它的算法仍提供一些安全性。

正如其他人所指出的,暴力破解密钥通常是最后的手段。攻击者通常会尝试在某个其他位置打破这个过程(例如,使用社会工程学来发现密码)。

提高安全性的另一种方法是简单地使用一个较长的密钥和一种加密算法。

...随时纠正我的数学!

0

是的,它可能是有益的,但可能在大多数情况下矫枉过正。另外,正如汉克所说,某些组合实际上可能会削弱您的加密。

TrueCrypt提供了许多组合加密算法,如AES-Twofish-Serpent。当然,使用它们会有性能损失。

0

更改算法并没有提高质量(除非你期望算法被破坏),它只是关键/块的长度和混淆的一些优点。多次执行它很有趣,因为即使第一个密钥泄漏,结果数据也不会随机数据区分开来。在给定的平台上可以更好地处理块大小(例如,寄存器大小)。

攻击质量的加密算法只能通过蛮力发挥作用,因此取决于您可以使用的计算能力。这意味着最终你只能增加有人需要解密它的平均时间。

如果数据真正价值,他们最好不要攻击数据,但钥匙扣......

-1

我上面已经说同意。加密的多个阶段不会给你多少钱。如果您使用的是“安全”算法,那么实际上不可能打破。在某些标准流模式下使用AES。有关可接受的密码和模式,请参见http://csrc.nist.gov/groups/ST/toolkit/index.html。在正确使用时,该网站上推荐的任何内容都应该足够安全。如果你想要更安全,使用AES 256,但128仍然应该足够。最大的风险不是针对算法本身的攻击,而是针对密钥管理或旁道攻击(根据应用程序和使用情况可能会或可能不会有风险)的攻击。如果你的应用程序容易受到密钥管理攻击或旁路通道攻击,那么它适用于多少级别的加密并不重要。这是我将集中精力的地方。