mysql - 加密已经散列的 BCrypt 密码是否过大?
问题描述
我正在使用 BCrypt 在服务器端对我的密码进行哈希处理。在我将它存储在我的 MySQL 数据库中之前,加密我的散列 BCrypt 密码是否过大,或者将散列直接存储在数据库中就足够了?
该网站建议在散列密码后对密码进行加密:
只要攻击者可以使用哈希来检查密码猜测的正确与否,他们就可以对哈希进行字典或暴力攻击。下一步是将密钥添加到哈希中,以便只有知道密钥的人才能使用哈希来验证密码。这可以通过两种方式完成。可以使用 AES 之类的密码对散列进行加密,也可以使用 HMAC 等带密钥的散列算法将密钥包含在散列中。
编辑:我正在用 Java 编码。我试图衡量增加的保护层与读取和检索用户登录密码的速度性能是否值得。
解决方案
这确实会提高安全性,但很高兴知道您通过加密获得了什么。
- 加密密码哈希可以保护弱用户密码免受字典攻击,在特殊情况下,攻击者可以读取数据库(包含哈希)但无法使用密钥/胡椒访问源代码。
这种情况并不像人们想象的那么罕见,典型的场景是 SQL 注入、丢弃的备份、丢弃的服务器......
为了能够对密码进行暴力破解,需要服务器端密钥,该密钥用于加密密码哈希。这意味着,能够从数据库中读取哈希值已经不够了,需要额外的权限才能从服务器读取密钥。在服务器上获得特权比能够读取数据库要困难得多。
Crackstation 是一个很好的咨询网站。在我自己的关于安全存储密码的教程的最后,我尝试解释这种密码哈希加密的细节。
推荐阅读
- ruby-on-rails - 使用 Ruby on Rails 仔细检查/帮助建模关系
- python - 无法使用pymysql连接到mysql
- ruby-on-rails - 如何阻止我网站上的用户访问 Rails_admin 面板 URL?
- python - 将矩阵发送到 Tensorflow-Serving 模块
- c# - Request.Form 与会话 MVC C#
- arrays - 在 ruby 中转换数组的哈希
- c# - 如何强制 WCF 对小于 768 字节的文件使用 MTOM 编码?
- git - 通过 REST API Bitbucket 将主分支(HotFixes)合并到功能分支中
- python - 如何从 Elasticsearch dsl 中的聚合中获取价值
- jquery - Cookie 层 GPDR 配置