青青子衿, 悠悠我心, 但为君故, 沉吟至今
« 基于GAE的Twitter RSS Feed过滤工具如何建立个人网上品牌 »

你的密码还安全吗?

  密码安全是一个系统的基本安全要素,读者这次投递的稿件论述只用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 原文出处

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



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/1882.html
  • 文章排行:
  • 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值是随机产生的,则即使有两个用户使用相同的密码,数据库中存储的数据也是完全不同的。
  • 2009/8/4 12:35:17   支持(12)反对(6) 回复
  • 2.雪狐
  • 这就是所谓的弱密码的安全性问题
    个人认为,只要多做两部,弱密码也是安全的。
    1.将密码进行MD5散列
    2.随便加个什么算法,对一次散列后的MD5进行重组
    3.对重组后的MD5再次散列

    这样的话:
    1即使得到了重组算法也无法进行逆向处理;
    2各个网站不会用同样算法对MD5进行重组,所以MD5网站不能存储存贮足够的信息,这样通过大型数据库来破解也不可行
  • 2010/7/30 14:32:42   支持(12)反对(6) 回复
  • 4.Ring
  • 主流的论坛早就在改了,在MD5中加salt是迟早的事.
    但要知道防破解是一回事,如果人家已经到了能拿数据库的地步,那在你网页上加一句嗅探也是很容易的,你就算加密再复杂,也没用
    cmd5老早就在卖数据了,人家在这方面的研究已经很深了,卖数据不是你想象的那么简单,那么暴利.网上有个120G的彩虹表,是免费下载的
  • 2009/8/3 23:39:09   支持(14)反对(9) 回复
  • 5.sdzym
  • 其实将算出的MD5再随便加1个随机数或者再做点什么简单运算就可以了!
  • 2009/8/4 5:09:39   支持(12)反对(7) 回复
  • 6.滚天
  • 我一般都是字母加数字的组合密码
  • 2009/8/18 20:33:06   支持(14)反对(9) 回复
  • 7.老钱
  • 我们可以算算理论上一个16位字母字符数字组合格式的密码组合有多少组。
    26+10+29的26+10+29次方=6.9082521647609208514055386944683e+117
    这么多个16位的密码需要多少一个多大容量的数据库来存储?
    用来卖也不那么容易吧
  • 2009/8/3 23:35:26   支持(11)反对(7) 回复
  • 8.YoungKing
  • 几台服务器日夜不停算md5存起来,算上几年估计短的就差不多收录全了
  • 2009/8/3 23:39:53   支持(12)反对(8) 回复
  • 9.中悦
  • 并不是很了解。不过,密码这东西,如果没利益,那就不会有人去打你主意了。
  • 2009/8/4 0:54:33   支持(11)反对(7) 回复
  • 11.瞎子
  • 两个特殊字符连用,就会好那么一点点。
  • 2009/8/3 23:40:59   支持(14)反对(11) 回复
  • 12.kansing
  • 嘿嘿...存储太方便了..没办法
  • 2009/8/4 0:03:21   支持(14)反对(11) 回复
  • 13.wei
  • 那个网站是“破解”呢,还是根据一个已有的库“查询”呢?误导。转载时候可以注意一些这样的问题。
    Tonyliao 于 2009-8-5 13:35:04 回复
    不是误解,按密码字典(库)来查找并不断尝试,也叫暴力破解。
    比如我是A网站的数据库管理员,我可以查到你的用户名user,密码是md5值,去cmd5网站把它反查出字符串出来。再用这个用户和密码去B,C,D网站去尝试登录(现在网上有一些perl程序,自动读密码字典去尝试登录论坛的)
  • 2009/8/5 0:25:27   支持(10)反对(7) 回复
  • 14.arthas
  • 其实安全性一般是和重要性成正比的, 盗取普通数据库和盗取高强度安全保护的数据库, 其难度差距是非常大的。没有价值的普通密码, 哪里有人吃饱了撑了来破解? 说白了, 关键还是看收益...
  • 2009/8/8 0:00:46   支持(10)反对(7) 回复
  • 15.歪豆
  • 新的密码技术在兴起,传统密码消失只是时间问题。但也许最简单的也许就是最意想不到、最强的
    568g 于 2009-8-4 11:58:22 回复
    事实,传统密码消失只是时间问题
  • 2009/8/3 22:25:01   支持(11)反对(9) 回复
  • 17.为什么博客
  • 数字+字母一概是安全的
  • 2009/8/3 23:31:34   支持(10)反对(8) 回复
  • 19.北极天南星
  • 穷举所有MD5值的话需要存储36^32个项目
    这还没有考虑到可能造成的Hash冲突
    这样的存储量没有哪台服务器可以做到
  • 2009/8/4 11:28:57   支持(13)反对(11) 回复
  • 21.williamlong
  • 由于sql注入、跨站脚本攻击、上传漏洞、以及一些网管的粗心大意等原因,造成不少论坛被攻破,数据库被盗,这对用户的隐私和个人信息安全造成了很坏的影响。尤其是很多用户对多种网络服务使用同一密码,如果论坛密码被窃,将威胁到用户的邮箱,即时通讯,网银等一系列的安全。以至于出现了“一个密码引发的血案”。
    现在常用论坛都是将用户密码用MD5等hash函数hash后,再存放在数据库中。这种做法在一定程度上提高了安全性。万一不法分子得到数据库后,只拿到用户密码的HASH值。但一般用户在设置密码时,为了怕忘记,大多数采用姓名拼音,生日,常用单词,数字串单独或组合使用的方式。所以,不法分子只需将这些数据及其hash值存放在数据库中,再通过查询hash值的方式,就能破解很多用户的密码。如果这个字典数据库足够大,并且字典比较符合人们的设置习惯的话,那威力是惊人。以至于现在网上出现了MD5 hash串查询的网站,号称用4T硬盘共存储md5记录4574亿条,能破译动网论坛83%的密码。
    那么如何防范这种字典攻击和网上那种MD5 hash串查询攻击呢。salt是一随机字符串,它与口令连接在一起,再用单向函数对其运算,然后将salt值各单向函数运算的结果存入数据库中。如果可能的salt值的数目足够大的话,它实际上就消除了对常用口令采用的字典式攻击,因为不法份子不可能在数据库中存储那么多salt和用户密码组合后的HASH值。当然,他们仍可以对单个用户的密码进行暴破。所以用户最好不要在不同的地方使用相同的口令。但利用salt后的安全性还是有所示增加的。
    TonyLiao 于 2009-8-5 13:41:47 回复
    月光说的正是我想说的。
    如果我是cmd5网站站长的话,会考虑把这些密码一次性卖掉,收入应该是可观的。
    即使4TB的数据库,在数据库里加入index的话,查询还是非常快的
  • 2009/8/5 9:11:59   支持(11)反对(9) 回复
  • 22.tintinbt
  • 看来,不管程序怎么写,加多少随机数都好,如果管理员要今偷你的密码,还是可以把这些附加的信息去除, 然后为所欲为了.
    关键, 还是要自己的密码够复杂才是王道啊!
  • 2009/8/12 0:53:07   支持(11)反对(9) 回复
  • 23.zvhdd
  • 还是那句话,加盐就摆平这篇文章的所有问题。而加盐是单向Hash储存密码最起码的步骤
  • 2009/8/4 10:17:32   支持(8)反对(7) 回复
  • 24.仁心博客
  • 只要是人作的,肯定有破绽
  • 2009/8/4 17:48:17   支持(10)反对(9) 回复
  • 25.搜户居
  • 其实对我们来说,真是没什么安全的.不管怎么样.
  • 2009/8/5 11:48:53   支持(9)反对(8) 回复
  • 26.dylanklc
  • 潘承洞就是搞解析数论的,带出来王小云 对SHA-1 MD5的算法进行优化 极大地缩短了碰撞时间,这并不等于破解.
  • 2009/8/14 17:43:57   支持(9)反对(8) 回复
  • 27.xiaoxiaozhu
  • 密码设置为动态的即可,针对不同的网站变换密码中的一个字符
  • 2009/8/3 22:51:59   支持(8)反对(8) 回复
  • 28.Calon
  • MD5“破解”好像实际是证明了存在碰撞情况
    HeavenFox 于 2009-8-3 23:17:03 回复
    碰撞一定会有,依鸽笼原理
  • 2009/8/3 22:54:05   支持(10)反对(10) 回复
  • 29.谷歌中国
  • 其实没有什么是绝对安全的。
  • 2009/8/4 7:27:20   支持(9)反对(9) 回复
  • 30.hamo
  • 现在稍微注意点的程序都是带salt的md5,并且可能循环多次(比如wordpress),字典式反查就没用了
  • 2009/8/4 8:36:46   支持(7)反对(7) 回复
  • 31.TaoGOGO
  • 2005年就已经出来xmd5破解网站了,现在又拿出这种没技术含量的文章来,审核是不是质量应该高一点啊?一个月光粉丝之见
    TonyLiao 于 2009-8-4 12:36:35 回复
    你知道破解方法?是说破解了,是用HPC破解的,而且时间也不短,估计你一辈子都看不明白那破解方法
  • 2009/8/4 10:06:26   支持(8)反对(8) 回复
  • 34.softwave
  • MD5算法是有密钥的,这种纯比对的方法如何取得密钥?
  • 2009/8/17 1:31:33   支持(10)反对(10) 回复
  • 35.白菜博客
  • 看来写这篇文章的也是对密码机制不了解啊,呵呵。作者还需加强学习哈。
  • 2010/11/27 21:50:50   支持(9)反对(9) 回复
  • 37.七叶草
  • 互联网总是让人没有安全感。。。。
  • 2009/8/4 0:46:02   支持(10)反对(11) 回复
  • 38.卢松松
  • 我的密码不安全,但作用也不大
  • 2009/8/4 11:40:01   支持(9)反对(10) 回复
  • 40.freedom
  • MD5(用户名+用户密码+随机数)这个是什么意思?
    传统的做法是把用户密码生成 MD5 串后保存在数据库,用户在登陆时再输入密码,在客户端根据密码生成 MD5 串发送给服务器(如果是直接发送密码到服务器端再生成 MD5 串再存入数据库,则管理员可以获得用户密码,但非法得到数据库的人无法获得密码。如果是在客户端生成 MD5 串再发送出去,则管理员和非法得到数据库的人均无法获得用户的密码)。服务器再把用户发送来的 MD5 串和数据库中的 MD5 串进行比较从而通过验证。

    你这个随机数是什么意思?把随机数作为 MD5 串的一部分?这个没有说清楚。
    williamlong 于 2009-8-7 17:40:59 回复
    就是把用户名和密码以及一个指定的字符串进行MD5,然后保存在数据库中,用户登录的使用根据这个进行比较。
  • 2009/8/7 17:06:26   支持(10)反对(11) 回复
  • 43.qong
  • 确实是很危险的啊,字典一完善,那密码就完全失去了保密性。
  • 2009/8/4 9:31:33   支持(8)反对(10) 回复
  • 44.园子
  • 没有绝对安全的密码

    只有注意保护密码的人与方法~
  • 2009/8/4 12:02:41   支持(8)反对(10) 回复
  • 45.nick19
  • 这期内容不错。。。 我也是月光粉丝。。。 新人。。 嘿嘿。。

    密码可以随机化设定, 绝对不用同一个密码对应同一个帐户。 随机数组、随机字符、随机数字、大小写随机用……
    帐户尽量不用同一个。。 这样能安全许多。
    密码设定心理过程隐藏好不被社工安全性就大大提高了。。


    以上只是小N 读后所感,若有不对之处还请指教。
  • 2009/8/4 21:55:19   支持(6)反对(8) 回复
  • 46.YoungKing
  • md5直接用太不安全了,人家的超级宇宙无敌md5库常用的都收录的。
    我觉得md5两次还是比较安全的吧
  • 2009/8/3 23:37:20   支持(6)反对(10) 回复
  • 50.jack
  • 呵呵,这就不用担心了,国家养了很大一批人在干这个;
  • 2009/8/4 16:57:04   支持(8)反对(14) 回复
  • 51.xI4oh4o
  • 变异MD5还算安全,毕竟多了随即。暴力也要算很久
  • 2009/8/4 0:39:43   支持(5)反对(12) 回复
  • 52.sinomazing
  • 网站当然有防止防止资料泄漏后md5碰撞的方法 可以在网上搜salt+md5 了解详细情况
  • 2009/8/5 4:46:14   支持(8)反对(15) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.