Bcrypt相较于md5+盐有哪些优势?

13

请务必阅读更新,因为我的“实际困惑”在其中。

自 Joomla! 1.5 以来,md5 + salt 一直是事实标准,而现在 Joomla! 开始支持 bcrypt 哈希算法已经有一段时间了。

现在我的问题是:“作为终端用户,如果我立即开始使用Bcrypt,与当前算法MD5+salt相比,我会得到什么好处?对于每天只有几百个访问者的普通博客,是否会有任何区别?”

更新:

我在某处读到由于 md5 哈希速度快,我的密码可以在几天/几个月内很容易地被计算出来。

但这不需要攻击者已经拥有我的哈希值来进行比较吗?如果他/她首先没有哈希值,那么我使用的哈希算法如何影响我的网站安全性呢?最终他还是要通过暴力破解我的登录页面吧?

如果归根结底是靠暴力破解,那么Bcrypt 是否同样容易受到密码猜测的攻击呢?


3
无论怎样看待MD5,它仍然是MD5。是时候进入21世纪了;-) - Funk Forty Niner
1
http://security.stackexchange.com/questions/61489/is-salted-md5-or-salted-sha-considered-secure --- http://security.stackexchange.com/questions/19906/is-md5-considered-insecure --- https://crackstation.net/hashing-security.htm - Funk Forty Niner
谢谢回答,请阅读更新(我的真正困惑)。 - Mohd Abdul Mujib
2
如果他们一开始就没有哈希值,你根本不需要进行哈希。如果没有人查看您的数据库,纯文本就可以了,但是您特别为某些人知道哈希值的情况而这样做。 - dryman
1
你真的不应该使用MD5密码哈希,而应该使用PHP的内置函数来处理密码安全。如果你使用的是低于5.5版本的PHP,可以使用password_hash() 兼容包 - Jay Blanchard
显示剩余2条评论
3个回答

7

但这难道不需要攻击者已经拥有我的哈希值来进行比较吗?如果他/她一开始没有哈希值,那么我使用的哈希算法如何影响我的网站安全性?最终他还是得通过暴力破解我的登录页面吧?

首先,不需要。许多网站允许无限制尝试登录。使用 MD5 时,假设服务器能够处理,用户可以通过快速尝试大量密码来进行暴力破解。bcrypt 的缓慢性质保证了这样的尝试将会更加缓慢。

其次,在计算机安全领域中,关键的安全概念是defense in depth。你不想只有一个安全层级 - 很容易意外编写 SQL 注入漏洞,导致攻击者可以转储密码哈希。通过使用 bcrypt,你可以限制此类漏洞可能造成的损害


那么,您的意思是,Bcrypt只有在以下情况下才对我有益:1.如果我的网站已经被攻击并且所有散列密码都泄漏了;2.通过减缓整个认证过程来减缓暴力破解,对攻击者和真实用户都一样。 - Mohd Abdul Mujib
好的,1. 当我说我已经在使用深度防御时,我指的是能够防止上述行为类型的插件>>几次尝试失败后IP被屏蔽。或者在几次尝试失败后需要验证码。2. 如果攻击者能够转储我的哈希密码,那么他很可能能够转储我的整个数据库。3. 我理解关于“攻击者不更改密码并保持管理员密码不变以防止引起怀疑”的攻击方法,并且我理解bcrypt在这种情况下可以“更好地”发挥作用。 - Mohd Abdul Mujib
@MohdAbdulMujib 我想表达的简短意思是:网页安全专家一致认为MD5是一种极不安全的密码哈希方式。请勿将其用于此。 - ceejayoz
1
如果攻击者能够转储我的哈希密码,那么他很可能能够转储整个数据库。是的,但潜在的只读访问。这些密码使用MD5意味着他们可以将只读访问转换为管理员帐户的有效登录,登录并开始删除内容。还要考虑:用户可能已经在其他网站上使用了相同的电子邮件+密码,因此通过存储MD5,您正在冒着风险影响他们在其他网站上的其他帐户。 - ceejayoz
假设您的网站已经遭到入侵。有些人在这里会混淆MD5和MD5+Salt(后者要安全得多),但它仍然不如bcrypt安全。而且,您的用户很可能在其他网站上使用相同的密码,这将会泄露他们的其他信息。实际上,您不希望发生这种事情。 - Elin
显示剩余5条评论

6
据我所了解,Bcrypt更加安全。它被设计成较慢的算法,这使得攻击者很难通过暴力破解密码。它可以配置为迭代次数越来越多,这在CPU变得更加强大的情况下非常有用。
拥有可配置的缓慢性正是重点:您可以使函数尽可能地缓慢。或者更准确地说,您可以让函数尽可能地缓慢,只要您能够容忍:确实,对于攻击者和防御者来说,缓慢的函数都是缓慢的。
以下链接可能会有所帮助:

https://security.stackexchange.com/questions/61385/the-brute-force-resistence-of-bcrypt-versus-md5-for-password-hashing

https://www.bentasker.co.uk/blog/security/201-why-you-should-be-asking-how-your-passwords-are-stored

bcrypt和多次哈希之间有什么区别?

https://www.quora.com/What-is-the-difference-between-bcrypt-and-general-hashing-functions-like-MD5

https://security.stackexchange.com/questions/4781/do-any-security-experts-recommend-bcrypt-for-password-storage/6415#6415


谢谢提供的链接,虽然我已经阅读过了,但它们并没有解释完全不妥协的网站密码的区别。 - Mohd Abdul Mujib
3
在一个“完全未被攻破的网站”中,您可以以明文形式存储密码,哈希是为了防止攻击者读取数据库并知道哈希值(SQL注入、废弃服务器、丢失备份等情况)。然后,攻击者可以使用本地系统的全部速度(离线攻击)进行暴力破解。使用普通硬件,您可以每秒计算约100亿个MD5 - martinstoeckli

1
除了“盐”外,BCrypt还接受一个“cost”参数-这是它的主要特点。成本是您想要应用于哈希的计算工作量。将其视为重新对结果进行2^n次哈希,其中n是成本。
哈希后的字符串将类似于cost;hashed_string(例如20;5D4140)。当然,这不是真实格式,而是一种过度简化以显示想法。
这个“成本”概念使BCrypt“过时抵抗”。如果在10年内计算能力增加了1,000倍,您只需要使用更高的“n”重新哈希哈希(无需拥有原始值来增加成本)。

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