我正在创建一个网站,并尝试决定如何加密用户密码以将其存储在 SQL 数据库中。
我意识到使用简单的 md5(密码)是非常不安全的。我正在考虑使用 sha512(password.salt),并且我一直在研究生成有用盐的最佳方法。
我读过很多文章,指出盐应该尽可能随机,以向散列添加熵,这看起来是个好主意。但:
- 您需要将随机盐与哈希值一起存储
- 鉴于攻击者以某种方式访问了您的散列密码(并试图将散列反转为纯文本),这意味着他可能转储了您的数据库,然后也访问了您的随机盐
数据库中哈希旁边的奇怪值是盐,这不是很明显吗?如果攻击者可以访问盐和哈希值,那么如何更安全?
有人在该领域有专业知识吗?谢谢!
攻击者是“允许”了解盐 - 您的安全性设计必须确保即使了解盐,它仍然是安全的。
盐有什么作用?
Salt 使用预先计算的“彩虹表”帮助防御暴力攻击。
对于攻击者来说,盐使得暴力破解的成本更高(在时间/内存方面)。
计算这样一张表的成本很高,并且通常仅在可用于多个攻击/密码时才进行。
如果您对所有密码使用相同的盐,攻击者可以预先计算这样的表,然后将您的密码暴力破解为明文......
只要您为每个要存储散列的密码生成一个新的(最好的加密强度)随机盐,就没有问题。
如果您想进一步加强安全性
您可以多次计算哈希值(哈希哈希值等) - 这不会花费您太多钱,但它会使暴力攻击/计算“彩虹表”更加昂贵......请不要发明自己- 有经过验证的标准方法可以做到这一点,请参见示例http://en.wikipedia.org/wiki/PBKDF2 http://en.wikipedia.org/wiki/PBKDF2 and http://www.itnewb.com/tutorial/Encrypting-Passwords-with-PHP-for-Storage-Using-the-RSA-PBKDF2-Standard http://www.itnewb.com/tutorial/Encrypting-Passwords-with-PHP-for-Storage-Using-the-RSA-PBKDF2-Standard
NOTE:
如今使用这样的机制强制的因为“CPU 时间”(可用于彩虹表/暴力破解等攻击)变得越来越广泛(例如,亚马逊的云服务跻身全球最快超级计算机前 50 名,任何人都可以使用相对较小的金额)!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)