什么是好密码?几乎每一个网站都给出了差不多一样的标准:
长度得8位以上;需含大小写字母、数字及符号;不要用任何出现在字典里面的词,包括部分替换(如用p@ssword或fai1也不好)。
只要你的密码满足了这些标准,基本上网站都会奖励你一个绿色的强密码标示—好密码。但是实际上你和网站都错了。为什么?原因首先要从密码是如何被破解讲起。
黑客如何破解密码
网站是通过比对输入的密码与数据库中的密码来验证用户的。但是一般这些密码都不是以明文的方式存放,而是用哈希算法对保存的密码进行单向加密,输出的结果是无法逆向工程出来的。比方说“123456”经过SHA-1哈希算法得出的结果是7110eda4d09e062aa5e4a390b0a572ac0d2c0220,通过这个结果是无法知道原始密码的。
然后用户登录时输入的密码也会被利用同样的哈希算法计算出哈希值,再与存放在数据库中的正确密码哈希值比对,一致则说明输入密码正确。
拿到哈希密码文件的黑客可利用暴力破解法比对哪个账号与哪个密码相关。他们可以从简单一点的密码开始,这些密码可以从之前的攻击字典库查找,也可以从一般的字典上查找,然后进行单词组合。
如果密码长度较短,采用的字符集仅仅是大小写的话,破解的速度会快很多。黑客可以用彩虹表(预先计算的哈希值)来加速暴力破解的速度。按理来说上述采用复杂不常见的密码应该是不错的选择(比方说像Spooning1!,因为生僻,很难被列入彩虹表)。但实际上并非如此。
因为现在的计算能力已经非常强大,用普通计算机结合显卡阵列的GPU能力,暴力破解法每秒钟可处理10亿到千亿用SHA-1算法加密的密码。不过尽管如此,如果密码有11、12位或以上,并且完全是在所有可能的字符中随机生成出来的话,哪怕有这么强大的计算能力暴力破解法也是很难破解的。
讲故事,设密码
但问题是大部分人都不是用随机生成的密码的。当然,大家不用随机密码也是有原因的,因为随机密码难记(大脑机制就这样,很难记住随机字母数字符号组合)。可麻烦就麻烦在这里,因为那些“好密码”规则已经被黑客熟知。Markus Jakobsson指出,其实这就是密码设置的安全性与可用性的矛盾。
在研究中Jakobsson发现,有人因为喜欢苹果,所以密码就用了“apples”,但是网站要求有大写字母,所以他就把第一个字母改成了A,可能网站说这样不安全,还必须有数字和字母,通常用户就会选择满足规则的最简单方式,在后面加个1再加个!—“Apples1!”。按照前面密码的设定规则,“Apples1!”无疑是一个好密码(至少跟那些糟糕的密码相比)。
但是黑客在破解时往往也会如法炮制,利用字典加上个别字母替换,以及上述常见的数字、符号扩展来缩短破解时间(如利用马尔可夫链技术来预测)。2013年中三位安全专家就利用了某一泄露的数据库进行过测试,其1小时成功率为60%,而20小时成功率更是达到了90%。
作为替代,Jakobsson建议用户采用所谓的“快速写词”法来设置密码,即用几个单词来组织成一个故事,从而构成密码组合。比方说,跑步时踩到一只松鼠,可以快速记忆为“running forest squirrel”。这种办法因为有故事情节所以方便记忆,但是由于所用字符数通常超过了10到12个,暴力破解法是很难破解的,除非破解者采用单词组合等其他技术。但是单词组合的可能性近乎无限,对于暴力破解来说差不多是无解的。
话虽如此,在设置密码时故事也不能乱讲。研究者发现,用“快速密码”法设置的密码的安全性取决于所用组合在语料库中出现的概率。比方说,常见的“I love you honey”在微软的语料库Web N-gram Services中的出现频率为2/100000000,相对而言这属于很糟糕的密码。而讲述工作路上不小心踩扁了一只青蛙的“frog work flat”的出现几率却只有百万的3次方份之一,强度非常之高。所以,要想取好密码,关键得讲好你的故事。
不过密码专家认为,相对于仅仅在密码设置上下功夫,更好的办法是广泛采用双因子认证的方式来确保安全,这样不安全的密码就不会成为抵御攻击的唯一屏障了。