bcrypt - 对 bcrypt 和其他基于哈希的算法的担忧
问题描述
我必须将密码以加密形式存储在基于文本文件的数据库中,以确保系统安全。
我正在寻找可能的解决方案。我探索了基于哈希的算法,例如 MD5 和 bcrypt。发现 bcrypt 比 MD5 更推荐。我担心这些算法中的方法:
我仍然认为哈希中盐的存在是一个值得关注的问题。此外,算法公开了哈希字符串中盐的位置。因此,根据该格式,我们有:
$bcryptid$log_rounds$128-bit-Salt184-bit-Hash
如果黑客想要破坏其中一个帐户怎么办。他/她可以读取该帐户的 SALT,使用密码尝试对其运行 bcrypt 加密功能,并与数据库中的字符串 HASHED 进行比较。
请将以下内容视为伪代码:
for password_attempt in LIST_OF_POSSIBLE_PASSWORDS
if (hashpw(password_attempt, SALT ) == HASHED)
print "Hacker wins! I guessed a password!", password_attempt
我看到 bcrypt 只会使 hashpw 变慢,但是当它在数据库中的散列字符串中确定为明文时,我看不到使用 salt。api 应该破坏 HASHED 中的 SALT,使其对黑客不可读。我想它没有这样做还是我在这里遗漏了什么?
解决方案
如果你有足够好的随机散列,攻击者必须暴力破解,这是低效的,并且可能需要比宇宙的生命周期更长的时间才能破解。
如果你不使用随机生成的哈希,它会大大减少破解时间。还有 不使用盐的彩虹桌。如果您有盐,则不能使用预先计算的哈希值。
推荐阅读
- amazon-web-services - 一个集群的多个环境共享相同的 terraform 状态
- javascript - 如何在 ReactJS 实现移动版 SPA
- reactjs - 未使用 useState 钩子设置状态 | 反应JS
- sql - 是否有可能为同一用户的另一次出现分配 0?
- r - 如何更改 R 中 corrplot 中特定变量的字体颜色?
- c++ - 是否可以将可变参数模板参数传递给 va_list?
- javascript - Reactstrap 下拉菜单不适用于钩子
- javascript - React - 有条件地安装/卸载组件
- java - querydsl如何返回dto列表?
- hyperledger-fabric - 错误:所需参数“序列”为空。使用 --sequence 标志重新运行命令