最好的通用消化功能?

时间:2009-03-03 01:38:09

标签: security hash digest

在2009年编写一个普通的新应用程序时,在安全性和性能方面,最合理的摘要功能是什么? (当条件发生变化时,我怎样才能在将来确定这一点?)

之前similar questions were asked,答案包括SHA1,SHA2,SHA-256,SHA-512,MD5,bCrypt和Blowfish。

我意识到,在很大程度上,任何一个都可以工作,如果智能地使用,但我宁愿不掷骰子并随机选择一个。感谢。

3 个答案:

答案 0 :(得分:7)

我会关注NIST/FIPS guidelines

  

2006年3月15日:SHA-2家族   散列函数(即SHA-224,   SHA-256,SHA-384和SHA-512)可能是   联邦机构用于所有人   应用程序使用安全散列   算法。联邦机构应该   停止使用SHA-1进行数字化处理   签名,数字时间戳和   其他需要的应用程序   一旦发生碰撞阻力   实用,必须使用SHA-2   这些哈希函数族   2010年之后的申请。2010年之后,   联邦机构可能只使用SHA-1   适用于以下应用:   基于散列的消息认证   代码(HMAC);密钥推导   功能(KDF);和随机数   发电机(RNG)。无论使用,   NIST鼓励申请和   协议设计者使用SHA-2   所有新的哈希函数族   应用程序和协议。

答案 1 :(得分:3)

你说“消化功能”;大概这意味着你想用它来计算“长”消息的摘要(而不仅仅是像密码一样散列“短”“消息”)。这意味着bCrypt和类似的选择已经出局;它们旨在缓慢地抑制对密码数据库的暴力攻击。 MD5完全坏了,SHA-0和SHA-1太弱了,不是很好的选择。 Blowfish是一个流密码(虽然你可以在一个产生摘要的模式下运行它),所以它也不是一个好的选择。

留下了几个哈希函数族,包括SHA-2,HAVAL,RIPEMD,WHIRLPOOL等。其中,SHA-2系列是最彻底的密码分析,因此我的建议是一般用途。我建议将SHA2-256或SHA2-512用于典型应用,因为这两种尺寸是最常见的,并且将来很可能被SHA-3支持。

答案 2 :(得分:2)

这实际上取决于你需要它。

如果你需要实际的安全性,轻易发现碰撞的能力会损害你的系统,我会使用像SHA-256或SHA-512这样的东西,因为它们是各个机构大力推荐的。

如果您需要快速的东西,并且可以用来唯一识别某些东西,但是没有实际的安全要求(即,如果发现碰撞,攻击者将无法做任何令人讨厌的事情)然后我会使用类似MD5的东西。

已经证明MD4,MD5和SHA-1在通过生日攻击方法发现碰撞的意义上比预期更容易破碎。 RIPEMD-160备受好评,但只有160位生日攻击只需要2 ^ 80次操作,因此它不会永远持续下去。 Whirlpool具有出色的特性,并且看起来是最强的,尽管它与SHA-256或SHA-512没有相同的支持 - 从某种意义上说,如果SHA-256或SHA-512存在问题,那么' d更有可能通过适当的渠道找到它。