首页 > 解决方案 > 对 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,使其对黑客不可读。我想它没有这样做还是我在这里遗漏了什么?

标签: bcrypt

解决方案


如果你有足够好的随机散列,攻击者必须暴力破解,这是低效的,并且可能需要比宇宙的生命周期更长的时间才能破解。

如果你不使用随机生成的哈希,它会大大减少破解时间。还有 不使用盐的彩虹桌。如果您有盐,则不能使用预先计算的哈希值。


推荐阅读