[NOTE]彩虹表相关原理和开发指导

WHAT IS…

彩虹表是一个用于加密散列函数逆运算的预先计算好的表,常用于破解加密过的密码散列。 查找表常常用于包含有限字符固定长度纯文本密码的加密。这是以空间换时间的典型实践,在每一次尝试都计算的暴力破解中使用更少的计算能力和更多的储存空间,但却比简单的每个输入一条散列的翻查表使用更少的储存空间和更多的计算性能。使用加盐的KDF函数可以使这种攻击难以实现。

彩虹表主要用于破解哈希函数(MD5,SHA).相比较于暴力破解,是一种空间换时间的操作.
本文主要对课程设计中的要求,构建一个超轻型的MD5破解,只针对7位数字加大小写字母.
...XD

HOW To…

哈希链的构造

  1. 构造一个定义域和值域与哈希函数相反的R函数 R ( x ) R(x) R(x)
  2. H ( x ) H(x) H(x) R ( x ) R(x) R(x)交替执行几次,记录明文和最后的哈希,形成一个哈希链.

使用:

  1. 对密文进行R运算R(y),将R(y)在终点表中查询;若查询失败,继续进行H、R运算,查询;最多进行K次R运算,要么查询成功,要么破解失败。若查询成功:
  2. 查明文并验证,由查询匹配到的终点对应的起点,重复进行H、R运算:起点→m→y=H(m)→R(y).起点→m→y是查明文过程,y→R(y)是验证过程。查到明文就是m。

R(x)的设计和彩虹表的构造

由于存在子链碰撞问题(即加解密路径重合问题),所以一般使用多个 R i ( x ) R_i(x) Ri(x).这种表称彩虹表.
彩虹表的使用流程:

  1. 假设密文在k-1位置,对密文进行Rk运算Rk(y),将Rk(y)在终点表中查询;若查询成功,执行步骤(ii),若查询失败,假设密文在k-2位置,对密文进行Rk-1、H,Rk运算,将结果Rk(H(Rk-1(y)))在终点表中查询;若查询成功,执行步骤(2),若查询失败,假设密文在k-3位置,Till 假设密文在0位置,对密文进行反复Ri,H运算,将结果在终点表中查询;若查询成功,执行步骤(ii),若查询失败,破解失败。
  2. 查明文并验证由查询匹配到的终点对应的起点,重复进行H、R运算:起点→m→y=H(m)→Ri(y). 起点→m→y是查明文过程,y→Ri(y)是验证过程。查到明文就是m。
    伪代码:
for i in reverserange(k-1):
	for j in range(i,k):
		cipher=funclist[j](cipher)#funclist includes H(x),R(x)
	if Rkcipher==chain[-1]:
		return getplain(i)
return FAIL

def getplain(paras):
	temp=chain[0]#From start
	for pix in range(i):
		temp=funclist[pix](temp)

		assert Rk(temp)==cipher:
return temp

彩虹表的生成

使用RainbowCrack生成彩虹表.具体使用方法如下:
Download at http://project-rainbowcrack.com
参考: /Document

Example

rtgen md5 loweralpha-numeric 1 7 1 3800 33554432 0
rtgen md5 loweralpha-numeric 1 7 2 3800 33554432 0
rtgen md5 loweralpha-numeric 1 7 3 3800 33554432 0
rtgen md5 loweralpha-numeric 1 7 4 3800 33554432 0
rtgen md5 loweralpha-numeric 1 7 5 3800 33554432 0

trgen:生成程序名
md5:针对生成的hash函数
lower…:小写字母+数字集,可以调换:
charset对照表如下:


numeric            = [0123456789]

alpha              = [ABCDEFGHIJKLMNOPQRSTUVWXYZ]
alpha-numeric      = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]

loweralpha         = [abcdefghijklmnopqrstuvwxyz]
loweralpha-numeric = [abcdefghijklmnopqrstuvwxyz0123456789]

mixalpha           = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]
mixalpha-numeric   = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]

ascii-32-95                  = [ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~]
ascii-32-65-123-4            = [ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`{|}~]
alpha-numeric-symbol32-space = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|\:;"'<>,.?/ ]

1 7:明文最小和最大长度,直接影响生成速度
0~5:生成的表的index.一次生成多个表可提高查询成功率.
3800:要求的链长度.适当选择可以提高效率.
33554432:单个文件内生成链的数量.
1:将单个表拆分为小文件的个数.

该程序对Windows下的N卡和G卡都有优化,在linux下反而没有.

彩虹表的使用

排序当前 目录下的彩虹表文件:

rtsort .

试着对哈希进行破解:

./rcrack md5_numeric#1-10_1_128x67108864_0.rt -l wax_uid.txt

显示结果样例:

# wax_uid.txt 为需要破解的数据,每行一个
./rcrack md5_numeric#1-10_1_128x67108864_0.rt -l wax_uid.txt
 
 
# 结果
statistics
-------------------------------------------------------
plaintext found:                              28336 of 59293
total time:                                   53.76 s
  time of chain traverse:                     12.67 s
  time of alarm check:                        2.85 s
  time of wait:                               20.64 s
  time of other operation:                    17.60 s
time of disk read:                            33.52 s
hash & reduce calculation of chain traverse:  478138752
hash & reduce calculation of alarm check:     91928521
number of alarm:                              2375649
speed of chain traverse:                      37.75 million/s
speed of alarm check:                         32.22 million/s

更正:rcrack的第一个参数为所有彩虹表生成的目录;生成之后需要排序
提高成功率可以生成多个表.
例如:单表的破解概率为 47.8%,如果我们需要将破解概率提高到95%,则需要5个彩虹表.

参考

http://project-rainbowcrack.com/
https://chenjiehua.me/python/rainbow-table-crack-md5.html
http://www.ha97.com/4009.html

R函数

See https://www.zhihu.com/question/19790488

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值