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

你的密码还安全吗?

  密码安全是一个系统的基本安全要素,读者这次投递的稿件论述只用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
    狂人中国   说道:
    真是太可怕了
    支持(10反对(6回复
  1. 10
    滚天   说道:
    我一般都是字母加数字的组合密码
    支持(14反对(10回复
  1. 11
    瞎子   说道:
    两个特殊字符连用,就会好那么一点点。
    支持(14反对(11回复
  1. 12
    kansing   说道:
    嘿嘿...存储太方便了..没办法
    支持(14反对(11回复
  1. 13
    wei   说道:
    那个网站是“破解”呢,还是根据一个已有的库“查询”呢?误导。转载时候可以注意一些这样的问题。
    Tonyliao 于 2009-8-5 13:35:04 回复
    不是误解,按密码字典(库)来查找并不断尝试,也叫暴力破解。
    比如我是A网站的数据库管理员,我可以查到你的用户名user,密码是md5值,去cmd5网站把它反查出字符串出来。再用这个用户和密码去B,C,D网站去尝试登录(现在网上有一些perl程序,自动读密码字典去尝试登录论坛的)
    支持(10反对(7回复
  1. 14
    arthas   说道:
    其实安全性一般是和重要性成正比的, 盗取普通数据库和盗取高强度安全保护的数据库, 其难度差距是非常大的。没有价值的普通密码, 哪里有人吃饱了撑了来破解? 说白了, 关键还是看收益...
    支持(10反对(7回复
  1. 15
    歪豆   说道:
    新的密码技术在兴起,传统密码消失只是时间问题。但也许最简单的也许就是最意想不到、最强的
    568g 于 2009-8-4 11:58:22 回复
    事实,传统密码消失只是时间问题
    支持(11反对(9回复
  1. 16
    robertbao   说道:
    要保护好密码
    支持(13反对(11回复
  1. 17
    为什么博客   说道:
    数字+字母一概是安全的
    支持(10反对(8回复
  1. 18
    Sparkle   说道:
    goodday123就解不开了
    支持(11反对(9回复
  1. 19
    北极天南星   说道:
    穷举所有MD5值的话需要存储36^32个项目
    这还没有考虑到可能造成的Hash冲突
    这样的存储量没有哪台服务器可以做到
    支持(13反对(11回复
  1. 20
    Sunny   说道:
    我用的LASTPASS
    支持(9反对(7回复
  1. 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的话,查询还是非常快的
    支持(11反对(9回复
  1. 22
    tintinbt   说道:
    看来,不管程序怎么写,加多少随机数都好,如果管理员要今偷你的密码,还是可以把这些附加的信息去除, 然后为所欲为了.
    关键, 还是要自己的密码够复杂才是王道啊!
    支持(11反对(9回复
  1. 23
    zvhdd   说道:
    还是那句话,加盐就摆平这篇文章的所有问题。而加盐是单向Hash储存密码最起码的步骤
    支持(8反对(7回复
  1. 24
    仁心博客   说道:
    只要是人作的,肯定有破绽
    支持(10反对(9回复
  1. 25
    搜户居   说道:
    其实对我们来说,真是没什么安全的.不管怎么样.
    支持(9反对(8回复
  1. 26
    dylanklc   说道:
    潘承洞就是搞解析数论的,带出来王小云 对SHA-1 MD5的算法进行优化 极大地缩短了碰撞时间,这并不等于破解.
    支持(9反对(8回复
  1. 27
    xiaoxiaozhu   说道:
    密码设置为动态的即可,针对不同的网站变换密码中的一个字符
    支持(8反对(8回复
  1. 28
    Calon   说道:
    MD5“破解”好像实际是证明了存在碰撞情况
    HeavenFox 于 2009-8-3 23:17:03 回复
    碰撞一定会有,依鸽笼原理
    支持(10反对(10回复
  1. 29
    谷歌中国   说道:
    其实没有什么是绝对安全的。
    支持(9反对(9回复
  1. 30
    hamo   说道:
    现在稍微注意点的程序都是带salt的md5,并且可能循环多次(比如wordpress),字典式反查就没用了
    支持(7反对(7回复
  1. 31
    TaoGOGO   说道:
    2005年就已经出来xmd5破解网站了,现在又拿出这种没技术含量的文章来,审核是不是质量应该高一点啊?一个月光粉丝之见
    TonyLiao 于 2009-8-4 12:36:35 回复
    你知道破解方法?是说破解了,是用HPC破解的,而且时间也不短,估计你一辈子都看不明白那破解方法
    支持(8反对(8回复
  1. 32
    jeff   说道:
    无知的贴主。
    支持(11反对(11回复
  1. 33
    jangiu   说道:
    看来老百姓越来越困难了
    支持(9反对(9回复
  1. 34
    softwave   说道:
    MD5算法是有密钥的,这种纯比对的方法如何取得密钥?
    支持(10反对(10回复
  1. 35
    白菜博客   说道:
    看来写这篇文章的也是对密码机制不了解啊,呵呵。作者还需加强学习哈。
    支持(9反对(9回复
  1. 36
    麦克学摇滚   说道:
    动态密码也不安全吧。
    支持(8反对(9回复
  1. 37
    七叶草   说道:
    互联网总是让人没有安全感。。。。
    支持(10反对(11回复
  1. 38
    木瓜   说道:
    密码学很深奥的
    支持(9反对(10回复
  1. 39
    卢松松   说道:
    我的密码不安全,但作用也不大
    支持(9反对(10回复
  1. 40
    nicidoggy   说道:
    这年头,啥都不安全
    支持(9反对(10回复
  1. 41
    freedom   说道:
    MD5(用户名+用户密码+随机数)这个是什么意思?
    传统的做法是把用户密码生成 MD5 串后保存在数据库,用户在登陆时再输入密码,在客户端根据密码生成 MD5 串发送给服务器(如果是直接发送密码到服务器端再生成 MD5 串再存入数据库,则管理员可以获得用户密码,但非法得到数据库的人无法获得密码。如果是在客户端生成 MD5 串再发送出去,则管理员和非法得到数据库的人均无法获得用户的密码)。服务器再把用户发送来的 MD5 串和数据库中的 MD5 串进行比较从而通过验证。

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

    只有注意保护密码的人与方法~
    支持(8反对(10回复
  1. 45
    nick19   说道:
    这期内容不错。。。 我也是月光粉丝。。。 新人。。 嘿嘿。。

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


    以上只是小N 读后所感,若有不对之处还请指教。
    支持(6反对(9回复
  1. 46
    阿本   说道:
    越来越麻烦了。
    支持(7反对(11回复
  1. 47
    YoungKing   说道:
    md5直接用太不安全了,人家的超级宇宙无敌md5库常用的都收录的。
    我觉得md5两次还是比较安全的吧
    支持(6反对(10回复
  1. 48
    jack   说道:
    呵呵,这就不用担心了,国家养了很大一批人在干这个;
    支持(9反对(14回复
  1. 49
    8729   说道:
    反正不太安全。。。
    支持(9反对(15回复
  1. 50
    xI4oh4o   说道:
    变异MD5还算安全,毕竟多了随即。暴力也要算很久
    支持(5反对(12回复
  1. 51
    sinomazing   说道:
    网站当然有防止防止资料泄漏后md5碰撞的方法 可以在网上搜salt+md5 了解详细情况
    支持(8反对(15回复

发表留言