嗯今天用自己新搜集的一堆网站泄露密码重新测试了这边和隔壁论坛的密码表
结果很可怕,仅10分钟内691个账户中的200个密码被破解,这意味着啥大家都清楚。
考虑到很多人喜欢一堆网站(甚至是支付宝之类的)都用一个密码,我还是稍微提醒一下,最好赶紧把重要账户的密码换掉。
万一发生数据泄露,后果都清楚的(虽然咱觉得服务器上的超长的密码不太可能被破解,毕竟有2*10[sup]63[/sup]种组合)
这次测试使用的数据库是4月25日早上8点01分的备份
工具为HD 7750(1GB显存),oclHashcat-plus 0.14,Catalyst催化剂驱动程序13.2 Beta
使用的密码字典大小为1.57GB,包含了1.4亿条各种网站泄露的密码,包括QQ
是的,包括QQ
而且QQ泄露的密码字典是最大的,863.13MB,6800万条密码
以下为各字典命中统计:
- 106 password-test/cnpassword.txt(2011年国内多个网站密码泄露事件)
- 97 password-test/qqpw.txt(使用钓鱼邮件获取的QQ密码表)
- 71 password-test/md5decrypter.txt(MD5Decrypter密码工具自带字典)
- 70 password-test/rockyou.txt(2009年Rockyou密码泄露事件)
- 46 password-test/linkedin_masked.txt(LinkedIn已破解密码)
- 34 password-test/phpbb.txt(phpBB已破解密码)
- 19 password-test/tuscl.txt(2010年TUSCL.net密码泄露事件)
- 13 password-test/singles.org.txt(2010年Singles.org密码泄露事件)
- 13 password-test/cain.txt(Cain & Able密码破解工具自带字典)
- 12 password-test/hotmail.txt(来源未知,据称为Hotmail密码)
- 11 password-test/john.txt(John the ripper密码破解工具自带字典)
- 11 password-test/honeynet.txt(蜜罐网络收集的常见破解密码)
- 10 password-test/myspace.txt(钓鱼获取的MySpace密码)
- 10 password-test/faithwriters.txt(常见的与宗教相关的密码)
- 9 password-test/porn-unknown.txt(色情网站泄露密码)
- 8 password-test/facebook-phished.txt(钓鱼获取的facebook密码)
- 7 password-test/conficker.txt(Conficker蠕虫病毒自带攻击密码)
- 6 password-test/twitter-banned.txt(Twitter禁止使用的密码)
- 6 password-test/hak5.txt(常用字典)
- 6 password-test/elitehacker.txt(常用字典)
- 6 password-test/500-worst-passwords.txt(500个最常被使用的密码)
- 1 password-test/facebook-pastebay.txt(不明来源的Facebook密码)
复制代码各字典的大小与密码条数:
- 字典文件 大小(B) 密码条数
- 500-worst-passwords.txt 3493 500
- cain.txt 3149586 306706
- cnpassword.txt 370834150 34792249
- conficker.txt 1411 182
- elitehacker.txt 6516 895
- facebook-pastebay.txt 500 55
- facebook-phished.txt 25688 2442
- faithwriters.txt 72695 8347
- hak5.txt 24714 2351
- honeynet.txt 2906298 226928
- hotmail.txt 87383 8931
- john.txt 21935 3107
- linkedin_masked.txt 25172642 2802100
- md5decrypter.txt 174331516 15619083
- myspace.txt 356352 37144
- phpbb.txt 1574395 184389
- porn-unknown.txt 57836 8089
- qqpw.txt 837070967 67986128
- rockyou.txt 139921497 14344391
- singles.org.txt 94691 12234
- tuscl.txt 324743 38820
- twitter-banned.txt 2780 370
复制代码下面是这次测试的最终输出:
- Session.Name...: oclHashcat-plus
- Status.........: Exhausted
- Input.Mode.....: File (dictionary.txt)
- Hash.Target....: File (J:\hashes.txt)
- Hash.Type......: vBulletin < v3.8.5
- Time.Started...: Mon Apr 29 23:25:10 2013 (10 mins, 7 secs)
- Time.Estimated.: 0 secs
- Speed.GPU.#1...: 246.7k/s
- Recovered......: 200/691 (28.94%) Digests, 199/689 (28.88%) Salts
- Progress.......: 88285013622/88285013622 (100.00%)
- Rejected.......: 13223194542/88285013622 (14.98%)
- HWMon.GPU.#1...: 50% Util, 38c Temp, 20% Fan
复制代码翻译一下,就是
- 本次运行607秒
- 共尝试了1.4亿个密码
- 运行速度为25万个密码/秒
- 攻击类型为Discuz!密码散列
- 攻击方式为纯字典攻击
- 共读取691个密码散列
- 成功恢复200个密码散列(28.94%)
复制代码 多长的密码才安全?
嗯首先这里有一个假设,就是你的密码不在任何公开字典里,只能用暴力破解的方式攻击。
这次被破解出来的密码不乏“MYQ888*OTEN”(不是真的,只是举例)这样的一般认为比较复杂的密码,能被迅速破解的原因就是因为这东西在字典里。
另外,现在的密码破解软件(比如我这次测试用的oclHashcat-plus)可以使用显卡的大规模并行计算能力加速
首先作为性能对比参考,我测试了自己的HD 7750显卡的计算能力,以下是纯MD5运算的速度,每秒18.4亿个密码
- Session.Name...: oclHashcat-lite
- Status.........: Running
- Hash.Target....: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- Hash.Type......: MD5
- Time.Started...: Mon Apr 29 23:45:52 2013 (4 secs)
- Time.Estimated.: Mon Jun 10 17:58:08 2013 (41 days, 18 hours)
- Plain.Mask.....: ?1?1?1?1?1?1?1?1
- Plain.Text.....: ***cy452
- Plain.Length...: 8
- Progress.......: 8545894400/6634204312890625 (0.00%)
- Speed.GPU.#1...: 1838.8M/s
- HWMon.GPU.#1...: 20% Util, 36c Temp, 20% Fan
复制代码作为最高性能参考,我选择了HD 7970单卡,速度是每秒81.6亿个密码
- Status.......: Running
- Hash.Target..: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- Hash.Type....: MD5
- Time.Running.: 20 secs
- Time.Left....: 9 days, 9 hours
- Plain.Mask...: ?1?1?1?1?1?1?1?1
- Plain.Text...: ***aaaaa
- Plain.Length.: 8
- Progress.....: 163158425600/6634204312890625 (0.00%)
- Speed.GPU.#1.: 8156.5M/s
复制代码然后测试了自己的HD 7750针对单个Discuz!密码散列的破解速度,为每秒5.33亿个密码
- Session.Name...: oclHashcat-lite
- Status.........: Running
- Hash.Target....: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:123456
- Hash.Type......: vBulletin < v3.8.5
- Time.Started...: Mon Apr 29 23:49:32 2013 (9 secs)
- Time.Estimated.: Sat Sep 21 01:34:51 2013 (144 days, 1 hour)
- Plain.Mask.....: ?1?1?1?1?1?1?1?1
- Plain.Text.....: ***<tman
- Plain.Length...: 8
- Progress.......: 4833935360/6634204312890625 (0.00%)
- Speed.GPU.#1...: 533.0M/s
- HWMon.GPU.#1...: 96% Util, 36c Temp, 20% Fan
复制代码那么类比一下,HD 7970应该可以上23.65亿/秒
对一个n位长的密码,假设攻击者并不知道其长度,必须从1位开始逐个试过去的话,那么最坏情况需要试:(等比数列求和)
95 * (95^n - 1) / 94
这么多次,一个8位长的密码最坏情况要试6704780954517120(670.5万亿)次,稍作计算就可得出需要多久破解,答案是33天
明显8位并不够用,特别是对敏感信息(比如你的支付宝)
但如果加一位,变成9位的话,这个数字一下就会变得很大(指数爆炸知道么),需要636954190679126495(63.7京)次,需要3118天才能解出
不过别忘了,这个计算是建立在“整个密码内所有字符都是随机产生的”这么一个前提条件下的,所以嘛,只能呵呵了不是么(
新的论坛系统
嗯咱考虑是完全抛弃MD5,改用PBKDF2或者scrypr或者bcrypt这样的高运算强度的密钥导出算法
关于PBKDF2有多吃硬件资源…………
差不多,大概7970上一秒也就只能试15万个密码
scrypt和bcrypt,不说啥了,反正比PBKDF2还可怕
不过由于算法不兼容,现在的用户数据不会保留,新系统内不会存在任何现有的数据,就酱