由于出于安全目的而破坏了MD5,因此我现在应该对安全应用程序使用什么哈希?

评论

请注意,128位哈希需要大约$ 2 ^ {64} $个评估才能找到冲突,这是可行的(实际上,为找到SHA-1冲突还做了更多工作)。

#1 楼

这取决于您要使用哈希函数的用途。

对于签名文档,sha2(例如sha512)被认为是安全的。

对于存储密码,您应该使用一个专用于此目的的算法:e。 G。 bcrypt,sha512crypt或scrypt。为了放慢攻击者的速度,这些算法通过基于当前回合数的输入多次应用哈希函数。

Scrypt使这一概念更进一步,并使用了大量的内存。用于密码破解的典型硬件可以访问大约几个KB的内存,scrypt的默认配置需要16 MB。

评论


$ \ begingroup $
SHA-2实际上是SHA-224,SHA-256,SHA-384和SHA-512之一。 SHA-256目前被认为是安全的。
$ \ endgroup $
–斯蒂芬·托瑟(Stephen Touset)
2012年10月12日在22:07

$ \ begingroup $
@StephenTouset您忘记了SHA-512 / 224和SHA-512 / 256。
$ \ endgroup $
–马腾·博德威斯♦
2012年10月13日在16:02



#2 楼

在将MD5替换为哈希函数的选项中:


如果可能的话,应增加哈希的宽度以增强抗碰撞能力,并至少使用- SHA-2或新的SHA-3系列的256位成员。使用Paul C. van Oorschot和Michael J. Wiener的Parallel Collision,可以通过受过教育的蛮力和大约$ 2 ^ {65} $哈希(对于相当快的哈希和现代方法来说是可行的)来破坏任何128位哈希的抗碰撞性使用密码分析应用程序进行搜索(《密码学杂志》,1999年1月,第12卷,第1期;可从第一作者的网站上免费获得较早的早期版本)。在抗碰撞性不是问题的应用中(也许在HMAC中)是合理的。


值得研究的候选产品是RIPEMD-128,它是MD5的引脚兼容替代品,并带有名称。 RIPEMD-128使用与RIPEMD-160相同的安全性参数(尽管使用4组回合而不是5组)。 RIPEMD-160反过来又是AFAIK唯一的标准不间断的160位哈希,并且在禁止所有小于256位的哈希之前,一直享有被欧洲密码当局审查的地位。 RIPEMD-128在2013年末受到威胁,这是一次攻击(理论上),它发现不同链式变量输入的回合函数发生冲突,其工作量比暴力破解少5倍。但是,RIPEMD128不应被视为已损坏(如此评论中所述),因为该攻击不会对不同消息产生哈希冲突,并且并未扩展到该冲突(据我所知,截至2017年初)。但是,俗话说,攻击只会变得更好。他们永远不会变得更糟。
尽管进行了部分攻击,但是如果更改的目的是从规范中删除MD5一词,而又不作任何更改,又不降低速度,则RIPEMD-128仍将是比MD5更好的选择,而这是局部攻击时的最佳选择。或需要更多内存。注意:RIPEMD是RIPEMD-128的祖先,它像MD5一样被破坏,因此绝对不能使用。
如果您放松一些,比较保守的选择是SHA-256的前128位。 “带有名称”和性能限制只是一点点。对此的攻击将被视为SHA-256攻击,尽管付出了巨大的努力并减少了变种的攻击,但该攻击到2017年3月仍未中断。对SHA-256的前128位的最著名的攻击是冲突搜索(请参阅此答案的开头)。




MD5通常是用于保护登录信息(包括密码)或通过密码生成密钥。在这样的应用程序中,使用任何快速散列是一个糟糕的设计选择,并且您想使用适当的密钥扩展。我以前曾建议在约束允许的情况下使用scrypt(即:有足够的内存;可以有效地实现Salsa-20;并且可以适当地安全地实现SHA-256,如果考虑DPA,则可能很难);或bcrypt(如果不能选择scrypt);如果不可行,则使用一些PBKDF2和足够的迭代参数。现在我们有了Argon2,它将接管这些。

评论


$ \ begingroup $
当然,这实际上取决于您所说的“标准”哈希函数的含义;但是某些SHA-3候选对象提供了160位输出大小的扩展名(例如Shabal),并且作为SHA-3候选对象,它们具有相当明确的规范,包括测试向量和示例实现。
$ \ endgroup $
–托马斯·波宁(Thomas Pornin)
2012年10月12日在22:08

$ \ begingroup $
正如从SHA-3竞争中选择的哈希函数一样,Keccack除了允许NIST要求的输出大小外,还允许可变的输出长度。
$ \ endgroup $
–鲍勃
2012年10月13日在8:32

$ \ begingroup $
截至9月,RIPEMD-128现在被认为已损坏,RIPEMD-160的牵引绳较短
$ \ endgroup $
– Richie车架
13年1月1日在8:45

$ \ begingroup $
@RichieFrame您是否有资料来源?
$ \ endgroup $
–垫
17年5月15日在8:38

$ \ begingroup $
@Richie Frame:如果您在我的帖子中讨论了Franck Landelle和Thomas Peyrin对Full RIPEMD-128进行的密码分析,那么我的理解是,对于圆形函数的不同输入产生碰撞比蛮力要好一些,但不是针对不同的消息,因此即使在理论上也不会破坏RIPEMD-128作为哈希。
$ \ endgroup $
–fgrieu♦
17年5月15日在13:24



#3 楼

SHA2或SHA 3哈希值之一;如果它们之间没有任何偏好,请选择SHA256。

您可能会听到有关SHA-3的256位版本是“较新”的说法,因此应首选。恕我直言,较旧的安全密码学(即,在密码分析中生存时间更长的密码学)通常是首选;但是SHA-3似乎没有问题。

#4 楼

关于SHA-3呢,与SHA-256SHA-512不同,它使用海绵构造代替Merkle-Damgård构造,这暗示了对长度扩展攻击的抵抗力。

评论


$ \ begingroup $
还没有指定AFAIK SHA-3,如果现在要使用它,则需要使用Keccak变体,该变体将与最终的SHA-3稍有不同。因此,我建议等待SHA-3标准真正发布。
$ \ endgroup $
– CodesInChaos
13年7月5日在6:28

$ \ begingroup $
我知道,SHS尚未更新。但我希望它会在2013年底或2014年初进行更新。
$ \ endgroup $
–加弗里尔·费里亚(Gavriel Feria)
13年7月6日在22:59