【问题标题】:Understanding Hash Tables and rainbow tables了解哈希表和彩虹表
【发布时间】:2016-01-31 18:56:39
【问题描述】:

所以我试图更好地理解哈希表和彩虹表,在我的阅读中,我觉得我开始掌握它的窍门。有一个检查你的知识问题是这样的:

"如果你有一个存储 sha-256 密码的哈希表,并且你希望整个表都存储在内存中,并且你有 4GB 的内存,你可以破解多少个密码?如果你使用一个包含 20 个密码的 Rainbow 表每条链,你能破解多少个密码?(假设密码是10个字符)"

这完全让我怀疑我是否知道我所阅读的内容。所以这就是我到目前为止想出的。

如果每个 ShA-256 散列的大小始终为 256 位,并且我们知道单个兆字节中有 8388608 位,则等于每兆 32768 个 SHA-256 密码。 4000 兆,所以我们将 32768 乘以 4000,得出存储在内存中的 131072000 个密码。

但是如何将它应用于彩虹表中的 20 个链密码?我认为彩虹表存储了哈希值和它们的反面,这样虽然它占用了更多空间,但它可以更快地解决。是否有公式或其他东西可以确定我丢失了多少空间以及丢失了多少密码?

非常感谢任何帮助或知识。我感谢您的时间和智慧。 :)

【问题讨论】:

  • 我不知道链是什么,但是第一次计算是错误的,因为你没有考虑密码的存储。
  • 嘎。我什至没有想到这一点。密码本身的大小不是一个变量,因此无法准确计算吗?
  • 是的,但您的任务有提示“假设密码为 10 个字符”,我假设这也延伸到第一个问题。
  • 嗯。我以为它只适用于彩虹桌部分,但我想它确实可能适用于两者。我将开始尝试弄清楚 10 个字符有多大。但是一旦我知道了这一点,我是否只是开始猜测直到我得到一个可行的大小,减少大小以适应哈希和密码的数学是什么?
  • 不要忘记,当您将其存储在哈希表中时,您当前的计算只涉及您需要存储的原始数据,而没有其他结构,例如哈希/索引。这在很大程度上取决于您使用的实现和语言(Java 的开销比 C 高得多)。

标签: hash cryptography hashtable rainbowtable


【解决方案1】:

想象一个这样的彩虹表:

表是链的列表

链是密码和哈希

但是等等……让我们把这个密码称为 P1 和链中我们称为 He 的散列

假设我们有一些散列函数 h(x) 和一些归约函数 R(x),它们会将 h(x) 的输出分配给我们的键空间中任意但均匀分布的密码

如果您的链长为 20,则简单地说:

取P1 ...计算H1=h(P1)
将 P2 计算为 R(h1) ... 将 H2 计算为 h(P2)
将 Pn 计算为 R(hn-1) ... 将 Hn 计算为 h(Pn)
直到 20 步后,我们得到 P20 和 H20 ......这也是 He

现在我们存储 P1 和 He ... aka P1 和 H20

这是一条链

一个表由一个列表组成......一个排序的链列表......按哈希排序 如果您有一些哈希 x 需要破解,请执行以下操作:

分配 y = x
在表中查找 y
如果找到,获取相应链的密码,并重建曾经形成链的所有密码/哈希元组并查找您的密码...
如果没有找到,分配 y = h(R(y)) 并重新开始,直到找到匹配项,或者达到链长

所以...就您最初的问题而言...

如果您使用普通字典查找密码,则需要存储成对的密码和哈希值...每个哈希值一个密码...一对/元组将为您带来攻击一个密码的能力

如果您使用彩虹表,您仍将在内存中为每个哈希存储一个密码...但是时间内存权衡将允许您攻击更多哈希...在理想的世界中,这将是您的链长度的乘数...在现实世界中,这取决于 R() 有多好...可能会发生冲突,这将导致一个密码/哈希出现在多个链中,从而为您的彩虹表引入冗余

【讨论】:

    【解决方案2】:

    使用彩虹表,您只能存储一小部分可以破解的哈希值。哈希被组织成链,只有链的第一个和最后一个元素需要存储。因此,链长为 20 时,每条链将存储 2 个哈希值,并且能够破解 20 个哈希值。因此,您获得了 10 倍的收益。

    所以无论你在没有彩虹表 (131072000) 的情况下得到什么结果,你乘以 10 并得到如果你使用链长为 20 的彩虹表你可以破解的密码数量。

    实际上,链是由哈希和密码交替组成的。因此,您可以选择将链的开头和结尾存储为密码而不是哈希。由于密码空间肯定小于散列空间,因此您可以将每个链 a 的开头和结尾存储为密码的压缩形式,并获得一些内存以存储更多链。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-20
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      • 1970-01-01
      • 2020-05-04
      相关资源
      最近更新 更多