月光博客 » 编程开发 » 你的密码还安全吗?

你的密码还安全吗?

  密码安全是一个系统的基本安全要素,读者这次投递的稿件论述只用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,技术总监和网络警察的注意。

  传统密码离它死去的日子还有多远?

  作者:TonyLiao 原文出处

  另外,对加密系统感兴趣的同学可以参考我的一篇文章《加密技术在企业数据安全中的应用》。

你的密码还安全吗?

顶一下 ▲()   踩一下 ▼()

相关文章

  1. 1
    TonyLiao   说道:
    大家好,我是原作者。
    我几个月前写的这编文章,说真的,没写好,没把意思表达好。
    md5的破解分为两部分:一是密码的收集,对黑客来说,只要诱惑你输入(用户名)密码就行了(比如说注册色情论坛)。二是盗用数据库,这个要看黑客的本领,如果他面对的是不严谨的系统管理员或数据库管理员,那他机会就大了。

    现在很多商业软件开发的时候使用md5作为用户密码,因为他们认为:md5是很安全的,即使被你偷去了,看到的也只是一些md5值,客户的保密没有问题。

    很明显,md5也会被暴力破解的。

    可以做个例子

    我现在开一个网站,用什么激情聊天,免费注册字样,吸引人注册。用户注册时输入注册用户名和密码,而我将它保存在数据库里,数据库表A只有三个字段:user_name char(10),password_ori char(10),password_md5 char(40) default md5(password_ori)。

    如果我现在偷到一个收费论坛的数据库,表B有用户名和密码.
    select A.password_ori,B.user from A,B where A.password_md5=B.password
    查出来的就是论坛的用户名和密码原型。接下来你想干嘛就干嘛去
    TonyLiao 于 2009-8-5 13:37:42 回复
    大家有没有考虑过用动态密码开发?这是个密码算法的问题了。
    路人 于 2009-8-8 16:25:42 回复
    做过这一块的人都能看得懂你的文章。正如月光在文首添加的解释,现在稍微讲究一点的网站,保存密码时都是要加salt的。

    比方说用户输入的密码是 123,存的时候并不是直接把 123 的MD5值存起来,而是先随机产生一个salt值(假设随机生成的salt=abcdef),然后针对 123abcdef 计算MD5值。存储的时候,把salt值和最后的MD5值一起存起来,下次登录的时候是用用户输入的密码添加salt后重新计算MD5与数据库中的做比对。

    因为salt值是随机产生的,则即使有两个用户使用相同的密码,数据库中存储的数据也是完全不同的。
    支持(12反对(6回复
  1. 2
    雪狐   说道:
    这就是所谓的弱密码的安全性问题
    个人认为,只要多做两部,弱密码也是安全的。
    1.将密码进行MD5散列
    2.随便加个什么算法,对一次散列后的MD5进行重组
    3.对重组后的MD5再次散列

    这样的话:
    1即使得到了重组算法也无法进行逆向处理;
    2各个网站不会用同样算法对MD5进行重组,所以MD5网站不能存储存贮足够的信息,这样通过大型数据库来破解也不可行
    支持(12反对(6回复
  1. 3
    八七二九   说道:
    这是投稿的呀。
    支持(13反对(8回复
  1. 4
    Ring   说道:
    主流的论坛早就在改了,在MD5中加salt是迟早的事.
    但要知道防破解是一回事,如果人家已经到了能拿数据库的地步,那在你网页上加一句嗅探也是很容易的,你就算加密再复杂,也没用
    cmd5老早就在卖数据了,人家在这方面的研究已经很深了,卖数据不是你想象的那么简单,那么暴利.网上有个120G的彩虹表,是免费下载的
    支持(14反对(9回复
  1. 5
    sdzym   说道:
    其实将算出的MD5再随便加1个随机数或者再做点什么简单运算就可以了!
    支持(12反对(7回复
  1. 6
    老钱   说道:
    我们可以算算理论上一个16位字母字符数字组合格式的密码组合有多少组。
    26+10+29的26+10+29次方=6.9082521647609208514055386944683e+117
    这么多个16位的密码需要多少一个多大容量的数据库来存储?
    用来卖也不那么容易吧
    支持(11反对(7回复
  1. 7
    YoungKing   说道:
    几台服务器日夜不停算md5存起来,算上几年估计短的就差不多收录全了
    支持(12反对(8回复
  1. 8
    中悦   说道:
    并不是很了解。不过,密码这东西,如果没利益,那就不会有人去打你主意了。
    支持(11反对(7回复
  1. 9
    滚天   说道:
    我一般都是字母加数字的组合密码
    支持(14反对(10回复
  1. 10
    瞎子   说道:
    两个特殊字符连用,就会好那么一点点。
    支持(14反对(11回复

发表留言