如何安全存储密码(2010)

2020-12-04 20:49:42

这些都是通用的哈希函数,旨在在尽可能短的时间内计算大量数据的摘要。这意味着它们非常适合确保数据的完整性,并且完全可以存储密码。

现代服务器可以每秒计算约330MB的MD5哈希值。如果您的用户密码使用小写字母,字母数字和6个字符的长度,则可以在大约40秒内尝试使用该大小的每个可能的密码。

如果您愿意花2,000美元和一两个星期的时间来购买CUDA,您可以将自己的小型超级计算机集群组合在一起,让您每秒尝试大约700,000,000个密码。速率超过每秒

请务必注意,盐对于防止字典攻击或蛮力攻击没有用。您可以使用大量盐或许多盐,也可以使用人工收集的,阴影生长的有机喜马拉雅粉红盐。根据您数据库中的哈希值和盐,它不会影响攻击者尝试候选密码的速度。

不管是盐还是盐,如果您使用的是专为提高速度而设计的通用哈希函数,那么效果确实不错。

怎么样?基本上,它慢得要命。它使用了Blowfish加密算法的密钥计划的变体,并引入了一个工作因数,使您可以确定哈希函数的成本。因此,bcrypt可以跟上摩尔定律。随着计算机变得越来越快,您可以增加工作因数,哈希将变慢。

bcrypt比MD5慢多少?取决于工作因素。使用12的工作系数,bcrypt在我的笔记本电脑上在约0.3秒内对密码yaaa进行哈希处理。另一方面,MD5花费不到一微秒的时间。

因此,我们谈论的是大约5个数量级。与其每40秒破解一次密码,不如每12年左右破解一次。您的密码可能不需要这种安全性,并且可能需要更快的比较算法,但是bcrypt允许您选择速度和安全性之间的平衡。用它。

在过去的一年里,我一直在收到有关该文章的定期电子邮件,我认为我会在这里解决一些问题,而不是一遍又一遍地进行相同的对话。

请阅读Provos& Mazièrespaper.bcrypt是一种自适应密码哈希算法,它使用Blowfishkeying调度而不是对称加密算法。

您说盐没有帮助,但是彩虹桌呢?您为什么建议人们不使用盐?

作为Provos& Mazières的论文描述说,bcrypt内置有盐以防止彩虹表攻击。因此,我并不是说盐是没有目的的,而是说盐不能阻止字典或蛮力攻击(不是)。

尽管彩虹表最近作为博客文章的主题而受到欢迎,但它们并没有优雅地老化。密码破解程序的CUDA / OpenCL实现可充分利用GPU中大量的并行性,每秒达到数十亿个候选密码的峰值。您可以在不到2秒的时间内真正测试所有小于等于7个字符的小写字母密码。现在,您可以租用硬件,这使得每小时不到3美元的费用成为可能。每小时大约$ 300,您每秒可以破解约500,000,000,000个候选密码。

鉴于加密攻击经济学的巨大变化,对于任何人来说,浪费TB级的磁盘空间以希望受害者不使用盐都没有任何意义。破解密码要容易得多。甚至SHA2 256(salt∥password)\ text {SHA2} _ {256}(\ text {salt} \ | \\ text {password})SHA2 2 5 6的“好”哈希方案仍然是(salt∥password)完全容易受到这些廉价有效攻击的攻击,因此像bcrypt这样的自适应哈希算法的重要性。