问题描述:
在任何一个需要有用户参与的web应用中,就需要确保用户账号密码的安全性。比较常见的是MD5直接对密码加密,或者是通过加入随机数(盐值SALT)进行混淆加密。但这些规则对黑客来说并不是难事。那如何提高密码的安全性?
什么是MD5加密?
MD5的全称是Message-Digest Algorithm 5,MD5广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的,用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,来验证该用户的合法性。
什么是盐值加密?
非加盐值MD5等都可以通过大型的密码(如彩虹表)表进行对比解密,破解相对轻松。或者通过MD5解密网站可直接解密。由于使用加盐值以后的密码相当的安全,即便是你获得了其中的salt和最终密文,破解也是一个耗费相当多时间的过程,可以说是破解单纯MD5的好几倍。
什么是MD5(md5(password)+salt)加密规则?
由于使用加盐值以后的密码相当的安全,即便是你获得了其中的salt和最终密文,破解也是一个耗费相当多时间的过程,可以说是破解单纯MD5的好几倍,那么MD5(md5(password)+salt)加密规则的密文是如何产生的呢?
- 首先我们得到的是明文的hash值
- 进行计算获取MD5明文hash值
- 随机生成加盐值并插入
- MD5插入加盐值得到的hash
- 得到最终的密文
加盐值的密文能否破解?
因为像windows hash(未进行syskey加密)、非加盐值MD5等都可以通过大型的密码(如彩虹表)表进行对比解密,所以相对而言相当的轻松,而带有加盐值的密文就相对而言复杂的多,现在的MD5表大概是260+G,如果加盐值的可能性有10000个,那么密码表的应该是MD5 size*10000,就可以解密出原MD5表能够解密的密码了,一些网站也提供了对应的salt解密,但是测试以后效果并不是非常好,如常规的admin888也未解密出,实在是遗憾,毕竟MD5本是不可逆的,带入随机值解密出最终密码的可能性就更低了,至少是相对大多数人而言的。
如果MD5盐值泄露?
如果没有盐,当我恰好知道自己的密码的MD5恰好和她的密码的MD5值一样,而我的密码是iloveu,那么她的密码一定就是iloveu。有了盐,即使我知道她的盐,因为MD5出来的差异大不同(Rule-4),所以我也无法知道她的密码,即使我们的密码是一样的。盐是要确保每个用户都是不一样的。一般的随机算法或时间函数都能实现这一点。
盐如果泄密了,黑客仍然能够通过穷举法得到我们的密码。方法是黑客使用与我们相同的加盐和搅拌方法,得到MD5值。所以就引入了一次一密的登录加密方法,一次一密不是我们每次都要改登录密码,而是我们每次登录之后,盐都是要重新计算,更新――我称这个是酱油。这给黑客破解我们的密码增加了相当大的难度。
是否还需要HTTPS安全证书协议?
其实,黑客不需要知道我们的密码,它们只需要截断消息,伪造session和消息,就能冒充我们。因此对于网上银行一类的网站,光有盐和酱油还是远远不够的。这就牵扯了ssl,证书,key,短信,token等等一堆的东西。网站不但要验证我们,我们也要验证网站。对于用户,你必须是我信赖的网站;对于网站,你必须是我的用户。
谁在用加盐值MD5算法?
目前多家的网站程序公司都已经加入了该算法,如常见的VBB论坛、discuz论坛等都采用了,甚至著名的Linux开源操作系统早已经加入了这种加密模式。可得而知,这种算法势必会在未来应用于更多的范围。
结论:
在普通的web应用中,尽量采用一次一密的登录加密方法。https安全证书是收费的,如果条件允许,可以结合https安全证书共同加密,提高加密级别。
?