bcrypt哈希如何完全阻止彩虹表查找?

时间:2019-07-10 20:39:10

标签: hash bcrypt rainbowtable

我非常想确切地了解bcrypt的比较功能如何工作,但是据我所知,还存在一些不足之处。

到目前为止,我的理解是

brcypt使用纯文本密码和随机生成的盐生成哈希密码。哈希密码是bcrypt版本,哈希盐和串联的哈希纯文本密码的组合。用户登录时,其纯文本密码将通过比较功能运行。到那时,bcrypt知道哈希中有多少个字符,以及从什么偏移量开始将哈希盐从完整哈希中切出。然后,它将盐与传入的纯文本密码连接起来,通过哈希算法运行它,以得出最终的哈希字符串。将哈希字符串与数据库中的哈希字符串进行比较,如果存在完全匹配的字符,则密码正确。

2个问题..

  1. 难道不应该消除散列吗?如果是这样,那么bcrypt如何知道如何解密哈希盐,然后使用它来哈希传入的纯文本密码。这对我来说没有任何逻辑意义。

  2. 如果编写了brcypts算法,使其始终可以创建哈希盐,而哈希盐始终知道如何解密,黑客难道不能仅使用该算法从数据库中获取每个哈希密码并将盐切成薄片吗?然后,它可以为每种盐创建一个彩虹表并破解每个密码?在我看来,这是合乎逻辑的。

请原谅我的问题没有任何意义。很高兴编辑。

阅读文章,阅读堆栈溢出问题,观看视频并询问高级工程师。

1 个答案:

答案 0 :(得分:0)

Rainbow表是您可以找到的每个密码及其哈希值的预编译列表。

您的彩虹桌有:

  • hash(“ password1234”)
  • hash(“ hunter2”)
  • 哈希(“正确的马电池钉书钉”)

但是它没有:

  • hash(“ȃ@?♽?ƅ?☸☑+ password1234”)
  • hash(“ȃ@?♽?ƅ?☸☑+ hunter2”)
  • 哈希(“ȃ@?♽?ƅ?☸☑+正确的马电池钉书钉”)

您可以继续创建一个彩虹表,其中包含该盐的每个密码。但这只是蛮力攻击。

第二个彩虹表对下一个选择其他盐的网站没有帮助:

  • hash(“®óó»♠☘☛?Ũh+ password1234”)
  • hash(“®óó»♠☘☛?Ũh+ hunter2”)
  • 哈希(“®óó»♠☘☛?Ũh+正确的马电池钉书钉”)

并消除所有的猜测,以及消除存储盐和确定盐的所有困难:现代密码哈希算法会为您的每个密码生成不同的随机盐,并将盐存储在生成的哈希字符串中:

  • hash(“ȼŚ?¥dĥ?®µ + password1234”)
  • hash(“ČɆǝ%ËȌpmLȫ+ hunter2”)
  • hash(“ ♼♄ș♰;⚁f)²ŋì?³UÍ+正确的马电池钉书钉”)

bcrypt本质上是什么?它会为每个密码生成不同的符号。