算法高级(23)-彩虹表(Rainbow Table)

一、彩虹表的定义

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

二、彩虹表的前身--预先计算的散列链

既然存储所有的明文密码对需要的空间太大,密码学家们想出了一种以计算时间降低存储空间的办法:“预计算的哈希链集”(Precomputed hash chains)。下面是一条k=2哈希链:

H函数就是要破解的哈希函数。
约简函数(reduction function)R函数是构建这条链的时候定义的一个函数:它的值域和定义域与H函数相反。通过该函数可以将哈希值约简为一个与原文相同格式的值。
这条链是这样生成的:

  • 随机选择一个明文aaaaaa
  • 对其求哈希得到281DAF40
  • R(281DAF40) 得到另外一个明文sgfnyd。
  • 继续重复2,3步骤
    存储的时候,不需要存储所有的节点,只需要存储每条链的头尾节点(这里是aaaaaa和kiebgt)

以大量的随机明文作为起节点,通过上述步骤计算出哈希链并将终节点进行储存,可得到一张哈希链集。

预计算的哈希链集的使用:破解一个hash值

  • 假设其刚好是920ECF10:首先对其进行一次R运算,得到kiebgt,然后发现刚好命中了哈希链集中的(aaaaaa,kiebgt)链条。可以确定其极大概率在这个链条中。于是从aaaaaa开始重复哈希链的计算过程,发现sgfnyd的哈希结果刚好是920ECF10,于是破解成功。
  • 密文不是“920ECF10”而是“281DAF40”:第一次R运算后的结果并未在末节点中找到,则再重复一次H运算+R运算,这时又得到了末节点中的值“kiebgt”。于是再从头开始运算,可知aaaaaa刚好哈希值为281DAF40。
  • 如是重复了k(=2)次之后,仍然没有在末节点中找到对应的值,则破解失败。

预计算的哈希链集的意义

对于一个长度为k的预计算的哈希链集,每次破解计算次数不超过k,因此比暴力破解大大节约时间。
每条链只保存起节点和末节点,储存空间只需约1/k,因而大大节约了空间。

R函数的问题

要发挥预计算的哈希链集的左右,需要一个分布均匀的R函数。当出现碰撞时,就会出现下面这种情况
111 --H--> EDEDED --R--> 222 --H--> FEDEFE --R--> 333 --H--> FEFEDC --R--> 444
454 --H--> FEDECE --R--> 333 --H--> FEFEDC --R--> 444 -H--> FEGEDC --R--> 555

两条链出现了重叠。这两条哈希链能解密的明文数量就远小于理论上的明文数2×k。由于集合只保存链条的首末节点,因此这样的重复链条并不能被迅速地发现。

三、彩虹表的实现原理

彩虹表的出现,针对性的解决了R函数导致的链重叠问题:
它在各步的运算中,并不使用统一的R函数,而是分别使用R1…Rk共k个不同的R函数(下划线表示下标)。

这样一来,发生碰撞通常会是下面的情况:
111 --H--> EDEDED --R1--> 222 --H--> FEDEFE --R2--> 333 --H--> FEFEDC --R3--> 444
454 --H--> FEDECE --R1--> 333 --H--> FEFEDC --R2--> 474 -H--> FERFDC --R3--> 909
即使在极端情况下,两个链条同一序列位置上发生碰撞,导致后续链条完全一致,这样的链条也会因为末节点相同而检测出来,可以丢弃其中一条而不浪费存储空间。

彩虹表的关键是构造R函数,优秀的R函数要保证计算结果均匀分布,即避免出现相同的明文密码。然而想构造优秀的R函数是件非常困难的事,不同的哈希链中可能会出现大量的重复数据,严重影响了密码攻击的效率。改良后的彩虹表在哈希链的计算过程中引入不同的R函数,有效减少不同哈希链中的重复节点,进一步提高了攻击效率。如果将不同的R函数用不同的颜色表示,众多的哈希链就会像彩虹一样,从里到外呈现出颜色变化,这就是彩虹表名称的由来。

四、彩虹表的获取

可以自己编程生成彩虹表,也可以使用RainbowCrack或Cain等软件来生成,有兴趣的读者可以自行百度。彩虹表的生成时间与字符集的大小、哈希链的长度成正比,如下图中“7位密码、全部字符集、哈希链长度为2万”的彩虹表大小为32G,本地生成大约需要332天,而从网上下载只需要2个小时左右,主流的彩虹表的大小普遍在100G以上,想要自己生成是几乎不可能的事,因此强烈建议黑客技术爱好者直接从网上下载。

彩虹表确实像它的名字一样美好,至少黑客眼里是这样。上表是7位以内密码在不同字符集下构造出的彩虹表的情况,彩虹表中哈希链的长度和个数随着字符集的增长而增长,彩虹表的大小和生成时间也随之成倍增加。7位数字组合在彩虹表面前简直就是秒破,即使最复杂的7位密码不到一个小时就能破解,如果采用普通的暴力攻击,破解时间可能需要三周。

Ophcrack彩虹表 官方下载地址:http://ophcrack.sourceforge.net/

120G彩虹表BT下载:http://www.ha97.com/code/tables.rar

五、彩虹表的使用(来源于远古贴)

彩虹表工具很多,常用到的彩虹表工具有Ophcrack、rcracki_mt、Cain、RainbowCrack等,主流的彩虹表有以下四种。

Cain: http://www.onlinedown.net/soft/53494.htm

Free Rainbow Tables
官方网址:http://www.freerainbowtables.com/en/tables/
镜像下载:http://tbhost.eu/rt.php
提供了多种类型的彩虹表下载,LM、NTLM、MD5、SHA1等。千万别把人家法语字符的表也下了,对国人来说,几乎没什么用,不过如果你有特殊需要,那就下吧……这里提供的都是.rti格式的,有别于传统的.ri格式,.rti比.rt的多了一个目录.index文件,据说遍列速度比.rt的更快(未曾对比过,无法确定是否属实)。
比较新的,用的索引和压缩,所以速度更快,体积更小,而且支持分布式破解。
支持HASH类型:LM,MD5,NTLM,SHA1,HALFLMCHALL
网上有已经生成好的表可供下载,真是造福于民。
扩展名:rti

Ophcrack
官网网址:http://ophcrack.sourceforge.net/tables.php
最常用的,界面友好,与众不同,压缩储存,有自己独特的彩虹表结构,还有Live CD。
支持的HASH类型:LM,NTLM
扩展名:乱七八糟的。

高级的表要花钱买,免费的表有(推荐只下2和5,要求高的可以下载3和5):
1.XP free(LM表:包含大小写+数字)380MB(官网免费下载)
2.XP free fast(和前一个一样,但是速度更快)703MB(官网免费下载)
3.XP special(LM表:大小写+数字+所有符号包括空格)7.5G
4.Vista free (NTLM表:包含常用密码)461MB(官网免费下载)
5.Vista special(NTLM表:包含6位的全部可打印字符,7位的大小写字母数字,8位的小写和数字)8G

RainbowCrack
官网网址:http://project-rainbowcrack.com/table.htm
通用的,一般的破解软件如saminside都支持,命令行界面,黑客的最爱,支持CUDA。
可以自己生成表,不要钱,传说中的120G就来自于此。
支持HASH类型:LM, NTLM, MD5, SHA1, MYSQLSHA1, HALFLMCHALL, NTLMCHALL.
扩展名:rt

最小彩虹表是最基本的字母数字表,就这样它的大小就有388MB,这是Ophcrack启动盘默认的表,该表可以在11分钟内破解所有可能14位数字字母密码组合中的99.9%。国内有比较流行的传说中的120G的彩虹表,国外还有几T的海量彩虹表。win2003及以前的windows操作系统的密码采用的LM算法加密,而Vista、Win7、Win2008/R2采用的是NTLM,NTLM比LM安全得多。

由于LM最多只有7位,所以它的彩虹表很小。而NTLM用了散列函数,所以理论上口令是可以无限长的,所以NTLM的彩虹表往往很大,120G肯定是不够完成所有可打印字符的,最大的彩虹表已经是T量级了。

某人用彩虹表测试破解MD5的小结:

ophcrack的表不支持破解md5,具体讲.rt .rtc .rti格式的,只需对比一组数据就可以。同样是破解12位的纯数字密码:

.rt的需要20GB .rtc的需要8.75GB .rti的需要1.67+1.67+1.68+1.71=6.72GB

明显是.rti的小,但是我试过,我下了上面.rti格式破解12位的6.72GB的表中的1.67GB,其破解效果很让我惊讶,我本以为纯数字的破解出来的可能性是四分之一,因为我只下了4个表中的一个,我只下了那1.67GB,但我试着破解了几个12位数字加密的32位md5,结果大多数都能跑出来,很少有跑不出的,汗。但当我惊喜时发现他并不支持破解16位的md5,然后去那国外的官方论坛去逛了逛,才发现这并不支持破解16位的md5。原来老外不来16位这一套,但我们国内的网站用16位的md5占绝大多数,所以入侵时大部分得到的是16位的MD5密码,而老外的就不来16位的,郁闷。

Ophcrack文档描述了它所能使用的彩虹表之间的差异:

字母数字表 10k 388MB 包含所有字母数字混合密码中99.9%的LanManager表。这些都是用大小写字母和数字组成的密码(大约800亿组合)。
由于LanManager哈希表将密码截成每份7个字符的两份,我们就可以用该表破解长度在1到14之间的密码。由于LanManager哈希表也是不区分大小写的,该表中的800亿的组合就相当于12*10的11次方(或者2的83次方)个密码。

字母数字表 5k 720MB 包含所有字母数字组合的密码中99.9%的LanManager表。但是,由于表变成2倍大,如果你的计算机有1GB以上的RAM空间的话,它的破解速度是前一个的4倍。

扩展表 7.5GB --xp special包含最长14个大小写字母(密码大于14 LM-HASH会全显示0或以AA3D开头,详见另一篇文章Windows LM/NTLM HASH加密)、数字以及下列33个特殊字符(!”#$%&’()*+,-./:;?@[]^_`{|} ~)组成的密码中96%的LanManager表。该表中大约有7兆的组合,5*10的12次方(或者2的92次方)密码。

NT 8.5 GB--vista special 我们可以使用该表来破解计算机上的NT哈希表,这是LanManager 哈希表所做不到的。该表包含了用如下字符组成的可能密码组合的90%:
·最高6位字符由大小写字母、数字以及33个特殊字符(同上面列举的一样)
·7 大小写字母及数字
·8 小写字母及数字
该表包含7兆种组合,对应7兆的密码(NT哈希表不存在LanManager哈希表的弱点)。

注意:所有这些彩虹表都有其特定适用的密码长度和字母组合。太长的密码(如数十位),或者包含表中没有的字符,那么用彩虹表就无法破解。

PS:无一例外,上面的方法需要机器,需要资源,所以,聪明的国人想到了另一种神奇的方法,不过我不能说。。。

六、为什么加盐哈希可以抵御彩虹表

彩虹表在生成的过程中,针对的是特定的函数H,H如果发生了改变,则已有的彩虹表数据就完全无法使用。
如果每个用户都用一个不同的盐值,那么每个用户的H函数都不同,则必须要为每个用户都生成一个不同的彩虹表。大大提高了破解难度。

所以,BCrypt算法因为每次加密的盐都是不一样的,很难被破解。


我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!

参考资料:

  1. https://baijiahao.baidu.com/s?id=1611935212672798027&wfr=spider&for=pc
  2. https://www.jianshu.com/p/732d9d960411
  3. https://blog.csdn.net/gscaiyucheng/article/details/17113073
  • 9
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
破解hash加密。{:3_55:} 这两天为了找这几张表可把我累的不轻啊。。今天终于让我给弄完了。。。 虽然我那个求彩虹表的帖子里有7.5G+8G的。。而120G的网上也能搜索到。。不过250G的那个还不是很多。。 为了方便大家。所以就把我弄到的种子打包发上来了。 包里有: XP special (7.5GB) formerly known as WS-20k [XP特殊(7.5GB) 前身为WS - 20K] 成功率:96% 字符集:0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !"#$%&'()*+,-./:;?@[ \ ]^_`{|}~(包括空格字符) Vista special (8.0GB) formerly known as NTHASH Vista的特殊(8.0GB) 原名为NTHASH 成功率:99% 密码长度为6或以下 字符集:0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !"#$%&'()*+,-./:;?@[ \ ]^_`{|}~(包括空格字符) 密码长度为7 字符集:0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 密码长度为8 字符集:0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 还有 网上流传的一个120G的种子。。 和 在看雪学院发现的一个250G的种子。。 就是上面的这些了。。 顺便给大家个ophcrack的下载地址。。。[url]http://ophcrack.sourceforge.net/[/url] ------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------- 120G的太难下了。现在2天了才13%。。。唉。。250G那个我暂时是不想下了。。也没时间下。。。 下午用了7.5G的表跑了下win2003的。。。14位以内。数字+字母+特殊符号。。30分钟跑出来了。感觉真的很不错。 不过如果用来跑XP的话可能会没结果的。因为现在大家很多人都是用的GOHST版的xp。。这系统的SAM文件加密方式好像很多都被改了。。 至少我在跑自己的时候没有成功。。不过2003的全成功了。。。 好了。不多说废话了。 要的拿走吧。。。 剩下的度娘会告诉你了。 {:3_63:} 没文化。。打点字都不知道怎么打。。累死我了。。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十步杀一人_千里不留行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值