2009-03-03 81 views
2

在2009年编写平均新应用程序时,在安全性和性能方面使用最合理的摘要函数是什么? (和我怎样才能在未来确定这一点,随着条件的改变?)最佳通用摘要函数?

similarquestionswereasked以前,答案已包括SHA1,SHA2,SHA-256,SHA-512,MD5,bCrypt和河豚。

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

回答

7

我会遵循NIST/FIPS guidelines

2006年3月15日:在SHA-2家族的 散列函数(即SHA-224,SHA -256,SHA-384和SHA-512)可能是 由联邦机构使用的所有 应用程序使用安全哈希 算法。联邦机构应 停止尽快 实际使用SHA-1数字 签名,数字时间戳和 需要 碰撞性的其他应用程序,并在2010年后必须使用SHA-2 家族的散列函数,这些 应用在2010年之后,联邦机构可能仅对以下应用使用SHA-1 : 基于散列的消息认证 代码(HMAC);密钥推导 函数(KDFs);和随机数 生成器(RNG)。无论使用什么,NIST都鼓励应用程序和 协议设计人员对所有新的 应用程序和协议使用SHA-2 系列散列函数。

3

你说“摘要函数”;这大概意味着你想用它来计算“长”消息的摘要(不只是像密码那样对短消息进行散列)。这意味着bCrypt和类似的选择已经出来;它们被设计成缓慢地禁止对密码数据库的暴力攻击。 MD5被彻底破坏,而SHA-0和SHA-1太弱了,不能成为好选择。河豚是一种流密码(虽然你可以运行它产生摘要的模式),所以它也不是一个好的选择。

这留下了几个哈希函数系列,包括SHA-2,HAVAL,RIPEMD,WHIRLPOOL等。其中,SHA-2家族是最彻底的密码分析,所以这是我的建议,一般使用。对于典型的应用,我推荐使用SHA2-256或SHA2-512,因为这两种尺寸是最常见的,未来可能会受到SHA-3的支持。

+0

是的,这就是我的意思(应该更清楚)。谢谢。 – Anirvan 2009-03-03 02:23:03

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更有可能通过正确渠道了解它。

+1

不要将MD5用于任何远程加密。这是一个反腐败校验和现在,*没有*更多。它彻底坏了。忘掉它;没有任何其他散列函数不会做得更好。 – kquinn 2009-03-03 03:00:15