我用不到 700 MB,做了一个覆盖 100 亿手机号空间的 MD5 反查工具

9 月 21 日
 mir490005

前段时间偶然发现了几个手机号 MD5 反查网站:

第一反应不是查号码,而是好奇:这种服务背后到底是什么实现?把 100 亿个手机号全部算一遍,需要多大的数据库、多少 CPU ,普 通服务器能不能跑?

于是我自己写了一套,从建表、索引到 Web 查询都跑了一遍。

先算最直接的方案

覆盖 10000000000 ~ 19999999999 ,一共是 100 亿个数字。

如果做完整索引,即使不保存完整 MD5 ,只保存截断哈希和 40 bit 的号码编号,每条记录压到 5 字节,最终仍然需要约 47 GiB 。

查询会很快,但为了这么一个工具准备几十 GiB 数据,感觉有点重。

换成彩虹表

后来采用了完美彩虹表,把号码连成一条条长度为 1000 的计算链:

手机号 → MD5 → 归约成新手机号 → MD5 → …… → 终点

数据库不保存中间经过的号码,只保存每条链的起点和终点,一条记录 13 字节。

查询时,程序猜测目标 MD5 位于链中的哪一站,然后继续计算到终点,通过磁盘索引找到对应起点,再从头走完整条链,用完整的 128 bit MD5 验证结果。

最终推荐配置是 4 张表:

覆盖空间:100 亿 数据库大小:约 660 MB 理论命中率:约 99.19% 典型命中:约 0.1 ~ 0.3 秒 完整未命中:约 0.65 秒

因为最后会重新计算完整 MD5 ,所以可能漏查,但不会返回一个错误号码。

建表成本有点出乎意料

4 张表最终只保留约 4800 万条链,但为了排序、终点去重和补链,实际需要完成约 1200 亿次 MD5 计算。

这个数字看起来很吓人,不过短字符串 MD5 的计算速度很快。按项目测试的单核约 613 万次/秒估算,纯计算量约为:

1200 亿 ÷ 613 万 ≈ 5.4 CPU 核时

再加上排序、去重和写盘,56 核机器构建 4 张表大约十几分钟。换成 8 核机器,通常也就是一小时左右。云服务器性能、共享 CPU 和磁盘速度不同,实际时间会有差异。

也就是说,建表真正需要的是一次短时间的多核计算,不需要长期保留高配置服务器。

运行成本更低

生成后的数据库只有约 660 MB 。查询器使用 pread() 按桶读取少量数据,不需要把整张表载入内存,也不需要 MySQL 、Redis 或 Elasticsearch 。

低访问量情况下,一台普通的 2 核或 4 核小服务器就能运行。假设每天查询 1 万次,而且极端地全部走到完整未命中:

10000 × 0.65 秒 ≈ 1.8 CPU 核时/天

平均 CPU 占用并不高,真正需要注意的是短时间内的并发。批量查询可以多线程处理,多台机器也可以直接复制同一份只读数据库进 行扩展。

算下来,这种服务最主要的成本可能不是 660 MB 数据,也不是一次性的建表,而是服务器、公网 IPv4 、带宽和后续维护。

我也搭了一个版本

目前支持单个和批量查询,一次最多提交 100 个 MD5:

体验地址: https://tools.waitchenx.cn

它不是“破解任意 MD5”,只能查询目标数字范围内的无盐 MD5 。带盐哈希、HMAC 、其他字符内容和范围外数字都不适用。

做这个项目最有意思的地方,是把一个看起来需要海量存储的问题,变成了一个很具体的时间与空间交换:约 1200 亿次一次性计算, 换来一份 660 MB 、可以长期复用的查询数据库。

1879 次点击
所在节点    分享创造
5 条回复
iqoo
9 月 21 日
100 亿次 md5 用 hashcat 之类工具现场跑一次也不过几秒~
9sS02KlxPAB0C5w8
9 月 21 日
说得好,我选择本地 hashcat
512357301
9 月 21 日
楼上的两位还是站在技术角度抬杠,楼主这很明显是工程角度
9sS02KlxPAB0C5w8
9 月 22 日
@512357301 抬杠的是你
mir490005
9 月 22 日
说一个场景. 现在经常在用的. 在做推广的时候 有些渠道给的信息就是 md5 的手机号 一次几十万上百万. 要反查出手机号. 然后打电话. 这个就有用了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1243683

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX