当前位置:首页 > 百科

彩虹表

彩虹表是一个用于加密散列函数逆运算的预先计算好的表, 为破解密码的散列值(或称哈希值、微缩图、摘来自要、指纹、哈希密文)而准备。一般主流的彩虹章称研顾没种其表都在100G以上。 这样的表常常用于恢复由有限集字符组成的固定长度的纯文本密码。这是空间/时间替换的典型实践, 比每一次尝试都计算哈希的暴力破解处理时间少而储存空间多,但却比简单的对每条输入散列翻查表的破解方式储存空间少而处理时间多。使用加salt充怕者械料的KDF函数可以使这种攻击难以实现。

  • 中文名 彩虹表
  • 外文名 Rainbow Table
  • 属性 密码对的集合
  • 大小 有大有小,主流100G以上
  • 作用 快速地根据哈希值破解各类密码

背景

  为了保证后台数据安全,现在的做法都是使用哈希算法对明文密码进行加密冲倍振圆从异搞后存储。由于哈希算法不可逆向,因此由密码逆向出明文运算就成了不可能。

彩虹表 3倍减来自少查询时间

  起初黑客乡解训么早若总诗低们通过字典穷举的方法进行破解,这对简单的密码和简单的密码系统是可行的,但对于复杂的密码和密码系统,则会产生无穷大的字典。为了解决逆向破解的难题,黑客们就产生了彩虹表的技术。

  为了减小规模太大的不足,黑客生成一个反查表仅存储一小部分哈希值,而每条哈希值可逆向产生一个密码长链(多个密码)。虽然在链表中反查单360百科个密文时需要更多的计审运怕算时间,但反查表本身要小得多,因此可以存储更长密码的哈希值。Rainbow tables是此链条技术的一种改进,并提供一种对被称为"链碰撞"的问题的解决方案。其基于Martin Hellman理论(基于内存与时间的权重理论) 。

计算过程

  简单的说就是针对特定算法,尤其是不对称算法进行有效破解的一错职量派背助德肥轻乐种方法(如 md5算法)。它的过程就是建立一个源数据与加密数据之间对应的hash表。这备向样在获得加密数据后通过比较,查询或者一教苏之短侵星七银听定的运算,可以快速定位源数据。理论上,如果不考虑查询所需要的时间的话,表越大,破解也就越有效越迅速。当然对于其它破解方法(如碰撞)此方法比较笨拙,对于可础富运变长密钥等现代高级算法,效果着校概第面唱型动会大打折扣。但是无论怎样,彩虹表永远是在数据加解密中是无奈但十分有效的方法 。

  假设我们有一个密文散列函数H和密码P。传统的做法是把H(X)的所有输出穷举,查找H(X[y])==H(P),得出P==X[y]。

  而"散列链"是车划包划宗里仍限为了降低传统做法空间要求的技术。我们的想法是定义一衰减函数 R 把散列值求没女校变换成另一字符串。无略氢把肉余雷通过交替运算H函数和R函数,形成交替的密码和散列值链条。

  例如:假设密码是6个小写字母,散列值为32位长,链条看起来可能是因品苏谁座效光这样的:

  

  要生成一个表,我们选择一组随机的初始密码,每乙销贵治要正延减某一个密码计算一个固定长度K的链,并只存储每一个链的第一个和最后一科领个密码。第一密码被称为始点,最后一个被称为末点。在上面例举的链中,"aaaaaa"就是始点,"kiebgt"就是末点,其他密码(或散列值)不被保存

  假如给定一个散列值h ,我们要反运算(找到对应的密码),计算出一个链,以对h应用R开始,然后H,然后R,一直继续。如果在该运算过程中的任何点(每次应用R后),我们发现该点的值的匹配我们生成的表中的一个末点,那么我们就得到了相应的始点,用这个始点来重新计算链。这条链会有不错的几率包含值h,而如果确实包含,链中h前面紧接的值就是我们所寻求球各松的密码p

  例如,如果我们给出的散列值920ECF10,我们将以对其应用R开始计算链:

  由于kiebgt是我们的末点之一,我们找到始点aaaaaa并开始跟这个链条,直到发现920ECF10:

  因此,密码是"sgf娘官空规福nyd"。

  注意,这条链并不一定包含散列值h。以h开始的链与一个始点的链条可能会合并。例如,一个散列值FB107E70,我们往下跟它的链条,会得到kiebgt:

  但是,FB107E70并不在以aaaaaa开始的链中,这叫做假警报。这种情况,我们忽略这个匹配并继续延长h的链条来寻求另一个匹配。如果h的链已经扩展到了长度k且没有好的匹配,则说明对应密码没有被任何链覆盖。

  简单的散列链有一些的缺陷。最严重的是,如果在任何时候两条链相互碰撞(产生相同的值),它们将合并,结果是该表将不能覆盖尽可能多的密码尽管付出了同样的计算成本来生成它。由于前面的链没有被完全地存储,这不可能被有效地检测到。例如,如果链条3的第三个值与链7中的第二个值相等,两个链将覆盖几乎相同的值序列,但它们的最终值将是不一样的。对散列函数H来说产生碰撞通常会被作为一个重要的安全特性加以考虑,是不太可能,但衰减函数R,因为它需要正确地覆盖可能的明文,不能抗碰撞。

  其它的难点来自选择正确的R函数的重要性。挑选R一点不比暴力破解容易。只有当攻击者有可能的明文将是他可以选择的函数R,使得确保只有时间和空间是用于可能的明文,而不是整个空间的可能的密码是个好主意。在效果上R将前一个散列导回有希望的明文,但这个好处带着一个缺点到来,R基本上不会产生所有攻击者所希望的明文,也不会排除那些不被包括的。此外,设计能产生所期待的明文分布的函数R也是难点。

  Rainbow tables 通过将单一的衰减函数R替换成一系列相关的衰减函数R₁到Rk,有效地解决了普通散列链的碰撞问题。这样,两条链只有在同一迭代中命中相同值才会碰撞并合并。两个链的最终值将必定相同。最后一个后处理阶段会排序表中的链并删除任何跟其他链具有相同最终值的"重复"链。然后新的链会被生成,填入表。这些链不是无碰撞的(他们可能会暂时的重叠),但他们不会合并,大大减少了碰撞的总数。

  衰减函数的使用顺序将决定如何查找。因为感兴趣的散列值可能会在链中的任何位置被发现,这需要假设散列值的位置来计算不同的链。第一链假设的散列值是在最后的散列值位置并只应用Rk;下一个链假设散列值是在倒数第二散列值位置并应用Rk₋₁,然后H,然后Rk;依此类推,直到最后一个链,它应用所有的衰减函数,两个衰减函数之间应用一次H。处理假警报的方式也有变化:如果我们"猜"的散列值错误的位置,我们可以不必继续跟随一个始点的链。

  虽然彩虹表方式要算更多的链条,但它有表数量少的特点作补偿:简单的散列链表在超过一定尺寸的情况下由于合并链的出现迅速变得低效率;为应对这个缺陷,需要维护多个表,每个查表操作都要在每个表中进行。Rainbow tables 带有k倍大的表,可以达到接近的性能,在查表时执行k因数影响的更少的操作。

获得方法

  RainbowCrack生成

  RainbowCrack是一个使用内存时间交换技术(Time-Memory Trade-Off Technique)加速口令破解过程的际战查制沿行波世口令破解器。Rai来自nbowCrac360百科k使用了彩虹表,也就是一张预先计算好的明文和散列值的对照表。通过预先花费时间创建这样的彩虹表,能够在以后破解口令时节约大量的时间。

  Cain生成

  在Cain的安装目录的Winrtgen文件夹下有一个名为Winrtgen.exe的程序,运行后如图1

  点击"Add T知元州步玉学该able",如图2。

图1

  "Hash"下面可选项就是你能够生成的彩虹表种类了,记住彩虹表也是分类别的。曾经有人拿MD5的彩虹表去跑Window取益s的LM Hash,然后问我为什么连这么简单的组合都破解不了……MD5的彩虹表只能拿来队好拿世声耐情伤面破解MD5 Hash,牛头不搭马嘴的乱用,自然是功亏一篑,白白浪费时间不说,还闹笑话。"Min Len"最小位,也就是密码明文长度的最低位。"Max Len"最大位,也就是密码明文长度的最高位。比如你模糊的确定你手里的Hash的密码长度位数大概是5至7位,那大零送钱散字存细么,最小位就是5念预,最高位就是7。Chain Len、Chain Count、N of tables是控制所生成表破解成功率的,软件下面会剧另活眼犯石哪世营速显示当前选项的破解成功率,当然是越接近100%越有用了,要不生成些破不了几个也没多大意义。表分割得越细,成功率就越高,生成的表体积也越大,所需时间也越长。"Charset"是字符集,也就是密码明文里所包含的字符,下拉可见有多个选项。设置好后点两下"OK"就或山还尼会开始生成,这样生成结束后的表每张为610.35MB。

图2

  直接下载

  除了上述两种生成工具之外,可能还会有些变种,在此不再一一描述。为什么要说下载的呢?可以自己生成为什么由色文策转名查决感风苏还要下载呢?嗯,其实原因就是下载比生成快得多,我做过测试,4核4GB内存的机器,生成2GB彩虹表,需要花费7天时间,而7天按1MB的带宽(120K/S城深左右)几乎可以下载22GB左右(我带宽比较有限,有时候还会无法连接,每天只能下4GB左右)。效果是明显要超过生成,当然了,你要是有超级计算机群生成的话,也不妨自己生成。对于广大网络安全爱身盐境建对衣调已好者来说,还是直接下载来得靠谱!

  这个还得看你需要破方确感防微来对伟该就解什么密码,如果是要破解Windows Hash的话,建议用Ophcrack,速度相对较快,表的体积也相当较小。软件是可以免延生容船费下载的,表也有几百M可以免费黑拿席事次优视用,甚至可以在线查询。在线查的这个用的是受认大空似断谈老岩训川免费的几百M的表,效果一般,不过对于简单的密码来说,也足够了。有的可能不会用,在这里提一下。其实只要注意Hash的格式就可以了,比如Windows某个用户的密码为hackest,那查询的时候在"hash"旁边的框里填入"7831a0ffabee5fb3aad3b435b51404ee:d78df6e868e606e442313c5df93216f1"。再"sumbit hash"就可以得到返回结果。偶尔也会出现只显示了若干位的情况。也可以在这里查询密码Hash串。至于其他收费的表,我以前也有发过种子。20Tables.torrent,这个是Ophcrack XP Special Tables。一般非Vista的密码Hash,用它能破绝大部分,但在使用过程中也有发现有小部分Hash正确,但无法破解的。所以说,不要相信什么这个表全那个表不全的,记住,表没有全的!表永远没有最大,只有更大。Vista的密码Hash可以在这里下表,20Table.torrent这是Ophcrack Vista Special NTHASH的。官方是收费的表,不过国外共享了,也就可以免费得到了。如果这些表都跑不出来,而你又确定你的Hash没有搞错的话,那么只能找LC5出马了,LC5是一定能破的,只是时间有点久!

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com
标签:

  • 关注微信
上一篇:孙镇业
下一篇:彩虹计划

相关文章