MENU

新玩法:轻松解密md5

• December 20, 2017 • Read: 382 • 瞎折腾

很久没写文章了,今天就来发一篇“水文”

MD5解密

随着网络技术的不断提高,MD5加密算法已经变得不安全!不安全!!不安全!!!那到底是有多不安全,怎么个不安全法呢?

在线MD5破解

目前网上有许多在线的md5以及其他hash破解网站,部分免费。

我们可以使用 http://cmd5.la/ 进行在线的md5破解。

使用彩虹表破解md5

彩虹表官网:http://project-rainbowcrack.com/

工具主要为 rainbowcrack-1.6-linux64, 具体使用方法查阅官网文档。

彩虹表破解与传统的暴力破解并不相同

彩虹表原理:

原理参考:

  1. 论文: https://lasec.epfl.ch/pub/lasec/doc/Oech03.pdf
  2. 维基: http://en.wikipedia.org/wiki/Rainbow_table

简单要点:

  1. 彩虹表的个数:l,每个彩虹表采用不同的 reverse function,避免了碰撞和合并;单个表的破解概率有限,可以通过使用多个彩虹表来提高整体的破解概率,Pall = 1 – (1 – Pone)l
  2. 每个表的链数:m,每个表中预先哈希、反哈希……之后存储的起点和终点,中间过程不存储,每条链(起点和终点)占用16byte
  3. 每条链的长度:t,每条链哈希和反哈希的次数,链越长,需要的CPU资源越多,破解时间也更长,但成功率更高

时间-空间:

  1. 时间:T 正比于 t * l
  2. 空间:M 正比于 m * l

运行机器性能要求:

1、内存:
4 GB的内存是最小的,建议8 GB或更多的内存。搜索大型彩虹表时,内存越大,总能帮助提高性能。

2、硬盘:
由于彩虹表必须从硬盘加载到内存才能查找,而某些彩虹表设置可能高达几百GB,因此硬盘性能成为实现整体散列破解性能的一个非常重要的因素。
我们建议把彩虹表放在有多个硬盘的RAID 0卷中。

3、GPU:
彩虹表的软件支持来自NVIDIA的支持CUDA的GPU和来自AMD的支持OpenCL的GPU。

GPU支持多GPU加速。要获得最佳性能,所有GPU都需要具有相同的型号。

彩虹表生成

现在,我们以10位纯数字为例来生成自己的彩虹表,并可以权衡破解速度和存储空间。

# 生成一个包含1~10位数字,链长128,链数67108864 的彩虹表
./rtgen md5 numeric 1 10 1 128 67108864 0
 
 
# 对生成的彩虹表进行排序
./rtsort md5_numeric#1-10_1_128x67108864_0.rt

大小说明:链数 67108864 * 16byte = 1GB,因此生成的彩虹表(md5_numeric#1-10_1_128x67108864_0.rt)的大小为 1GB。

其他说明:

  1. 彩虹表的生成需要非常强的计算能力,可以使用多核CPU或GPU来提高速度;
  2. 生成上面的使用的彩虹表(一个),在24核60G服务器耗时约1.5min(CPU使用率 2300%);4核8G渣渣开发机耗时10min(CPU使用率390%);
  3. 本次测试中暂时未发现内存大小对速度性能造成的影响;

小试牛刀

我们以一批随机的10位数字ID进行测试,样本数据共59293个,进行破解:

# 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: 

可以大概算出:

• 单表成功率:47.8%;
• 每个破解耗时(整体):0.9067ms
• 每个破解耗时(成功):1.8972ms

提高破解概率

单表的破解概率为 47.8%,如果我们需要将破解概率提高到95%,则需要5个彩虹表(计算:1 – (1 – 0.478)5 = 0.9612)

# 生成5个彩虹表,其中 table_index 指定不同的参数
./rtgen md5 numeric 1 10 1 128 67108864 0
./rtgen md5 numeric 1 10 2 128 67108864 0
./rtgen md5 numeric 1 10 3 128 67108864 0
./rtgen md5 numeric 1 10 4 128 67108864 0
./rtgen md5 numeric 1 10 5 128 67108864 0
 
# 对彩虹表进行排序
./rtgen *.rt

再进行一次破解,结果如下:

# *.rt 包含了上面生成的5个彩虹表
./rcrack *.rt -l wax_uid.txt
 
 
# 结果
statistics
-------------------------------------------------------
plaintext found:                              56947 of 59293
total time:                                   140.48 s
  time of chain traverse:                     32.23 s
  time of alarm check:                        5.56 s
  time of wait:                               49.94 s
  time of other operation:                    52.75 s
time of disk read:                            134.54 s
hash & reduce calculation of chain traverse:  1191802752
hash & reduce calculation of alarm check:     185569273
number of alarm:                              4795196
speed of chain traverse:                      36.97 million/s
speed of alarm check:

可以大概算出:
• 整体成功率:96.04%;
• 每个破解耗时(整体):2.3692ms
• 每个破解耗时(成功):2.4669ms

最后

  1. 使用彩虹表可以用比较小的存储来实现MD5的破解;
  2. 破解速度与存储空间可以相互权衡;
  3. 取得比较高的破解成功率,并可以根据实际场景更进一步提高成功率(比如小批量数据的99.99%成功率,但速度与存储会增加);
Tags: 解密, md5, 破解
Archives QR Code
QR Code for this page
Tipping QR Code