我理解的密码破解,大家看有问题不

2014-12-11 21:28:24 +08:00
 fange01
网站密码的保存大致经历了 明文——md5——md5(salt)——多重认证。
明文:顾名思义,就是我们能看懂的密码。比如csdn泄露的600w密码。
密文:明文经过加密得到的。
密钥:明文变成密文的函数。
MD5:常用的摘要算法,理论上是不可逆算法。严格来说不算加密算法,只是摘要,是单向散列。
salt:简单理解是重复明文+随机字符 md5加密,增加不可逆程度。
暴力破解md5:md5算法不可逆,但是可以把已知明文批量生成散列,然后用别人的md5密文跟生成散列碰撞,散列一样的明文一样。
彩虹表:这玩意比较抽象,打个比方,md5散列是一把锁,暴力破解是做了能开这把锁的所有钥匙,然后挨个试哪个能开。而彩虹表是把差不多的钥匙(至少能插进锁的那些)分组,然后再从分组里面分组,减少插钥匙时间,提高效率。
关于彩虹表 知乎的回答不错: http://www.zhihu.com/question/19790488

有些奇葩网站泄露的密码是明文的,不需要破解。
大部分是md5认证的,各种破解软件、网站、彩虹表的诞生,md5几乎等同明文。
部分是有salt的,比如dz论坛默认是md5(md5($pass).$salt),拖库时基本md5和salt以及算法都泄露了。解密只是时间问题。
其他加密方式,在常用密码明文大量泄露环境下,任何加密方式都显得鸡肋。

比较好的解决方案可以多重认证,比如广泛使用的 密码登陆的同时需要手机验证码。
4108 次点击
所在节点    程序员
7 条回复
txlty
2014-12-11 21:35:00 +08:00
明文——md5 不是先后出现,而是并行出现。互联网普及之前,md5就发明出来了。
2003年主流的建站程序都已经采用了md5。而今天,还有很多新开发的网站明文储存密码。
CoX
2014-12-11 22:05:57 +08:00
PHP用Password Hashing 函数, Python用bcrypt库
应该是一个比较好的解决方案
bellchu
2014-12-11 22:13:48 +08:00
多重密码是现在比较好的保密措施,05年开始用RSA的Token Ring,虽然是混合加密的老大,但是每天带这个钥匙环一样的东西实在麻烦,还不能忘记带。后来出了手机上的RSA的APP,稍微方便一点,但是时间服务器配对也很烦。

现在给公司用的DUO双重验证,效率很高,三种方式拿密钥,楼主说的手机验证码就是其中一种,也可以语音验证,App验证。

感兴趣的可以看看 https://www.duosecurity.com/
ChanneW
2014-12-11 22:17:23 +08:00
多重认证 麻烦啊
whywhywhy
2014-12-11 22:44:20 +08:00
如果算法和密文都暴露,那破解真的只是时间问题,特别是有钱或者有权利的时候,这个时间会大大缩短

所以最重要的是,不要被获得密文,或者不要被获得算法,你可以在MD5的基础上修改它的算法,甚至存储的时候依然叫MD5,让破解者依旧用md5的方式去寻找原文(说是原文也不对,算是彩虹表中一条对应的记录吧),很显然就算他找到“原文”,也依然不会通过验证,因为你的算法根本不是MD5。

只要你在程序里限制了验证的频率又不同时暴露密文和算法,这样基本上就安全了。

嗯 最后还要排除掉传输的时候不要使用明文的方式……比如可以采用签名的方式
zhicheng
2014-12-11 22:50:31 +08:00
用 PBKDF2 吧,对于非密码专业人士,最好不要自己相当然的 roll 一套机制。
多重认证也不一定安全,尤其是在密码已经泄露的时候。
GSM 短信是明文可以监听的。
二阶段认证很多人的使用是不合理的,在上一家公司做顾问的时候,review 他们的代码,他们就犯了典型的错误,在取消二次认证的时候,需要认证,但是在设置的时候不需要,如果我拿到密码,直接用 curl 提交一个新的key到他们的设置二次认证的接口上就可以了。告诉他们工程师是完全不理你的。
另外,任何加密手段,暴力破解都是有效的,除了一次一密密码本。

可以提几点来简单增加安全性,
在传输密码的接口上用 HTTPS ,最好带绿条的。
在登录接口加 rate limit ,不要只限制 IP ,要限制 ID 。
Session ID 不要用自增 int 。
服务器时间尽量准确。
生成密码摘要的 salt 要每个都不一样,如果自己 roll 的话。

进阶的可以,
敏感数据分库分权限存储,密码,信用卡号码等。
买套代理服务器IP库,限制代理访问。
上 WAF 。
mybin
2014-12-12 10:35:43 +08:00
严格的来讲password应该叫做口令吧,对于口令来讲定期更换能解决一些问题,如果再结合动态口令的话会更好一些。
MD5碰撞是针对数字签名的,虽然能碰撞但不能形成有意义的碰撞,对数字签名来讲目前还没有实质性的影响。
用MD5

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/153243

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX