存储密码应该使用什么哈希算法?

6

我对哈希算法的强度最新发展不是很了解;目前什么是存储密码的最佳选择?

此外,盐值(salting)和密钥延伸(key stretching)提供了多少更多的安全性保障?


这个问题的答案随着时间的推移很可能会过时。更好的做法是提供一个指南,教大家如何找到“当前最佳实践”。 - Martin Brown
2个回答

8

至于哈希提供的额外安全性取决于使用多少次哈希迭代。例如,假设您决定使用2^14次哈希迭代。这将使密码的熵增加14位。根据摩尔定律,哈希提供的每个额外熵位意味着在与今天相同的时间内破解密码需要大约18个额外月份。因此,要与今天相同的时间内破解原始密码相同,需要21年(14 x 18个月)才能破解迭代哈希。

盐值提供的额外安全性有两个方面:它防止有效使用彩虹表,并使得破解大量密码列表变得更加耗时(但无法加强单个密码的安全性)。


2
bcrypt 是目前流行的方式。 - Marcus Adams
@MarcusAdams 我同意,你应该使用bcrypt或一些经过充分验证的多次哈希迭代方法,比如PBKDF2。有太多的方法可以搞砸这些东西。最好不要只是把一些加密原语组合在一起,直到看起来安全为止。 - Luke

1

看看这个。

在security.stackexchange上的这个问题是关于bcrypt和PBKDF2的好讨论 - 有没有安全专家推荐使用bcrypt来存储密码?

关键在于仅使用哈希函数无法防止预计算攻击(例如彩虹表)。添加盐也无法保护您免受字典或暴力攻击。使用bcrypt或PBKDF2比使用哈希算法构建自己的方案要好得多。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接