我在服务器端使用bcrypt散列我的密码。在我将它存储到mysql数据库之前,加密我的哈希bcrypt密码是不是太过了,或者直接将哈希存储在数据库中就足够了?
本网站建议在散列密码后对其进行加密:
只要攻击者可以使用哈希来检查密码猜测是否正确,他们就可以对哈希运行字典或暴力攻击。下一步是将密钥添加到哈希中,这样只有知道密钥的人才能使用哈希来验证密码。这可以通过两种方式实现。可以使用类似aes的密码对散列进行加密,或者使用类似hmac的密钥散列算法将密钥包括在散列中。
编辑:我在用java编程。我正在尝试衡量,为用户登录添加的保护层与读取和检索密码的速度性能是否值得。
1条答案
按热度按时间ne5o7dgx1#
这确实会提高安全性,但最好知道加密究竟能带来什么好处。
加密密码散列可以保护弱用户密码免受字典攻击,在特殊情况下,攻击者具有对数据库(包含散列)的读取权限,但没有使用密钥/pepper访问源代码的权限。
这种情况并不像人们想象的那么少见,典型的场景是sql注入、丢弃的备份、丢弃的服务器。。。
为了能够对密码进行暴力破解,需要服务器端密钥,该密钥用于加密密码散列。这意味着,能够从数据库中读取哈希值已经不够了,需要额外的权限才能从服务器中读取密钥。在服务器上获得特权比读取数据库要困难得多。
crackstation是一个很好的咨询网站。在我关于安全存储密码的教程的最后,我试图解释这个密码哈希加密的细节。