泄密门,大家发现天涯这类大网站直到2009年还使用明文存放用户密码,于是杯具了。
那么网站使用md5加密,在数据库被爆后,安全性如何呢?我们来做个测试:
假设我的密码是lovemybaby,我们生成32位大写md5加密的样子,使用这个网址,如下图
MD5码是:DCE24495C43E06221928F3CE8C501856
然后到MD5解密网址,注意这只是一个演示站(实际上黑客数据库的数据量会大很多),如下图
解密MD5后得到密码:lovemybaby,破解成功!
破解原理:
第一点:利用MD5字典对照破解
MD5加密是采用不可逆方式存储,上述网站并非找到了可逆的算法,利用MD5字典对照破解。这和暴力破解是有区别的,暴力破解是先有明文密码字典,然后将第一条明文密码转换成MD5串,和现有的MD5串对照,如果不同再进行第二条密码对比。这种方法破解效率是很低的。上述MD5破解站,一般拥有一个数据达上亿条(甚至上万亿)的MD5串数据库,破解时直接比对MD5加密数据,相当于执行一句 select * from md5_table where md5_code = this_md5_code一条语句,如果服务器快,查询速度会非常快。
第二点:一个MD5串可能对应多个明文密码,增加了泄密的可能
MD5的不可逆加密方式,意味着一个MD5串可能对应多个明文密码。这相当于上述破解工作的效率会数倍、数十倍提升。
即使用户想出了一个超级复杂的密码A也白搭,因为AMD5加密后,也许会很快被破解为密码B,而且这个密码也同样有效。
MD5加密安全么?
1. 在网站数据库没有泄露的情况下,MD5加密基本安全。
原因很简单:数据库没泄露,意味着黑客不知道你的MD5串。那么黑客只能用暴力破解的方法不断用明文尝试密码。设想一下,某黑客通过不断调用天涯登陆界面来试密码,不知道猴年马月才能试出来一个用户的密码。除非这个黑客是傻的或跟你前世有仇,他们不会这么做的。设想另一种情况,黑客控制了天涯的web服务器但还没搞掂天涯数据库(这种情况很少发生,因为web服务器通常会包含访问数据库的方法),只要一天黑客没有得到你的MD5串,黑客只能通过web服务器去修改你的密码,而无法直接获取用户现有密码。
2. 在网站数据库泄露的情况下,MD5串形同虚设
我们看到网上公开的信息,有些网站用户的密码是MD5加密的。按照前文所述,黑客只要采用MD5字典简单查询,就可以匹配绝大多数用户密码。按照 http://www.cmd5.org/ 所说的,93%的MD5串都可以用破解。所以被爆库但采用MD5加密的网站,不要沾沾自喜,大多数用户的密码实际上相当于已经泄露!
作为普通用户,我们该怎么办?
1. 区分网站规模大小,密码分级
第一类密码:新浪搜狐腾讯淘宝这样的大型互联网公司,采用比MD5更高级的加密方法,如SHA1/256/512或数字证书,破解比MD5麻烦很多。
第二类密码:个人相关,但网站规模中等。招聘网站、大多数购物网站、交友网站、SNS社区。
第三类密码:中小网站。不管你们信不信得过,反正我是不信的。
2. 支付密码绝对不要和其他密码类似或相同
支付密码,网上银行密码,这类密码需要最谨慎,尽量单独设置。
采用MD5加密方式的网站拥有者该如何?
1. 各个环节,严防死守,保障服务器安全。
被爆库是不可饶恕的罪,无论你是MD5还是SHA加密。这就不多说了。
2. 用户密码不要直接转MD5,要结合用户名、用户ID,生成复合型MD5串。
这样黑客虽然破解MD5串,但也无法得到真实用户密码。当然你的编码规则不能让黑客了解。假如网站采用PHP明文写代码,黑客如果侵入了web服务器,很容易得到MD5编码规则,所以要对代码进行加密。如果采用.net编译后的代码,最好用混淆工具处理一下,增加黑客的难度。
3. 尽可能将MD5串升级为SHA级别