Skip to content

Instantly share code, notes, and snippets.

@xcaspar
Last active August 29, 2015 14:25
Show Gist options
  • Save xcaspar/d8cea6d4bf9bc364b6d5 to your computer and use it in GitHub Desktop.
Save xcaspar/d8cea6d4bf9bc364b6d5 to your computer and use it in GitHub Desktop.

Rainbow Table

@(Web安全)[rainbow]

介绍

彩虹表是一个预先计算好的,用于破解hash密码的文件。它和暴力破解相比,使用更大的存储空间,但是破解时间较短;和简单的散列查找相比,使用时间较长,但是存储空间少。

背景

起初人们可以通过字典穷举的方法进行破解,这对简单的密码是可行的,但是对于复杂的密码,则会产生无穷大的字典,为了解决字典大小,减少产生和查找字典的时间,所以采用了哈希链接的方式用于存储字典。

原理

彩虹表存储预先计算好的hash chain。例如 P代表可能的密码集合,Q是hash后的集合,即Q=H(P); R代表reduction function(缩减函数),即将hash值转变成一个key。彩虹表的生成过程如下:

先随机生成一个p0,对p0进行一次H(hash)操作,然后再R(reduction)操作,再H,形成一条hash chain,即过程如下:
p0-H->q1-R->p1-H->q2-R->p2-.....-H->q(n-1)-R->p(n-1)-H->qn-R->pn
表中会存在很多这种hash chain,比如对q(与查询的hash值)进行破解,会对p进行一次R操作,及p-R->c1 (结果记成c1),拿c1和pn进行比较(即和一条链的终点进行比较),若相等,则找到这条链的起点p0,查找这条链,直到找到q,破解后的密码就是p(n-1)。有时候从起点进行查找,找不到q,原因可能是在碰撞点进行了合并。

使用

目前的网上的彩虹表有120G、256G等,同样也可以自己生成。生成方法如下:
从网上下载Rainbow工具包,所用到的工具有:
rtgen 彩虹表生成工具; rtsort 彩虹表排序工具; rtcrack 密码破解工具。 生成参数如下:rtgen.exe md5 loweralpha-numeric 1 3 0 1000 600000 0 参数解释:rtgen 加密算法 加密字符集 密码最小长度 密码最大长度 彩虹表索引 单条链长度 单个表链的数量 同个文件标识 我上面的那个命令是 生成密码可能是小写字母和数字,长度在1~3之间 md5加密,单条链长1000,链的数量是600000个。 然后对文件进行排序:rtsort XXX(文件名) 然后进行查找,界面如下: Alt text

####总结 目前密码的加密基本上采用md5、sha-1加密,随着时间的推移破解也变的日益简单,除了提醒用户设置复杂密码外,更重要的是后台做hash加密时添加上 salt,将salt和hash值存入数据库中,这样破解就非常的困难,以后开发要谨记。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment