bcrypt哈希如何防止彩虹表查找?

问题描述 投票:0回答:1

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

到目前为止,我的理解:

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

2个问题..

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

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

请原谅,如果我的问题没有任何意义。乐于编辑。

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

hash bcrypt rainbowtable
1个回答
0
投票

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

您的彩虹桌子有:

  • 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的作用是什么;它为每个密码生成不同的盐。

© www.soinside.com 2019 - 2024. All rights reserved.