背景

为了保护账号安全,几乎所有网站都不会明文保存用户的密码,而是用哈希加密算法对密码进行计算,将得到的哈希串保存在数据库中。每次用户登录时会将用户提交的密码用同样的算法计算,并将结果与数据库中保存的哈希串比对以验证用户身份。

可以采用密码字典的方式对哈希密码进行“撞库”破解,这种方式对长度较短、组合简单的密码确实很有用,但是遇到复杂的密码时往往力不从心,这种情况下彩虹表破解法就很高效了。

哈希加密算法是不可逆的,也就是说无论是网站的数据库管理员还是获取了密码数据的黑客,能看到的只是一长串毫无意义的字符,不可能将它还原成真正的密码。通常的破解办法有两个,一是用穷举法组合出所有可能的密码,然后经哈希算法计算,将结果与哈希串进行比对;二是提前生成可能密码的对应哈希串的对照表,密码攻击时直接根据哈希串从对照表中查询对应的密码。

第一种方法需要大量的计算,因此破解速度非常慢,以14位字母和数字的组合密码为例,共有1.24×1025种可能,即使电脑每秒钟能进行10亿次运算,也需要4亿年才能破解;第二种方法需要海量的磁盘空间来储存数据,仍以14位字母和数字的组合密码为例,生成的密码32位哈希串的对照表将占用5.7×1014 TB的存储空间。如果增加密码长度或添加符号,需要的时间或磁盘空间将更加难以想象,显然这两种方法是难以让人满意的。

彩虹表其实是两种方法的折衷,将耗时和占用空间控制在可接受的范围内。
彩虹表(Rainbow Table)是一种破解哈希算法的技术,是一款跨平台密码破解器,主要可以破解MD5、HASH等多种密码。它的性能非常让人震惊,在一台普通PC上辅以NVidia CUDA技术,对于NTLM算法可以达到最高每秒103,820,000,000次明文尝试(超过一千亿次),对于广泛使用的MD5也接近一千亿次。更神奇的是,彩虹表技术并非针对某种哈希算法的漏洞进行攻击,而是类似暴力破解,对于任何哈希算法都有效。

彩虹表的实现原理

首先定义哈希加密函数H,Q=H(P)表示将明文密码P加密成哈希串Q;然后定义规约函数R,p=R(Q)表示将哈希串Q转换成明文p,注意p不是真正的密码P。将一个可能的密码p0交替带入H和Q两个函数进行运算,先后得到q1,p1,q2,p2,…,q(n-1),p(n-1),qn,pn。其中p是明文,q是哈希串,它们组成的链称为哈希链,n是哈希链的长度,一般大于2000。将哈希链的首尾元素p0和pn做为一个数对存入表中,中间的其它元素全部删除。

由多个数对组成的表称为彩虹表。

密码攻击就是找到哈希串Q对应的明文密码P,利用彩虹表进行密码攻击的过程如下:c1=R(Q),将c1与彩虹表中每一个pn进行比对,如果相等,则P=p(n-1),由于彩虹表中只保存了p0和pn,因此需要重新计算该哈希链得到p(n-1);如果没找到相等的pn,计算c2=R(H(c1)),将c2与彩虹表中所有pn进行比对,如果相等,则P=p(n-2),重新计算该哈希链得到p(n-2);如果没找到相等的pn,继续计算c3…以此类推。

以上是彩虹表最基本的原理。

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

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

上表是7位以内密码在不同字符集下构造出的彩虹表的情况。

彩虹表中哈希链的长度和个数随着字符集的增长而增长,彩虹表的大小和生成时间也随之成倍增加。7位数字组合在彩虹表面前简直就是秒破,即使最复杂的7位密码不到一个小时就能破解,如果采用普通的暴力攻击,破解时间可能需要三周。

彩虹表的防御

虽然彩虹表有着如此惊人的破解效率,但网站的安全人员仍然有办法防御彩虹表。最有效的方法就是“加盐”,即在密码的特定位置插入特定的字符串,这个特定字符串就是“盐”,加盐后的密码经过哈希加密得到的哈希串与加盐前的哈希串完全不同,黑客用彩虹表得到的密码根本就不是真正的密码。即使黑客知道了“盐”的内容、加盐的位置,还需要对H函数和R函数进行修改,彩虹表也需要重新生成,因此加盐能大大增加利用彩虹表攻击的难度。

加盐(salt)其实是改变了哈希函数H的形式。由于彩虹表在生成和破解的过程中,都反复用到了函数H,H如果发生了改变,则已有的彩虹表数据就完全无法使用,必须针对特定的H重新生成,这样就提高了破解的难度。

防御彩虹表的另一种方法是提高H函数的计算难度,例如将H定义为计算一千次MD5后的结果。由于H在算法中的重复性,当单次H函数的计算耗时增加,意味着彩虹表的生成时间会大大的增加,从而也能提高破解的成本。

下载彩虹表

  • 官方下载地址:
    http://ophcrack.sourceforge.net/
  • 120G彩虹表BT下载:http://www.ha97.com/code/tables.rar

彩虹表的使用

彩虹表工具很多,常用到的彩虹表工具有Ophcrack、rcracki_mt、Cain等。
Cain: http://www.onlinedown.net/soft/53494.htm
freerainbowtables: http://www.freerainbowtables.com/
Ophcrack: http://ophcrack.sourceforge.net/tables.php
RainbowCrack: http://project-rainbowcrack.com/table.htm
RainbowCrack + LM Tables 破解SAM密码
http://www.t00ls.net/viewthread.php?tid=505
SAMInside + LM Tables 破解SAM密码完美组合
http://www.t00ls.net/viewthread.php?tid=503
最小彩虹表是最基本的字母数字表,就这样它的大小就有388MB。这是Ophcrack启动盘默认的表,很多人的收集便有了传说中的120G的彩虹表。win2003及以前的windows操作系统的密码采用的LM算法加密,而Vista、Win7、Win2008/R2采用的是NTLM,NTLM比LM安全得多。

高效的彩虹表密码攻击法相关推荐

  1. 关于彩虹表及攻击防范的不错的博文的归纳

    关于彩虹表及攻击防范的不错的博文的归纳,首先看的是这篇: 深入浅出彩虹表原理 深入浅出彩虹表原理 - 云+社区 - 腾讯云 然后还有几篇不错的,比如: 算法高级(23)-彩虹表(Rainbow Tab ...

  2. Kali密码攻击之——离线攻击工具

    在线密码攻击在渗透测试中很重要,但对于测试过程中得到的哈希,加密数据,又需要离线破解工具辅助解决 Creddump套件 kali下离线攻击工具中的Cache-dump,lsadump,pwdump,均 ...

  3. Kali密码攻击工具

    1. Kali密码攻击之在线攻击工具 1.1 Cewl Cewl可以通过爬行网站获取关键信息创建一个密码字典. 官网:http://digi.ninja/projects/cewl.php 1.2 C ...

  4. 高效的密码攻击方法:彩虹表

    为了保护账号安全,几乎所有网站都不会保存用户的密码,而是用哈希加密算法对密码进行计算,将得到的哈希串保存在数据库中,每次用户登录时会将用户提交的密码用同样的算法计算,并将结果与数据库中保存的哈希串比对 ...

  5. 彩虹表破解开机密码、MD5算法等的原理

    http://www.91ri.org/7593.html  自己发到91ri的,博客备份下. 前言 或许对于大多数人来说,实际中并不需要了解这些理论,能够使用现成的工具就行,但是我个人觉得了解了这些 ...

  6. (总结)密码破解之王:Ophcrack彩虹表(Rainbow Tables)原理详解(附:120G彩虹表下载)

    以下内容为转载,来自这里 PS:这玩意偶前几天用了一下,确实强悍无比,在这个表面前,md5等公开的加密算法不堪一击啊.记得我之前的公司开发的游戏账号都用修改过的特有MD5加密算法,建议开发人员都这样搞 ...

  7. 为什么MD5不可逆, 彩虹表是怎么攻击的

    为什么MD5是不可逆的? 先说大白话版本的,因为MD5算法里面有很多不可逆的运算.比如移位,假设:10010001 左移两位后是:01000100,你有什么办法把它移回来吗?移出去的已经找不回了哦. ...

  8. (总结)密码破解之王:Ophcrack彩虹表(Rainbow Tables)原理详解

    PS:这玩意偶前几天用了一下,确实强悍无比,在这个表面前,md5等公开的加密算法不堪一击啊.记得我之前的公司开发的游戏账号都用修改过的特有MD5加密算法,建议开发人员都这样搞,这样安全性就大大提高.如 ...

  9. 密码破解--Ophcrack Rainbow Tables彩虹表原理

    PS:这玩意偶前几天用了一下,确实强悍无比,在这个表面前,md5等公开的加密算法不堪一击啊.记得我之前的公司开发的游戏账号都用修改过的特有MD5加密算法,建议开发人员都这样搞,这样安全性就大大提高.如 ...

最新文章

  1. 网络传播侵权认定启用“服务器标准”
  2. 112.局部变量和全局变量在内存中是怎样存储的?113.WLAN无线传输协议
  3. 全局配置文件:mybatis-config.xml
  4. Yen 的k_shortest paths 算法的C++实现
  5. STM32 基础系列教程 6 - PWM
  6. 所谓的中间代码(ES5 的 “JSIL”)
  7. STL 之includes,set_intersection,set_union,set_difference,set_symmetric_difference
  8. C#模拟MSN窗体抖动[原创]
  9. python进程数据共享_python程序中的进程操作-进程间的数据共享
  10. IT兄弟连 JavaWeb教程 Servlet线程安全问题
  11. Kotlin — 心印(熟悉与锻炼Kotlin语法)
  12. 如何免费制作支付宝微信合并收款二维码?
  13. c语言正弦函数图像,正弦函数图像
  14. 双系统安装deepin20_win10deepin15.10双系统安装教程
  15. 接口测试需要了解的八种数据类型
  16. Matplotlib绘制漫威英雄战力图,带你飞起来!
  17. 为程序员爆肝整理的防治脱发大集锦
  18. python股票量化交易_量化交易之路:用Python做股票量化分析 (阿布著) 完整pdf扫描版[103MB]...
  19. matlab 双边滤波(彩色图)
  20. linux内存管理笔记(十一)---CMA

热门文章

  1. iphone12mini没有5g吗?iphone12mini支持5g吗
  2. 课体回顾,杂质半导体
  3. iphone android 朋友圈,最近很火的微信空白朋友圈发布教程!安卓、苹果通用!
  4. Spring MVC常用注解汇总
  5. python 多进程一篇学懂
  6. 色情演员识别?绝对是人脸识别最糟糕的应用……
  7. MEM/MBA 考研高频单词总结(03)
  8. set集合特点级子类的特点
  9. 枚举类型(enum)
  10. 如何在Tableau中计算百分比