密码安全是一个系统的基本安全要素,读者这次投递的稿件论述只用MD5进行密码HASH并不安全,如果将这个HASH数值保存在数据库中,有可能会被人破解。我认为,比较安全的密码保存方法是MD5(用户名+用户密码+随机数),这个HASH数值不仅无法反向破解,而且无法替换,完美的解决了读者的这个疑问。以下是读者的投递文章。
你的密码安全吗?你觉得你的密码已经很复杂了?密码再复杂,都有可能被破解掉。
让我们做个实验吧,你手里有数据库吗?如果有,用数据库的函数计算你的密码md5值。
如果没有,可以到这个网站去计算。为了你的密码安全,不要用“真”的密码去试,虚拟一个密码吧。我拿密码“goodday ”来试验。在上面的网站计算goodday的md5值(32位)。得出结果0CF21CE35322D2E56D745E319B933470
我们拿这个值到这个网站去破解吧。得到的结果是什么?goodday!说明这个密码并不安全。
为什么这么说?假如你是某论坛的用户,因为这个论坛管理不当,或其它人为原因,导致数据库被“偷”。那你的用户名和密码就被hacker拿去了,他们可以通这类似的网站“破解”你的密码。有了你的用户和密码,可以在这个论坛以你的名义发贴,修改。可以查你相关的资料,然后以相同的密码试你在其它应用上的帐号,比如说QQ,facebook之类的。
md5的反算是相当麻烦的,甚至可以说是不可行的(据说山东某大学的女博士破解了它,但破解方法有多少人懂?)。但为什么可以通过md5值“破解”掉密码呢?其实cmd5这个网站做得相当的简单,它只是不是用数据库两个字段而已,一个字段保存原来的字符串,一个字段保存字符串的md5值。它通过存储过程(或其它程序)插入一些字符串(如密码字典),md5值由数据库生成。页面查找只是查找相关记录而已。
然后,这个字符串添加的渠道就是个问题了。这些网站似乎还没有意识到这个利益。
假如说,这些网站提供用户查询功能,包括md5的正向运算,用户好奇要算算自己密码的md5值。算完后,网站“顺便”把它的密码和md5值保存起来,日积月累,那这个数据库就相当于一个超大的密码字典,卖出去肯定值钱。
如果有人以这个数据库作为密码字典写破解程序,破解起来就容易多了。
我觉得,这些都应该引起sysadmin,DBA,技术总监和网络警察的注意。
传统密码离它死去的日子还有多远?
另外,对加密系统感兴趣的同学可以参考我的一篇文章《加密技术在企业数据安全中的应用》。