考虑到MD5已知的弱点以及SHA1在最近(2009年5月)被讨论的弱点,新程序应该如何对其密码进行加盐和哈希处理?
我看过建议使用SHA-256和SHA-512。
主要使用Ruby on Rails编程并使用PostgreSQL - 但其他语言和环境可能也需要计算密码哈希值。
考虑到MD5已知的弱点以及SHA1在最近(2009年5月)被讨论的弱点,新程序应该如何对其密码进行加盐和哈希处理?
我看过建议使用SHA-256和SHA-512。
主要使用Ruby on Rails编程并使用PostgreSQL - 但其他语言和环境可能也需要计算密码哈希值。
SHA-256和SHA-512在可预见的未来是安全的。它们属于SHA-2家族,迄今为止还没有发现针对该家族的攻击。这个维基百科页面称Unix和Linux供应商正在转向使用SHA-2来进行密码的安全哈希。SHA-3家族拥有更强的算法,但要到2012年后才会准备好。
P.S: 除非您要隐藏政府的秘密特工名称,否则使用SHA-1也是安全的,但如果可以不费力地使用SHA-2,那就使用SHA-2吧。
你应该一起使用哈希用户名、密码和盐,例如:
hash(length(username)+"_veryuniquesalt4rtLMAO"+username+password)
这样,由于盐的存在,您的数据库不会受到任何现有彩虹表的攻击,并且使用用户名和密码哈希后,也不可能为您特定的哈希方法创建彩虹表。
使用“慢速”哈希算法将更好地保护密码,就像它们更复杂一样,但这是一种权衡,一旦您决定了某个特定的缓慢程度,当您需要其他性能时,您不能轻易地缩小规模。
还可以使用JavaScript在客户端进行缓慢的哈希处理,这样就不会成为性能问题,但是该方法当然需要启用JavaScript。
无论您选择什么,稍微慢一点的哈希处理都比没有好得多,使用1毫秒而不是1微秒,您的保护强度将增加1000倍。
您可以使用bcrypt,或者可以让传统的哈希算法执行大量额外的工作,只需确保额外的工作不是主要的字符串连接即可。
最终,最好不要让您的数据库被盗,因为很多密码都太弱了,无论您做什么,都很容易被提取。