前几年网速刚上来的时候,下了几百G的彩虹表,本地跑了一下纯数字密码,确实无比强悍,因为在这个表面前,md5等公开算法的加密方式均不堪一击,记得十多年前我主持开发的学校就业网站,当时的学生注册密码就是用的md5算法,这几年随着各种库的被拖,行业人士也都意识到了简单的亦或加密无法阻止众多好事者前进的脚步,所以也都在md5的基础上加了salt,这样安全性就大大的提高了,给哈希表加个前后缀之类的方式屡试不爽,但一般源码保存的服务器最好还是弄安全点,不然遇到逆向的选手,加了salt和没加也就少了一道工序而已。
彩虹表(rainbow table)是一种可以破解哈希(hash)算法的文件集合,一般需要一个可执行文件来引导,主要可以破解md5和多种hash类的密文,运行性能也是较优的,当时我电脑没有NVIDIA显卡都可以跑出来12位的纯数字md5,仅仅是几十秒的时间,可想而知如果破解xp的密码,应用在NTLM算法上,每秒保守估计至少也得一千亿次吧,电脑不用配置太好的情况都可以令这些密码无处遁形,遇到彩虹表密文简直就是不堪一击。,彩虹表并非针对算法的漏洞进行攻击,而是类似穷举方式的暴力破解,所以针对任何哈希算法都有效,是不是非常炫酷。
前期的字典都是手动生成的,后来为了加快速度,有专门用规则生成字典的自动化效果加入了进来,那么现在市面上流行的120G的彩虹表基本上就属于这种,因为手工添加哈希根本无法满足需要,除非像那种后台密码一样弱智的admin选手。拿到这些table文件之后,找个不用的电脑就开始干活,一般xp密码14位左右的混合类型,一般跑起来需要几个小时,虽然大多数人都不会设置这么复杂的密码,这也就是为什么注册页面会提示密码复杂度,基本就是防止彩虹表进行穷举攻击才设置的,还有验证码,这个以后有时间再说吧。
后来瑞士某大学研究出来内存换时间的方法,使得进一步加快了破解速度,提高了效率,xp的hash抓出来之后,5分钟之内可以跑出来,感兴趣的可以去下几百G回来研究,共同探讨。