一、彩虹表原理
1、彩虹表介绍
彩虹表(Rainbow Table)是一种破解哈希算法的技术,主要可以破解MD5、HASH等多种密码。它的性能非常让人震惊,在一台普通PC上辅以NVidia CUDA技术,对于NTLM算法可以达到最高每秒103,820,000,000次明文尝试(超过一千亿次),对于广泛使用的MD5也接近一千亿次。更神奇的是,彩虹表技术并非针对某种哈希算法的漏洞进行攻击,而是类似暴力破解,对于任何哈希算法都有效。
2003年7月瑞士洛桑联邦技术学院Philippe Oechslin公布了一些实验结果,他及其所属的安全及密码学实验室(LASEC)采用了时间内存替换的方法,使得密码破解的效率大大提高。作为一个例子,他们将一个常用操作系统的密码破解速度由1分41秒,提升到13.6秒。这一方法使用了大型查找表对加密的密码和由人输入的文本进行匹配,从而加速了解密所需要的计算。这种被称作“内存-时间平衡”的方法意味着使用大量内存的黑客能够减少破解密码所需要的时间。
彩虹表的根本原理就是组合了暴力法和查表法,并在这两者之中取得一个折中,用我们可以承受的时间和存储空间进行破解。它的做法是,对于一个Q = H(P),建立另一个算法R使得 P = R(Q),然后对于一个p,这样进行计算:
p0 -H-> q1 -R->p1 -H-> q2 -R->p2 -H-> q3 -R->p3 … -H-> q(n-1) -R->p(n-1) -H-> qn -R->pn
简单的说,就是把q用H、R依次迭代运算,最后得到pn,n可能比较大。最后我们把p0和pn都存储下来,把其他的结果都丢弃。然后用不同的p0代入计算,得到多个这样的p的对子。
我们在做破解的时候,给出了一个q,我们来寻找p。我们先把q做一次R运算得到一个值例如叫c1,然后把c1和每一个p对的最后一个做比较,假如和某一个 pn相等,那么有可能这个pn所对应的p(n-1)就是我们在追寻的q,为了验证我们把pn对应的p0再做一次链式计算,比对qn是否就是给出的q,如果 是,很明显p(n-1)就是我们在追寻的p,因为 p(n-1) -H-> qn。如果不是就继续寻找直到遍历所有的q0qn对。
事情还刚刚开始,我们再算q -R-> c1 -H-> -R-> c2,再比对c2是否是qn,如果是,那么p(n-2)就可能是p;再算c3、c4直到c(n-1),不知道这样说你明白了吗?
总的来说,就是用一个p0pn对来存储了一个链子的数据,如果n很大,就可以大大减小了存储的空间。这样带来的问题是必须做n次比对,时间更长,但是我们不需要瞬间破解,等待几秒乃至几天破解一个密码都是可以接受的。
彩虹表可以使用RainbowCrack或Cain来生成。表分割得越细,成功率就越高,生成的表体积也越大,所需时间也越长。
2、Rainbowcrack软件
rainbowcrack 支持windows/linux等平台的彩虹表破解,也支持GPU加速破解。
3、ophcrack软件
windows操作系统下的彩虹表口令破解工具,界面友好,与众不同,压缩储存,有自己独特的彩虹表结构,还有Live CD。
支持的HASH类型:LM,NTLM
支持如下的表:
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
本次使用XP free fast来完成
二、破解类容
1.Kali下安装彩虹表破解工具rainbowcrack
#sudo apt install rainbowcrack
2.生成彩虹表
(根据自己计算机情况,可生成一张或者多张彩虹表, 注意表的序号需要不同)
(生成的文件在/usr/share/rainbowcrack目录下)
#sudo rtgen md5 loweralpha-numeric 1 7 0 3800 4000000 0
#sudo rtgen md5 loweralpha-numeric 1 7 1 3800 4000000 0
…
3.排序彩虹表
#sudo rtsort .
4.破解下述的7位(小写加字母数字)md5值,找出其明文(每行一个md5的哈希值),并计算破解成功率:
F657CDB929D0B1B235DACEC3F19B635C f32bc1b7b9f1f93eea29a16e326309db 72edf03149af1b41ae89efead5cf46c8 2b3601fb7942b175fdc63d16a951eb31 fd95581e311dba3d46d76372e2ab52be 09d2f7cdb163db5b066289aeada16b8e 3cd94243ef174d62825739353906e035 ef3fc418fa1f66517e9dd73913106342 b53db62e62d259f8a18de9dcc1f60b4e 6af8032709ac134273da66f58377952d 4f3657880440424dbff054f00676e57c d7c60f4a3204bf75812489018c4ef01d a2bf58667cbc9bc2e9a08d0ce17d773d 116a780b386c42853eb27dc5ae714eea 2f703e94f07ced54685938d9b61eff49 0231f3e4bc0269d0a8984422021feb81 094685BA90A63BB56A815488FEFBFDBD 7917C11BA1FB40B9BB0F248338CB4BEA A448129F13D72F2FAB1EFBC8D9C4F5C2 0391513C124804CD5FC52B716C748823 74F768D6062C168AEBBD53D1E01B0EF0 CC7C09D1B0CFC26F689F04BB003B97F0 07F7A1E3AAE53F018F062B20007555A1 8403FEE300084E0194CAE0C437D7E404 161B569CAC45CD64732EC932F5ADF9DF 7DA4A823D124B82F0E384E71496EB1AC BF2EFFC5BB2AA5602291C94B1DF13C9F 0D0B179C477783105589CCD869506E24 25471B11F3F69E664ABA60788F11B33F 42F75DF2E9D9ECAB46BEC42731F0251F |
三、总结
1.彩虹表破解的原理
彩虹表预先建立一个可逆向的散列链并将其存储在表中,在破解时先查表得到可能包含结果的散列链,然后在内存中重新计算并得到最终结果。折中方式综合了计算暴力破解和查找表破解的优点,并将计算时间和存储空间降低到可以接受的范围。
2.列出对上述的30个左右md5值破解的成功率,以及如何提高破解成功率
成功了20个,提高破解成功率的方法是生成足够多张的彩虹表
3.彩虹表的防御措施有哪些
1、加盐,如果将用户密码后添加一段随机字符串,然后将随机字符串和散列后的哈希值存储在密码数据库中。彩虹表将不得不计算出盐化后的密码,而盐化后的密码会大大增加散列前的长度,从而使密码集合过大而变得不可能生成彩虹表。
2、已知彩虹表是应用于主流的哈希算法的,那么通过对哈希算法进行修改,自然能够防御彩虹表破解。