hashcat之Mask Attack性能测评
这周以来一直都在研究hashcat,逐渐认识到Mask Attack是比字典攻击更为有效的手段,只用输入巧妙的占位符组合,便可以完全取代字典,而且没有字典的臃肿,不会有存储与转移方面的不便。记得前几天测试字典攻击时,我最大的——10G——9.4亿的字典,hashcat只用了7分钟就跑完了。而9.4亿,在数量级上相当于6位的小写字母和数字组成的密码的所有组合,相对于整个密码空间而言,不过是沧海一粟。使用Mask,可以很容易地构造出足够大的密码空间来,如“?a?a?a?a?a?a”便是千亿级别的密码空间,若是制作这么大的字典,字典大小可能会超过1TB。
问题便是Mask过于强大,轻易构造很大的密码空间,跑完这些密码,花费的时间可能超过了我们的等待极限。为了能在实际使用中更好的选择Mask,需要对不同的Mask花费的时间有一个感性的认识,所以我测试了各种Mask的耗时,记录于此。
在测试中,统一破解同一个sha1值:54477ac9fdce357a05e7f68694a0b29c068c3b50,它是这么来的:
>>> import hashlib
>>> hashlib.sha1("123GB^*HE@R*G@&DF$^!#@^").hexdigest()
'54477ac9fdce357a05e7f68694a0b29c068c3b50'
很明显这个sha1值几乎不可能被破解,这样做是为了保证整个密码空间都被跑遍,而不是中途停掉。统计时间的方式有两种,一是耗时较短的,直接让它跑完,统计实际耗时,二是耗时很长的,查看hashcat的估计时间,以估计时间为耗时。破解时使用的命令均为:
hashcat -w 3 -a 3 -m 4500 54477ac9fdce357a05e7f68694a0b29c068c3b50 Mask
统计结果如下表所示:
Mask | 密码长度 | 密码空间大小 | 数量级 | 耗时 | 统计方式 |
---|---|---|---|---|---|
?d?d?d?d?d?d | 6 | 1000000 | 1.0×106 | 4s | 实际 |
?l?l?l?l?l?l | 6 | 308915776 | 3.1×108 | 6s | 实际 |
?l?l?l?l?l?l?l | 7 | 8031810176 | 8.0×109 | 23s | 实际 |
?l?l?l?l?l?l?l?l | 8 | 208827064576 | 2.1×1011 | 11m28s | 实际 |
?s?s?s?s?s?s | 6 | 1838265625 | 1.8×109 | 26s | 实际 |
?a?a?a?a?a?a | 6 | 735091890625 | 7.4×1011 | 39m48s | 实际 |
?a?a?a?a?a?a?a | 7 | 69833729609375 | 7.0×1013 | 1d19h | 估计 |
?a?a?a?a?a?a?a?a | 8 | 6634204312890625 | 6.6×1015 | 178d7h | 估计 |
?a?a?a?a?a?a?a?a?a | 9 | 630249409724609375 | 6.3×1017 | 41y338d | 估计 |
上面的测试都是在我自己的电脑上进行的,且都只进行了一次,难以说明问题,但我们的目的一开始便是为了得到“感性的认识”,所以,这是足够的。
同时,我们也知道了,一个好的密码至少应包含大写字母、小写字母、数字和标点符合,且长度不小于8位。