AES vs Blowfish用于文件加密

mim*_*ock 106 security encryption blowfish aes

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

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

Jer*_*fin 187

可能是 AES.Blowfish是Twofish的直接前身.Twofish是布鲁斯施奈尔参加竞争,生产AES.它被判断为不如名为Rijndael的条目,后者成为AES.

有趣的是:在比赛的某一点上,所有参赛者都被要求就密码如何排名发表意见.每个团队都选择自己最好的参赛作品并不奇怪 - 但其他团队选择Rijndael作为第二好.

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

最后,我并不认为这是一个主要优势.我通常会推荐AES.我的下一个选择可能是Serpent,MARS和Twofish.Blowfish会在那之后到达某个地方(尽管还有其他一些我可能会在Blowfish之前推荐).

  • 我认为其他算法被认为比Rijndael更安全,但它提供了非常好的性能,而它的安全性被认为是足够好的.设计密码算法始终是安全性和性能之间的权衡. (11认同)
  • @CodeInChaos:根据你的观点,这至少是真的 - 蛇可能是最保守的设计.特别是,他们认为16轮版本就足够了 - 所以他们将其翻倍至32轮.目前已知的最佳攻击仅对11轮有效.如果原来的问题没有明确限制AES和Blowfish的选择,只是要求最安全,最合理的密码,我可能会说Serpent ...... (10认同)

caf*_*caf 22

不常见的事实是,块密码的块大小也是一个重要的安全考虑因素(尽管远不如密钥大小那么重要).

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

另一方面,AES具有128位块大小.仅考虑这一点是使用AES而不是Blowfish的理由.

  • 64位块大小的优点在于,它可以更轻松地将新算法替换为(3-)DES的旧应用程序。 (2认同)

ner*_*rdo 16

就算法本身而言,我会使用AES,原因很简单,它已被NIST接受,并将进行同行评审和密码分析多年.但是我建议在实际应用中,除非你存储一些政府想保密的文件(在这种情况下,NSA可能会为你提供比AES和Blowfish更好的算法),使用这些算法中的任何一种都赢了不要太大差别.所有安全性都应该在密钥中,并且这两种算法都能抵抗暴力攻击.Blowfish在没有使用完整的16轮的实现上表现得很弱.虽然AES更新,但这个事实应该让你更倾向于BlowFish(如果你只考虑年龄).想想这样,BlowFish自90年代以来一直存在,没有人(我们知道)已经打破了它......

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

  • AES最近被添加到维基百科上的"破解密码"列表中,但对Blowfish的最严重攻击是针对可能的四轮攻击,并且在破解的密码列表中明显缺失.布鲁斯关于人们仍然使用Blowfish感到惊讶的评论是推动实施者离开的原因.但是,它没有被破坏,支持可变密钥大小,支持比AES更大的密钥大小,并且从编程的角度来看,与大多数其他对称分组密码相比,易于实现.Blowfish经受住了时间的考验,这是对任何对称密码的最大威胁. (4认同)

Ger*_*vis 8

AES.

(我也假设你的意思是两个不那么年长和较弱的河豚)

两者(AES和twofish)都是很好的算法.然而,即使它们相同或两个稍微领先于技术优点,我仍然会选择AES.

为什么?宣传.AES是政府加密的标准,因此数百万其他实体也使用它.一个才华横溢的密码分析师只是在发现AES中存在缺陷的情况下获得了更多的"砰砰作响",然后它就更少知道和使用了twofish.

Obscurity不提供加密保护.更多的机构寻找,研究,探测,攻击算法总是更好.你想要最经过"审查"的算法,现在就是AES.如果一个算法没有受到强烈和持续的审查,你应该对它的强度放置一个较低的信心.当然twofish没有妥协.是因为密码的强弱还是仅仅因为没有足够的人仔细观察..... YET


Cod*_*aos 5

算法选择可能并不重要.我使用AES因为它已被更好地研究.更重要的是选择正确的操作模式和密钥派生功能.

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