Skip to content

December 22, 2011

20

关于密码体系

作为一个一直有受迫害妄想症的人,我始终觉得现在的密码体系非常不安全。

安全性与方便性始终是密码安全方面的一个不可调和的矛盾。目前大多数网民的习惯,是为了便于记忆,而在很多网站上使用同一组密码。基于这个假设,那么可以想象现在的密码体系是多么的不安全。

昨天CSDN的一份密码表被公布,这件事至少说明了一点,那就是网站的站主以及牛逼的黑客是可以获得密码明文的,如果在很多重要网站上使用同一密码,将很容易遭殃。且不说CSDN以前保存密码明文这件事是不是很道德,起码,貌似法律没有规定这样做是违法的吧。因此小网站的站主很有可能闲着没事存用户的密码明文,用户还发现不了。而且,据阴谋论分析,很有可能有一个凌驾于众网站之上的一个众所周知的势力要求他们保存密码明文给他看。这样一来,如果你不幸属于不同网站设成同一个密码的网民,那么即便是安全性做的很好的网站,例如Gmail啊支付宝啊什么的,其安全性也会瞬间变成浮云。

这就逼迫我们不同网站设成不同的密码。为了防止被人工研究,还不能设置诸如“主密码+renren”这种简单的密码,因为可以轻松反推你的密码设置方式,从而猜出其他密码。所以最好的方式是再使用一套算法加密一次,例如采用MD5(主密码+renren)这种方式生成密码。但是这就导致了一个问题,当你到了一个新电脑上需要输入密码时就会很麻烦,而且有些网站就是让你经常输入一遍密码,如果每次输入都要算一遍MD5实在是太蛋疼。因此此方法并不完美。

现有体系还有一点让我特别不能忍,那就是本地浏览器是保存密码明文的!!!也就是说如果有人趁你不在时使用了你的电脑,那么他可以轻易在浏览器里看见你的所有保存过的密码明文!当然我们也可以一直不保存密码,但是每次打开一个需要登陆的页面就输入一遍密码实在是过于蛋疼。一般来说密码明文是有含义的,例如这次泄露出的密码中就出现了类似“iloveXXX”的密码,自然不希望被用自己电脑的人看到。

为了解决以上种种问题,我有一个设想。

我的设想是:让操作系统和浏览器配合,在浏览器里面内置好算MD5的算法,强制性地停止储存明文,只储存和发送MD5(密码明文+网站名),密码明文只在内存中一闪而过不出现在硬盘上;同时要求所有网站不直接接受个人自己的密码,而是接受浏览器算出来的MD5值。这样网站站主就不可能得到密码明文了:手持发给某个网站MD5值的时候,不可能用这个MD5值登陆其他网站,而且以目前MD5的安全性也反推不出明文。同时,也不用怕被偷看了,反正偷看了存储的MD5值也看不懂记不住。最重要的是,这个方案一旦实行,将是造福大众而不只是自己方便。但是这项工程必须要得到各方支持 难度相当大啊。

 

无觅相关文章插件,快速提升流量

Read more from Ideas
  • 梦魇

    最后的这个方案有点不切实际,可行性太低
    我觉得思路应该按照中间段落所说,用MD5来计算生成密码,软件方面,Chrome和Firefox都有扩展插件可以简单做到这一点
    另外,自动保存密码在Chrome上是明文的,这点的确不太好,应该在查看已保存密码时加一层Google账号验证

  • http://www.eaglefantasy.com eaglefantasy

    中间的方法再方便 也只是方便了自己。。然而最后那个一旦实行,将会造福大众。。。

  • http://www.eaglefantasy.com eaglefantasy

    不过确实太不可行了。。只是说说玩而已。。。

  • wodesuck

    可以开发一个浏览器插件(chrome or firefox, IE无视之),用md5(密码+域名)作为新密码,提交给服务端,这样即使服务端用明文储存,泄漏出来也不会波及其他帐号。

  • http://www.eaglefantasy.com eaglefantasy

    这样有个问题就是你要是在其他平台上 例如手机或者ipad什么的。。那就蛋疼了。。。

  • http://twitter.com/lilydjwg 依云

    火狐保存的是密文——使用主密码加密过的,并且不具有可积极性。在查看密码前也需要再输入一遍主密码,所以暂时离开即使屏保被破解(如 Ubuntu 等桌面环境太智能了,所以插个 U 盘就可能干掉屏保),也不会轻易泄漏密码。

  • zhiqiang.org

    这是个好主意,不需要操作系统配合。只需要做一个浏览器插件即可

  • free_POC

    MD5被山东大学数学家攻破(不是反推,是碰撞),所以不是最安全,同时依然无法避免彩虹攻击。
    另外,推友 @bao3:disqus  发过推,某些部门找网站一般也是只要ID和ip,不会去要密码。

  • shevc07

    不错的想法:)
    但是这样依然无法阻止弱密码的存在,现在的MD5值破解都是预先计算好密码对应的MD5值,查找时直接匹配MD5,然后返回对应的密码明文。
    如果用户还是使用的12345678这样的弱密码,安全性依然得不到保证。

  • Liuexp

    可以把密码列表通过RSA加密,key file放在AES加密的分区里面,用户登陆操作系统时可选加载加密的分区,这样打开浏览器时只需要进行用户验证(其实chromium已经集成了浏览器里面的用户管理),验证过程中给密码列表解密,同时关闭浏览器时把解密出来的密码列表粉碎掉。

    当然如果仅仅是自己用的话,也可以直接给密码列表AES加密,不过这样通用性不怎么好。

  • 梦魇

    文中段所提的方法就是MD5(MD5(123456789)),这样不容易通过碰撞得出原始密码,即使原来的是弱密码也会变成一层强密码,当然,能加多一两层就更强了,可惜敌不过明文啊,而且换一台电脑的话就变得麻烦了……

  • Hantuo

    最后提到的想法很有创意,不过有四个问题:
    1.md5强度不够.应该使用更慢(并且可以更更慢)的算法.
    2.如何确定"网站名".可许可以使用域名,但无法处理openid等共用帐号的情况,比如"用新浪微博帐号登录".一个解决方法是服务端提供密码的hint,不过这是个复杂的事.
    3.用户"主密码"改了怎么办?每个网站分别去改密码不太方便,也容易有遗漏.
    4.web发展到现在,互联网服务通常是跨终端的,只搞定一个浏览器还不够.

    拙见.见笑~

  • xbx

    用 md5 发送密码也不过是把明文从字符串变成了 md5 而已
    仔细考虑下吧,黑客需要的并不是你的密码“明文”(这东西只有艺术上的含义而已),真正有意义的是他可以使用这个来登录你的账号,那么无论是 md5 还是 sha1 还是其他什么东西都是一样的。一句话:不要指望客户端,因为从服务器的角度来看,任何客户端发送的数据都是不可信任的。(因为客户端总可以伪造)

    解决方法当然不是没有。事实上SSL就有客户端证书验证,这个是可以抵抗中间人攻击的。而且PKI的安全性也有充分的保证。问题就是动用PKI的话麻烦的事情就太多了(尤其是要为不特定身份的多数人签发个人证书),估计没哪个CA愿意干这种事情,所以这玩意儿也就在网银上用用。

    总而言之一句话,安全性和方便性是鱼和熊掌不可兼得,所以要哪个就看自己了

  • Liaohui0719

    为什么不考虑网站发送随机密码到用户手机的方式呢?

  • 永彪 龙

    你的最后的想法解决两个问题:
    1.本地密文储存密码.
    2.用户用相似的密码登录多个网站即使某一个泄漏也不会危及其他帐号.
    用这种思路解决前一个没有意义, 既然攻击者可接触你电脑里的数据, 他得到(所有储存的)密码的密文就够了, 同样可以使用
    我觉得第二个问题用这种思路可以, 就是客户端加密后在发给服务器. 浏览器现在是内置了各种算法, 只看web应用让不让它加密. 不应该是你说的浏览器强制加密, 这样浏览器还得辨别哪些表单是密码, 恶意网站很容易骗浏览器.
    另外, md5是很不安全的, 普通电脑要找一个碰撞几秒钟的事, 如果要找一个特定的碰撞也不会难(几个小时或几天). 早有人可以伪造用md5签名的数字证书了http://www.win.tue.nl/hashclash/rogue-ca/

  • 童牧晨玄

    额,试过LastPass的浏览器插件么?基本可以达到你的要求。

  • oneb.it

    问题是客户端是不可控的,对服务器端来说,你发给他自己的密码还是md5后的密码,都是透明的

  • Ridge AnLuo

    win8计划将引入新的密码存储机制,虽然还不及博主所设想的那么严密,但已经相当不错了。

  • Strin

    直接通过MD5验证是有问题的。因为一旦有人获取了网站上存储的MD5 Hash值表,就可以伪造游览器请求发送MD5 Hash,从而获得用户验证。因此其危险度相当于明文存储密码。

  • goldengrape

    已经做出来了。http://code.google.com/p/md5-password-creator
    项目起始是在2011年的10月。
    方法是MD5(主密码+网站名+salt+时间代)
    而且最有效的方法不全是加密密码,而是每个网站生成不同的用户名,也就是一站一用户