http://www.91ri.org/7593.html  自己发到91ri的,博客备份下。

前言

或许对于大多数人来说,实际中并不需要了解这些理论,能够使用现成的工具就行,但是我个人觉得了解了这些可以将工具使用的更好,更何况理论研究中思维的碰撞也是一种乐趣

一、 简介

彩虹表技术以时空折中理论为基础,即增大存储空间的开销缩短密码破解所需要的时间,时空折中的相关理论在密码学中应用很广,最初是在1980年,公钥密码学的提出者之一Hellman针对DES算法提出的一种攻击方式,经过不断地改进,2003年瑞典的Philippe Oechslin 在Making a Faster Cryptanalytic Time-Memory Trade-Off一文中提出了一种高效破解windows开机密码的时空折中算法,并命名为彩虹表,当然当时是针对Windows Xp开机认证的LM-HASH算法。除了破解开机密码,彩虹表目前还应用于散列密码如SHA、MD4、MD5等算法的破译,速度快、效率高、疗效有保证,Philippe的论文中提到:“1.4G的彩虹表可以在13.6s内破解99.9%的数字字母混合型的Windows密码”,具有很强的实用性。

二、 彩虹表的原理

设想一下这种情况:你已经拿到了一台服务器的Shell,并且通过HashDump工具获取了主机存储的密码的Hash值,怎么据此得到明文的用户密码搞定管理员权限呢(当然提权方法很多,如直接扔进在线解密网站或是用wce、minikazi之类的工具直接搞到原始明文密码,或者干脆绕过密码提权,这里只是做个示例),有两种很容易想到的方法:一种是字典破解,二是暴力穷举,这两种方式应用的都非常广,字典破解存储常用的用户名密码和其对应的密码Hash值,破解时只需根据需要破解的密码找到对应的明文密码即可,破解速度快,但是破译效率依赖于字典的构造,并且经常需要大量的存储空间存放字典文件;暴力破解法一般比较盲目,常见的形式就是依次计算1-N位字符串的密码值与需破解的密码进行比较,成功率全靠人品。这两种方法分别对空间和时间的要求比较大,久之,人类开始寻找折中的方法,彩虹表就是时空折中的典型,下面我就以彩虹表的生成和查表这两个步骤来介绍彩虹表破解的原理。

2.1 造表过程

此处仅介绍彩虹表的原理,对Hellman等人对时空折中算法的研究就不做详细介绍了,有兴趣的可以看一下Hellman在1980年发表的论文:A cryptanalytic time-memory trade-off,对理解彩虹表的构造过程会有很大帮助,Philippe Oechslin这人只是在Hellman的基础上做了稍微改进。

彩虹表实质上还是属于字典破解的一种,不过不再是简单的明文—密码的对应,为了节省字典存储空间,彩虹表省去了能通过计算得出的数据,达到这点的关键在于设计出一个函数族Rk(k=1、2、3、4……)将hash密文空间映射回明文的字符空间。

这么说很高端大气,一般没人听的懂,我当时也没懂神马映射、空间啥的,其实就是把hash密文再按照一定的规则转化成普通字符串的转化函数,例如字符串qshud的32位MD5密文e978c6b019ac22a3fd05b14d36621852,最简单的转化处理就是直接截取第一个字符e。因为e也可能是某些人的口令哦,再对字符e进行32位MD5运算得到密文e1671797c52e15f763380b45e841ec32,再取前两位字符e1,继续MD5运算得到cd3dc8b6cffb41e4163dcbd857ca87da,再取前三位cd3……,这时转换的函数族Rk其实就是截取密文的前k位,k=1、2、3、4…….照此法动作若干次(次数不限、本例为8次),得到5626cf5e6f1093c2840a16512f62c3b5,再取前八个字符 5626cf5e.

好了,下面我们就只需要存储字符串qshud和 5626cf5e就齐活了,刚才中间的字符数据e、e1、cd3… d989670就不用管了,它们属于可以通过qshud计算出的数据,不必进行存储,需要的话稍微花些时间计算即可,亲们必须先记着这种只存储首尾字符串的存储方式,下一节查表过程会继续讲到这种存储如何配合查表过程的。

上一段的例子只是针对MD5算法最简单的一种彩虹表,彩虹表可以处理的hash算法很多,进行的hash运算我们就记为H,函数族Rk(k=1、2、3、4……)都可以自定义,最初开始处理的明文再多选取一些,如图1中第一列的wikipedia、abcdefgh…passwd等,依次计算就得到了图1中的几条字符串链。

图1 简化的彩虹表造表流程图

       Ps:一条条的链并列的形状就像是彩虹的色带,这就是彩虹链(表)的由来。

图1的例子使用的是自定义的R1、R2、R3函数,注意可不是上例提到的截取前几个字符形式的Rk函数,只是为了便于说明图1中的彩虹表虚构出的,具体转换方式不必深究。我们最后存储的只有wikipedia-rootroot、abcdefgh-myname…passwd-linux23,这就是彩虹表造表的大致过程,为了便于说明,示例比较简单,在实际造表中还需要考虑更多的因素,如最重要的Rk系列函数构造、每一条链的长度、造表需要的空间、存储格式等等。

2.1 查表过程

如果已经有了上文图一中生成的彩虹表,怎样找到hash函数H的一条密文re3xes对应的明文呢?解释这个破解过程需要明确一点:如果re3xes对应的明文属于彩虹表中的某条链,那么就有可能找到其对应的明文,注意这里的“属于某条链”不仅仅是指属于彩虹表的一条链中存放的头尾两个字符串,还包括这两个字符串中的中间数据,图一中中间计算的明文数据secret、jimbo也算是属于彩虹表的第一条链中,同理bernie、zurich属于第二条链,culture、crypto属于最后一条链,虽然彩虹表中只保存了每条链的链首链尾两个字符串,但是这些中间数据是可以根据链首字符串重新计算出来的。来看一下re3xes的破解过程,先猜测下密码re3xes对应的明文数据是某条链中间计算出数据的最后一个,注意第一、二条链的中间数据中的最后一个明文口令jimbo、zurich,依次经过H-R3运算得到保存的链尾字符串rootroot、myname,那么密文re3xes经过R3转换之后得到的数据就是某条链的链尾字符串,这点应该不难理解,如密文v0d$x对应的明文jimbo是第一条链最后一个中间明文数据,则v0d$x经过R3转换得到链尾字符串rootroot,但是密文re3xes经过R3函数转换之后得到的rambo并不是表中保存的任一条链的链尾字符串,这就说明re3xes对应的明文数据并不是某条链中间计算出数据的最后一个,猜测不成立,继续猜测re3xes对应的明文数据可能是某条链中间计算出数据的倒数第二个,同样可以很容易推出re3xes依次经过R2-H-R3转换之后得到的数据是某条链的链尾字符串,计算出re3xes经R2-H-R3转换的结果为linux23,通过搜索彩虹中存放的链尾字符串,得到linux23恰好是最后一条链的链尾,O(∩_∩)O~,到了这一步已经成功了一大半,下面就来根据存储的最后一条链链首的passwd重新计算出密文re3xes对应的明文吧,既然re3xes经R2-H-R3转换之后得到链尾的linux23,那么链首的passwd经H-R1-H运算后的结果culture就是re3xes对应的明文啦,小功告成~(≧▽≦)/~,流程图见下图2。

                                        图2彩虹表破解密码示意图

注意:经过这种运算能得到链尾字符串的话只是成功了大半,还是有一小半人品不好的情况额,如果Rk函数设计的不好,存在一个密文字串qshud和re3xes经过R2-H-R3运算后都能得到linux23,那么在破解密文qshud的时候也会得出明文为culture,这种错误的情况称为“假警”,因为实际应用中的数据量都比较大,所以出现这种情况也是很正常的,这是只需要简单计算一下hash验证下即可,从另一个角度看数据量大的同时也能保证彩虹表的明文覆盖率更大,破解效果更好,出现“假警”情况的话就继续查表过程直至找到正确的明文或是找完整个表也没找到明文╮(╯_╰)╭……

ps:彩虹表类似于用大量随机字符串来保证对明文的覆盖率,所以Rk系列函数的构造直接影响能破解密码的范围。

三、 彩虹表的不足与改进

3.1 不足:加盐情况处理不好

现在很多加密方法计算密码Hash时,会在待处理的明文字符串后面加上一串随机的字符串再进行加密操作,开始密码验证时会先在用户输入的密码后加上相同的随机字串进行加密,结果再与存储的Hash进行比较。如明文口令是qshud,则附加上一段随机字符串再计算hash,正确口令的hash存储时也是这样的处理过程,这样做的一个好处就是可以在一定程度上防止彩虹表破译,假设随机字符串为“!@#¥”之类的特殊符号,在造表的过程中设计R函数就需要考虑到映射回这些特殊符号,这就大大增大了造表的空间和难度。

3.2 不足:不能保证100%破解

造表过程中可以很明显的看出,只有明文字符串属于彩虹表的某条链上才能保证这条明文对应的Hash可以被破解,然而设计的再好也不能保证能够破解所有对应的Hash密码,实际中破解率99%以上就已经很实用了。

3.3 改进:破解率100%的雷表

上文已经提到了破解的效率并不能达到100%,而雷表就是对这点的改进,据称可以达到100%的破译,但是涉及的技术会更加复杂。目前这项技术还未被公开,网上也找不到详细的介绍。

3.4 改进:显卡并行编程加速造表过程

利用显卡多核的特点,设计并行的造表算法(CUDA并行编程),一般情况下能将造表速度提至7倍(以我一个很水的实现为起点~囧)或更高。

四、 彩虹表下载及相关工具

       免费彩虹表下载:

Free Rainbow Tables:http://www.freerainbowtables.com/en/tables/,提供了LM、NTLM、MD5、SHA1等彩虹表下载。

       工具:

Opcrack:有自己独特的彩虹表结构,支持LM,NTLM破解。

RainbowCrack:可以自己造表,支持LM, NTLM, MD5, SHA1, MYSQLSHA1,              HALFLMCHALL, NTLMCHALL的破解。

Cain:由Oxid.it开发的一个针对Microsoft操作系统的免费口令恢复工具。号称穷人使用的L0phtcrack……

彩虹表破解开机密码、MD5算法等的原理相关推荐

  1. 彩虹表破解Hash算法

    彩虹表是一种破解哈希算法的技术,从原理来说能够对任何一种Hash算法进行攻击.简单的说,彩虹表就是一张采用各种Hash算法生成的明文和密文的对照表.在彩虹表中,表内的每一条记录都是一串明文对应一种ha ...

  2. 利用彩虹表破解Hash

    本文以RainbowCrack为例来利用彩虹表破解hash. RainbowCrack简介 另一款相对比较实用的hash破解工具,其本质是基于事先生成好的对应的各种散列类型的彩虹表,支持GPU[amd ...

  3. wce配合彩虹表破解windows的用户HASH

    wce ls /usr/share/wce wce -l 列出曾经登陆过windows的用户HASH,获得了域用户的HASH,就用工具配合彩虹表破解(http://www.project-rainbo ...

  4. 彩虹表-破解哈希算法

    彩虹表(Rainbow Table)是一种破解哈希算法的技术,它的性能非常让人震惊,在一台普通PC上辅以NVidia CUDA技术,对于NTLM算法可以达到最高每秒103,820,000,000次明文 ...

  5. 网络安全 彩虹表 彩虹表破解 使用john

    彩虹表: 包含口令和一些其他的东西的一个表,与暴力破解的原理相反,是一种逆向猜解的状态 1. 用john破解Windows账户(john还可以破解Linux) a) Win7虚拟机-pwdump7(是 ...

  6. 网络攻防实验:离线攻击工具——彩虹表破解

    一.实验目的 (1)学习BackTrack5(已经合并到Kali linux中)的功能和基本使用方法.BackTrack5是网络安全领域非常著名的黑客攻击平台,是一个封装好的Linux操作系统,内置了 ...

  7. win7和win10 5次shift漏洞破解开机密码

    部分win7和win10的登录界面连续按5次shift键会弹出程序c:\windows\system32\sethc.exe 按电源键强制关机,再开机的话有"启动启动修复(推荐)" ...

  8. 深入理解 MD5 加密、彩虹表算法原理

    一.MD5 是什么 MD5 英文全称 Message-Digest Algorithm 5,翻译成中文是 消息摘要算法第五版,为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护. MD5 ...

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

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

最新文章

  1. 十进制数和二进制数之间的转换
  2. 如何快速判断某 URL 是否在 20 亿的网址 URL 集合中?
  3. nyoj-754--黑心医生
  4. 带有Angular 11前端的ASP.NET Core微服务
  5. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第4节 等待唤醒机制_3_等待唤醒案例代码实现...
  6. DPDK - Symmetric Receive-side Scaling
  7. VASP_INCAR参数及其含义
  8. SQL数据分析之数据提取、数据查询、数据清洗【MySQL速查】
  9. cnki下载pdf文档
  10. 搭建 MongoDB 服务器,MongoDB 基本使用,数据导入导出
  11. gg修改器免root下载
  12. 手机图片如何转化为Word文档?简单几步轻松转换
  13. JAVA——对当前时间进行输出
  14. 五、数组(高琪java300集+java从入门到精通笔记)
  15. 头条极速版问答自动化教程
  16. 电脑重装后无线鼠标用不了怎么办
  17. 队列(一种遵循先进先出原则的数据结构)
  18. QPST驱动安装失败的原因以及解决方法
  19. adams2005软件下载
  20. 详解Windows通过命令行查看电脑连接过的WIFI密码

热门文章

  1. 一个测试人员如何变成测试架构师
  2. 【电子量产工具】6. 业务系统
  3. nginx关闭access日志
  4. sqlserver、mysql、oracle默认端口号
  5. 隐藏腾讯地图api右上角的地图/卫星
  6. java saml_java – 验证SAML响应的签名
  7. Vue —— 分页器
  8. js export default
  9. Tone mapping curve(色调映射曲线)与gamma 曲线的区别与联系
  10. 服务器 检测 文件系统 关机,服务器查看关机