AES与Blowfish进行文件encryption

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

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

可能是 AES。 河豚是Twofish的直接前任。 Twofish是Bruce Schneierjoin了产生AES的竞争对手。 这被认为是不如一个名为Rijndael,这是成为AES的条目。

有趣的是,在比赛中,所有参赛者都被要求就密码的排名发表意见。 每支球队都select了自己的最佳阵容也许并不奇怪,但其他球队都把Rijndael列为第二好。

也就是说,Blowfish与AES的基本目标存在一些基本的差异,可以(绝对安全地)支持Blowfish。 特别是,Blowfish试图通过使初始密钥设置相当缓慢的操作来使得暴力(密钥耗尽)攻击变得困难。 对于一个普通的用户来说,这并没有多大的意义(这个时间还不到一毫秒),但是如果你每秒要尝试数百万个密钥来打破这个密钥,那么这个差别是相当大的。

最后,我不认为这是一个主要的优势。 我通常会推荐AES。 我的下一个select可能是蛇,MARS和Twofish的顺序。 河豚会在某些地方出现(尽pipe我可能会推荐一些其他的河豚)。

一个分组密码的块大小也是一个重要的安全考虑因素(虽然没有密钥大小那么重要),这是一个不常被公认的事实。

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

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

就algorithm本身而言,我会使用AES,原因很简单,它被NIST所接受,并且将经过同行评审和密码分析多年。 但是我会build议在实际应用中,除非你存储了一些政府希望保密的文件(在这种情况下,NSA可能会提供比AES和Blowfish更好的algorithm),使用这些algorithm没有太大的区别。 所有的安全性应该是关键,而且这两种algorithm都能抵抗暴力攻击。 河豚只在实施中没有使用完整的16轮时显示出弱点。 虽然AES更新,但这个事实应该让你更倾向于BlowFish(如果你只考虑年龄的话)。 BlowFish自90年代就已经存在,没有人(我们知道)已经打破了它….

这是我会给你造成的……而不是看这两个algorithm,并试图在algorithm之间做出select,为什么不看看你的密钥生成scheme。 一个想要解密文件的潜在攻击者不会坐在那里,拿出一套理论上可以使用的密钥,然后进行暴力攻击,这可能需要几个月的时间。 相反,他会利用别的东西,比如攻击你的服务器硬件,逆向工程你的程序集来查看密钥,试图find一个configuration文件,里面有钥匙,或者勒索你的朋友从你的计算机复制一个文件。 那些将是你最脆弱的地方,而不是algorithm。

AES。

(我也假设你的意思不是老年人和老年人的肥胖)

(AES和twofish)都是很好的algorithm。 然而,即使他们在技术上的优势略微超前,我仍然会selectAES。

为什么? 宣传。 AES是政府encryption的标准,因此数百万其他实体也使用它。 一个天才的密码分析师只是更加“爆米花”findAES的缺陷,然后它为更less的知道和使用twofish。

朦胧不提供encryption保护。 更多的机构在寻找,研究,探测,攻击algorithm总是更好。 你想要最“经过审查”的algorithm,现在就是AES。 如果一个algorithm没有受到强烈的和持续的审查,那么你就应该把自己的实力降低一些。 当然两头都没有妥协。 那是因为密码的强弱,还是因为没有足够的人仔细观察…….

algorithm的select可能并不重要。 我会使用AES,因为它被更好的研究。 更重要的是select正确的操作模式和密钥派生function 。

如果你想快速的随机访问,你可能想看看TrueCrypt格式规范的灵感。 如果你不需要随机存取,那么XTS不是最佳模式,因为它有缺点,其他模式不行。 你也可能想添加一些完整性检查(或消息authentication码)。

我知道这个答案违反了你的问题的条件,但是我认为你的意图的正确答案是这样的:使用哪个algorithm允许你最长的密钥长度,然后确保你select一个非常好的密钥。 大多数优秀algorithm(密码学和时序学)性能的细微差别被一个密钥的一些额外位所淹没。

两种algorithm(AES和两种)都被认为是非常安全的。 其他答案已经广泛地涉及这一点。

但是,由于AES现在在2016年得到了广泛的应用,因此在几个平台(如ARM和x86)中进行了专门的硬件加速。 在硬件加速之前,虽然速度并不快于两倍,但由于专用CPU指令,AES现在速度更快。