使用统计学方法破解密码
发布时间:2016-12-16
为什么统计手段如此重要?
随着信息安全知识的普及,以及人们程度越来越高的重视,密码使用人在设定密码的时候往往会采用比以往更加复杂的策略,甚至一些人开始采用其他手段,如Bcrypt来取代传统哈希。Bcrypt相较于传统哈希,具有更长的生成时间,因此也就更加难以被经典的破解手段:暴力破解所攻破。在2012年,有密码破解者曾经组织了一个带有25个GPU计算核心的破解集群,这个集群可以在1秒钟之内计算3500亿个NTLM哈希口令,却每秒仅能计算71000个Bcrypt哈希。从这个数据可以看出,每生成500万个NTLM哈希的时间,机器仅可以计算1个Bcrypt哈希,因此对于NTLM有效的暴力破解方式却在Bcrypt破解上遇到难题。
Password attack |
Description |
Dictionary |
字典破解 |
Hybrid/rules |
混合/规则式破解 |
Markov |
马尔可夫预测模型 |
Mask |
掩码破解 |
Brute Force |
暴力破解 |
破解效率的提升方式
当今环境下,破解效率成为密码破解行业突破的关键。设定一个大的密码尝试空间让其覆盖所有用户可能设定的密码,就可以破解出密码,这个想法当然很好,但是带来的问题也会令人头疼:破解集群要遍历这个空间要花费很长很长的时间,甚至是令人难以接受的。因此,密码破解更好的破解思路是,优先遍历那些小的,但是具有高密码出现概率的空间,比如我们可以把人们常用的密码放在一部字典里,优先使用这个字典进行破解;随后逐渐对这个空间进行扩展,如为这个字典里的每一个口令加上一个前缀或者后缀,又或者是改变字典中口令的大小写方式等;接着可以考虑使用机器学习的方法,如马尔可夫链等,对高概率密码进行预测和生成;如果以上方式都未奏效的话,我们最后可以使用掩码方式进行尝试,比如对于密码”admin2015”来说,我们需设定5个小写字母位,还有4个数字位,就可以对该密码进行破解了。这样一来,我们要面对的问题就变为:如何能够设定有效的掩码空间呢?
数据与统计
为解决以上问题,我使用了一些网上流传的泄漏密码库进行分析,试图找出密码之间的所具有的隐式关系:他们具有相同的密码结构。我采用的密码库总共包括3400万个密码,这些密码来自于一些业内有名的泄漏库,如RockYou、LinkedIn、phpBB等等。
密码总空间: |
34,659,199 |
||
Rockyou |
14,344,391 |
eHarmony |
1,513,935 |
10-million-combos |
10,000,000 |
phpBB |
184,389 |
|
8,616,484 |
由上表可以看出,接近50%的密码设定是具有相同规律的,而且在接近50%这个点后,统计数据出现断崖式下降,说明后续密码的设定规律不是特别明显。基于以上实验数据,我们可以得出结论:当我们需要设定密码时,我们需要一定的逻辑关系帮助我们记忆密码,而这种逻辑关系是具有相似性的:比如我们需要在密码中包含大写字母时,我们一般会将密码的首字母进行大写;当我们需要使用数字组成密码时,我们或者将密码最后两位设为对我们有意义的数字(如生日等),或者将密码最后四位设定为便于我们记忆的数字(如出生年份)等。通过以上实验数据和实践经验,我们可以更好地预测密码间所具有的相同设定习惯,从而更好地为密码破解进行服务。
破解加速手段
基于以上实验结果,我们可以进行大胆的假设:用户将密码设定为“potatoes”的可能性要大于将密码设定为”psdfwefmn”(随机密码)的可能性,尽管这两个密码都是以字母p进行开头。因此,当给定一个密码空间时,如果我们发现一串连续的字符时,这个字符是一个完整单词或缩写的可能性,要大于一串随机字符。这个假设可以帮助我们大大减少尝试密码的空间,从而提高破解效率。
(原创作品,转载请注明出处!)