110

我想加密一个二进制文件。我的目标是防止任何人读取没有密码的文件。

具有相同密钥长度的 AES 或 Blowfish 哪个更好?我们可以假设攻击者拥有大量资源(软件、知识、金钱)来破解文件。

4

7 回答 7

189

可能是AES。Blowfish 是 Twofish 的直接前身。Twofish 是 Bruce Schneier 参加产生 AES 的比赛的入口。它被认为不如后来成为 AES 的名为 Rijndael 的条目。

有趣的是:在比赛的某一时刻,所有参赛者都被要求就密码的排名发表意见。每支球队都将自己的参赛作品选为最好的,这可能并不奇怪——但其他所有球队都将 Rijndael 选为第二名。

也就是说,Blowfish 与 AES 的基本目标存在一些基本差异,这可以(可以说)在绝对安全性方面有利于 Blowfish。特别是,Blowfish 试图通过使初始密钥设置相当慢的操作来使暴力(密钥耗尽)攻击变得困难。对于普通用户来说,这没有什么影响(它仍然不到一毫秒),但如果你每秒尝试数百万个键来破解它,那么差异是相当大的。

最后,我不认为这是一个主要优势。我通常会推荐AES。我的下一个选择可能是 Serpent、MARS 和 Twofish。Blowfish 会在这些之后出现(尽管我可能会在 Blowfish 之前推荐其他几个)。

于 2010-11-10T18:12:04.083 回答
23

块密码的块大小也是一个重要的安全考虑因素(尽管远没有密钥大小重要),这是一个不经常承认的事实。

Blowfish(以及同一时代的大多数其他块密码,如 3DES 和 IDEA)具有 64 位块大小,这对于当今常见的大文件大小(文件越大,块大小越小)来说被认为是不够的, 密文中重复块的概率越高 - 这种重复块在密码分析中非常有用)。

另一方面,AES 的块大小为 128 位。仅此考虑就是使用 AES 而不是 Blowfish 的理由。

于 2010-11-11T04:43:42.217 回答
16

就算法本身而言,我会选择 AES,原因很简单,它已被 NIST 接受,并将经过多年的同行评审和密码分析。但是我建议在实际应用中,除非您要存储一些政府想要保密的文件(在这种情况下,NSA 可能会为您提供比 AES 和 Blowfish 更好的算法),使用这两种算法中的任何一种都会获胜不要有太大的不同。所有的安全都应该是关键,这两种算法都可以抵抗暴力攻击。Blowfish 仅在不使用完整 16 轮的实现中表现出较弱的表现。虽然 AES 较新,但这一事实应该会让您更倾向于 BlowFish(如果您只考虑年龄)。这样想,

这是我要向您提出的...与其查看这两种算法并尝试在算法之间进行选择,不如查看一下您的密钥生成方案。想要解密您的文件的潜在攻击者不会坐在那里想出一套理论上可以使用的密钥,然后进行可能需要数月时间的暴力攻击。相反,他会利用其他东西,例如攻击您的服务器硬件,对您的程序集进行逆向工程以查看密钥,试图找到一些包含密钥的配置文件,或者可能勒索您的朋友从您的计算机复制文件. 这些将是你最脆弱的地方,而不是算法。

于 2012-09-09T16:39:46.667 回答
7

AES。

(我也假设你的意思是两条鱼而不是更老更弱的河豚)

两者(AES 和 twofish)都是很好的算法。但是,即使它们相等或 twofish 在技术优势上略微领先,我仍然会选择 AES。

为什么?宣传。AES 是政府加密的标准,因此数百万其他实体也使用它。一位才华横溢的密码分析员在发现 AES 中的缺陷时会获得更多的“物有所值”,而不是为不太了解和使用过的 twofish 所做的。

模糊性不提供加密保护。更多的身体在寻找、研究、探索、攻击算法总是更好的。你想要最“经过审查”的算法,现在就是 AES。如果一个算法没有受到严格和持续的审查,你应该降低对其实力的信心。当然 twofish 没有受到损害。是因为密码的强度,还是仅仅因为没有足够的人仔细观察..... YET

于 2010-11-17T21:24:25.330 回答
5

算法选择可能并不重要。我会使用 AES,因为它已经得到了更好的研究。更重要的是选择正确的操作模式和密钥导出功能

如果您想要快速随机访问,您可能需要查看 TrueCrypt 格式规范以获得灵感。如果您不需要随机访问,那么 XTS 不是最佳模式,因为它具有其他模式所没有的弱点。您可能还想添加某种完整性检查(或消息身份验证代码)。

于 2010-11-10T19:03:18.680 回答
3

我知道这个答案违反了你的问题的条款,但我认为你的意图的正确答案很简单:使用允许你最长密钥长度的算法,然后确保你选择一个非常好的密钥。大多数备受推崇的算法(按密码和时间顺序)的性能上的微小差异被密钥的一些额外位所淹没。

于 2010-11-10T19:17:55.080 回答
3

两种算法(AES 和 twofish)都被认为是非常安全的。这已在其他答案中广泛涵盖。

然而,由于 AES 现在在 2016 年得到了广泛的使用,它已经在 ARM 和 x86 等多个平台上进行了专门的硬件加速。虽然在硬件加速之前并不比 twofish 快得多,但由于专用的 CPU 指令,AES 现在要快得多。

于 2016-05-16T19:50:06.307 回答