AES与Blowfish进行文件加密


106

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

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


4
河豚已有十多年的历史了,我想你是说aes vs twofish ...
rook 2010年

您说得对,我可能已经问过了。幸运的是,杰里总结了这个话题对我很有帮助。
mimrock

@Rook越老,安全算法的经验法则越好。新算法适用于人们,他们更关心性能而不是安全性。
2013年

Answers:


187

可能是 AES。河豚是Twofish的直接前身。布鲁斯·施耐尔(Bruce Schneier)进入了Twofish,成为了产生AES的竞赛的参与者。它被认为不及名为Rijndael的条目,后者后来成为AES。

除了有趣的问题:在比赛的某一时刻,所有参赛者都被要求给出他们对密码排名的看法。每个团队都将自己的参赛作品选为最佳也许并不奇怪-但其他每个团队都将Rijndael选为第二好。

也就是说,Blowfish与AES的基本目标存在一些基本差异,就绝对安全而言,它们可以(可以说)支持Blowfish。特别是,Blowfish试图通过使初始密钥设置相当慢的操作来使暴力破解(密钥耗尽)攻击变得困难。对于普通用户而言,这几乎没有什么意义(仍然不到一毫秒),但是如果您每秒尝试尝试数百万个密钥来破解它,那么两者之间的差异就很大。

最后,我认为这并不是主要优势。我通常会推荐AES。我的下一个选择可能是该顺序的蛇,MARS和Twofish。河豚会在那之后出现(尽管在河豚之前我可能会推荐其他几个)。


11
我认为其他算法比Rijndael更安全,但是它的安全性被认为足够好,同时提供了很好的性能。设计密码算法始终是安全性和性能之间的折衷。
CodesInChaos

10
@CodeInChaos:根据您的观点,这至少是正确的-蛇可能是最保守的设计。特别是,他们认为16轮的版本就足够了-因此他们将其翻倍至32轮。目前已知的最佳攻击方式仅对11轮有效。如果最初的问题没有将选择具体地限制在AES和Blowfish上,而只是要求最安全,相当知名的密码,我可能会说蛇……
杰里·科芬

此外,在为我的CompTIA Security +考试学习时,“有趣的一面”已经出现在几个问题和来源中。小事情毕竟不是那么没用!
Everlight'6

Blowfish是最快的
user924

22

分组密码的分组大小也是一个重要的安全考虑因素(尽管远不及密钥大小重要),这是一个不为人所知的事实。

Blowfish(以及同一时期的大多数其他块密码,例如3DES和IDEA)具有64位的块大小,对于当今常见的大文件大小(文件越大,块大小越小),这被认为是不够的。 ,密文中重复块的可能性就更高-这样的重复块在密码分析中非常有用。

另一方面,AES具有128位的块大小。仅出于这种考虑,就证明了使用AES代替河豚的合理性。


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

块大小是一个有趣的参数。我写的,几个月前,提出的理论,任何对称密码的块大小可以扩展到任何长度的文章: cubicspot.blogspot.com/2013/02/...
CubicleSoft

16

就算法本身而言,我会使用AES,原因很简单,那就是它已被NIST接受,并且将经过多年的同行审查和加密分析。但是,我建议在实际应用中,除非您存储了一些政府希望保密的文件(在这种情况下,NSA可能会为您提供比AES和Blowfish更好的算法),但使用以下两种方法都可以没有太大的不同。所有的安全性都应放在密钥中,这两种算法都可以抵抗暴力攻击。在没有利用完整的16轮回合的实现中,河豚仅表现出弱点。尽管AES较新,但这一事实应该使您更倾向于BlowFish(如果您仅考虑年龄的话)。这样想吧

这就是我要向您介绍的内容...除了查看这两种算法并尝试在算法之间进行选择之外,您为什么不查看您的密钥生成方案。想要解密您的文件的潜在攻击者不会坐在那里,拿出一套可以使用的理论密钥,然后进行可能要花费数月的蛮力攻击。相反,他将利用其他东西,例如攻击服务器硬件,对组件进行反向工程以查看密钥,尝试查找其中包含密钥的配置文件,或者勒索您的朋友从计算机中复制文件。这些将是您最脆弱的地方,而不是算法。


4
AES最近被添加到Wikipedia的“破密码”列表中,但是对Blowfish的最严重攻击是针对仅四轮的攻击,并且显然不在破密码列表中。布鲁斯对人们仍然使用河豚感到惊讶的评论驱使实施者离开。但是,它没有损坏,支持可变密钥大小,比AES支持更大的密钥大小,并且从编程的角度看,与大多数其他对称块密码相比,它易于实现。河豚在时间的考验中幸存下来,这是对任何对称密码的最大威胁。
CubicleSoft 2013年

我同意AES几乎没有崩溃。但是在未来10年左右,我们将需要一个新标准。同样,任何AES决赛入围者都是很棒的密码。实际上,许多人认为蛇是最难破解的,但AES是最优雅的。(是的,如果您看一下如何进行加密和解密,那肯定很优雅。)
nerdybeardo 2014年

8

AES。

(我还假设您指的是两条鱼,而不是年龄较大且较弱的河豚)

两者(AES和twofish)都是很好的算法。但是,即使它们相等或两条鱼在技术优点方面稍占优势,我还是会选择AES。

为什么?宣传。AES是政府加密的标准,因此数百万其他实体也使用它。一个有才华的密码分析员只是发现“ AES的缺陷”,而后获得了更多的“回报”,而对于鲜为人知和使用过的两条鱼则做到了。

模糊性不提供加密保护。寻找,研究,探测,攻击算法的机构越多越好。您需要可能是目前最“经过审核”的算法,即AES。如果没有对算法进行严格和持续的审查,则应降低算法的强度。当然,twofish并未受到损害。是因为密码或者仅仅是因为实力不够的人已经采取了仔细看..... YET


5

算法选择可能无关紧要。我会使用AES,因为对其进行了更好的研究。更重要的是选择正确的操作模式和密钥推导功能

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


1
绝对-使用良好的密钥派生功能(例如PBKDF2)至关重要。
caf 2010年

3

我知道这个答案违反了您的问题,但是我认为正确的答案很简单:使用任一种算法可以使您拥有最长的密钥长度,然后确保选择一个真正好的密钥。大多数公认的算法(在加密和时间顺序上)的性能的微小差异都被密钥的一些额外位所淹没。


7
我不同意 IBM的Lucifer密码(DES的前身)被用作128位密钥-但是,一旦(重新)发现了差分密码分析,DES(仅具有56位密钥)将变得更加安全。
杰里·科芬

3
仅查看密钥长度是一个非常差的指标。
杰拉尔德·戴维斯

2
这就是为什么我说“最受尊敬的算法”。如果您认为Blowfish 128位不如AES 128位,则您必须同意Blowfish 256位将AES 128位吹倒。同样,密钥的生成和管理也同样重要。如果您的密钥是“密码”,那么实际上使用什么算法都没有关系。我的意思是,OP可能正在看错东西。
Mike Jones 2010年

2
问题中指出密钥将从密码派生。通过暴力破解密码可能比攻击此处提到的任何算法都容易得多。从密码派生密钥时,密钥长度几乎完全无关紧要。
dajames 2010年

尽管您说的与我完全一样,但您还是把我的答案记下来了吗?我说过密钥长度,然后选择一个非常好的密钥。如果“密钥”没有填满密钥的所有部分,那么您对密钥的定义是“好”吗?
Mike Jones,2010年

3

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

但是,由于AES在2016年被广泛使用,因此它已经在ARM和x86等多个平台上进行了专门的硬件加速。尽管没有比硬件加速之前的twofish快得多的速度,但是现在由于专用的CPU指令,AES的速度要快得多。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.