我正在考虑以下内容:我有一些数据流,我希望尽可能安全地保护 - 是否有任何意义应用让我们说AES与一些IV,然后Blowfish与一些IV,最后再次AES与一些IV?
加密/解密过程将被隐藏(甚至防止调试),因此不容易猜出哪种加密方法和使用了哪些IV(但是,我知道这个加密链的功能可以'这取决于这个事实,因为在一段时间后,每次防止调试都会破坏。
我有这方面的计算机能力(数据量不是那么大)所以问题只是它是否值得实施。例如,TripleDES工作非常相似,使用三个IV和加密/解密/加密方案,因此它可能不是完全无意义的。另一个问题是,当我对第一和第三部分使用相同的IV或者对所有三部分使用相同的IV时,我会降低多少安全性?
我欢迎任何有关此主题的提示
答案 0 :(得分:11)
我不确定这个特定的组合,但除非特定的组合已被广泛研究,否则混合这样的东西通常是个坏主意。数学变换实际上可能会相互抵消,最终结果会更容易被破解。单次通过AES或Blowfish应该绰绰有余。
更新:根据我在下面的评论......
使用TripleDES作为一个例子:想想世界上最好的密码学家花了多少时间和精力来创建这个组合(注意DoubleDES有一个漏洞),他们能做的最好的是112位安全性,尽管192位键。
更新2:我不得不同意Diomidis认为AES 非常不太可能是您系统中的薄弱环节。实际上,系统的每个其他方面都比AES更容易受到损害。
更新3:根据您对流的操作,您可能只想使用TLS(SSL的后继者)。我建议Practical Cryptography获取更多详细信息 - 它可以很好地解决您需要解决的许多问题。除其他外,它讨论了stream ciphers,它可能比AES更合适(因为AES是block cipher,你特别提到你有一个要加密的数据流)。
答案 1 :(得分:4)
我认为你没有任何东西可以通过在另一个加密算法之上应用一个与第一个非常不同的加密算法。然而,我会警惕在第一轮算法上运行第二轮相同的算法,即使你在中间运行另一个算法。两次运行之间的交互可能会打开一个漏洞。
话虽如此,我认为你在加密部分上苦苦挣扎。大多数数据暴露不是通过破坏行业标准加密算法(如AES),而是通过系统中的其他弱点发生的。我建议花更多的时间来研究密钥管理,未加密数据的处理,算法实现中的弱点(泄漏数据或密钥的可能性)以及更广泛的系统问题,例如,你在做什么来处理数据备份。
答案 2 :(得分:4)
黑客总是攻击链中最弱的元素。因此,使强大的元素更强大,几乎没有帮助。 128位密钥长度已经无法破解AES加密。 Blowfish也是如此。选择更大的密钥长度会使它变得更难,但实际上128 Bit从未被破解到现在(并且可能不会在未来10年或20年内)。所以这种加密可能不是最弱的元素,为什么要让它更强大呢?它已经很强大了。
想想还有什么可能是最弱的元素? IV?实际上,我不会浪费太多时间选择一个伟大的IV或隐藏它。最弱的密钥通常是加密密钥。例如。如果您要加密存储到磁盘的数据,但是这些数据需要由您的应用程序读取,您的应用程序需要知道IV并且需要知道加密密钥,因此它们都需要 >二进制文件。这实际上是最弱的元素。即使您采用20种加密方法并将它们链接到您的数据上,所有20种的IV和加密密钥都需要使用二进制文件,如果黑客可以提取它们,那么您使用20而不是1加密方法的事实提供了额外的零安全
因为我仍然不知道整个过程是什么(谁加密数据,谁解密数据,数据存储在哪里,如何传输,谁需要知道加密密钥等),很难说最弱的元素是什么,但我怀疑AES或Blowfish加密本身是你最薄弱的元素。
答案 3 :(得分:1)
您想要保护自己的数据?你的兄弟,你的竞争对手,你的政府,还是外星人?
每个都有不同的级别,您可以在有意义的预算(时间/现金)内将数据视为“尽可能安全”
答案 4 :(得分:1)
加密两次比加密一次更安全,即使这可能一开始并不清楚。
直观地说,使用相同的算法加密两次似乎没有提供额外的保护,因为攻击者可能会发现一条密钥,它会从最终的密文一直解密回明文。 ... 但这种情况并非如此。
E.g。我从明文 A 开始,并使用 K1 键进行加密,以获得 B 。然后我用 K2 键加密 B 以获得 C 。
直观地说,假设可能有一个键 K3 似乎是合理的,我可以使用它来加密 A 并获得 C 直接。如果是这种情况,那么使用强力攻击的攻击者最终会发现 K3 并且能够解密 C ,结果是额外的加密步骤没有添加任何安全。
但是,这种密钥不太可能存在(对于任何现代加密方案)。 (当我在这里说“极不可能”时,我指的是一个正常人用“不可能”这个词来表达的东西)。
为什么?
将密钥视为提供从明文到密文的映射的函数
如果我们的密钥长度都是 KL 位,则有2 ^ KL这样的映射
但是,如果我每次使用2个 KL 位的键,这会给我(2 ^ KL)^ 2映射。
并非所有这些都可以等同于单级加密。
加密两次的另一个优点,如果使用2种不同的算法,如果在其中一种算法中发现漏洞,则另一种算法仍提供一些安全性。
正如其他人所指出的那样,强行推出钥匙通常是最后的选择。攻击者通常会尝试在某个其他方面破坏该过程(例如,使用社交工程来发现密码)。
提高安全性的另一种方法是简单地使用具有一种加密算法的较长密钥。
...随意纠正我的数学!
答案 5 :(得分:0)
此外,不要浪费时间混淆算法 - 应用基尔霍夫的原则,并记住AES本身在数据需要“大量使用”的地方使用(并确认使用)安全”。
答案 6 :(得分:0)
答案 7 :(得分:0)
Diomidis:这基本上是我的观点,但我的同事正试图说服我,这确实“提升了”安全性。我的建议是使用更强的加密密钥而不是一个接一个的算法,而不需要任何思考或深入了解我正在做什么。
答案 8 :(得分:0)
我不会依赖于模糊您正在使用的算法。这种“默默无闻的安全”长期不起作用。反编译代码是揭示你正在使用的加密的一种方式,但通常人们不会长期保留这样的秘密。这就是我们首先拥有私钥/公钥加密的原因。
答案 9 :(得分:0)
@Miro Kropacek - 您的同事正在尝试通过Voodoo添加安全性。相反,尝试构建一些可以分析缺陷的简单方法 - 例如使用AES。
我猜是他(她?)建议通过防止调试来提高安全性......
答案 10 :(得分:0)
如果使用不同的IV和密钥加密多次,您实际上无法使更少安全,但安全性的提高可能远低于您的预期:在2DES的示例中,中间相遇攻击意味着它只有两倍的难度,而不是平衡难度。
一般而言,如果您需要更高的安全性,坚持使用一个众所周知的算法并增加密钥长度会更安全。将密码系统组成专家(我不会将自己编号为其中之一)。
答案 11 :(得分:0)
是的,这可能是有益的,但在大多数情况下可能有点过分。此外,正如汉克提到的,某些组合实际上可能削弱您的加密。
TrueCrypt提供了许多组合加密算法,如AES-Twofish-Serpent。当然,使用它们会有性能损失。
答案 12 :(得分:0)
更改算法并不能提高质量(除非您希望算法被破坏),它只是关键/块长度和混淆的一些优点。多次这样做很有意思,因为即使第一个密钥泄露,结果数据也无法与随机数据区分开来。在给定平台上可以更好地处理块大小(例如,寄存器大小)。
攻击质量加密算法只能通过蛮力运行,因此取决于您可以花费的计算能力。这意味着最终你只能增加可能性 有人需要解密它的平均时间。
如果数据是真实的值,他们最好不要攻击数据,而是密钥持有者...
答案 13 :(得分:-1)
我同意上面所说的话。多个加密阶段对您不会有太大帮助。如果您使用的是“安全”算法,那么几乎不可能破解。在某些标准流模式下使用AES。有关可接受的密码和模式,请参阅http://csrc.nist.gov/groups/ST/toolkit/index.html。如果使用得当,该网站上推荐的任何内容都应足够安全。如果您想要更加安全,请使用AES 256,尽管128仍然应该足够。最大的风险不是针对算法本身的攻击,而是针对密钥管理或侧通道攻击的攻击(根据应用程序和使用情况,可能存在风险,也可能不存在风险)。如果您的应用程序容易受到密钥管理攻击或侧通道攻击,那么您应用多少级别的加密并不重要。这是我专心致志的地方。