您的位置:网站首页 > 网站托管 > 正文

互联网网站应该如何存储密码?

作者:知网科技 日期:2013/4/26 19:34:21 人气:
标签:

互联网网站应该如何存储密码?
现在那么多网站都因为暴库导致密码泄露,CSDN甚至还是明文存储密码。那么密码应该怎么保存才够安全呢?有没有可能数据库被泄露后,密码仍然不会被破解?

我更关注的是服务器后台的实现,谢谢回答。
17 票,来自 xuanyuanfour、谈开凯、仝昕钢 更多 刚好坚果云博客写了一篇这样的文章【1】, 讲述如何存储密码才安全。完整内容可以查看【1】原文。

简单而言,存储bcrypt, scrypt等算法输出的内容,不要用salted hash的方式存储密码,不要用加密的方式存储密码,当然,更不要明文存储。

顺带说一句,任何情况下尽可能的不要使用md5算法,而使用SHA系列的哈希算法。因为md5算法在很多地方被证明是很容易冲突的【2】,另外md5的性能优势也完全可以忽略不计。

为什么不能加密存储?
加密存储的方式其实和明文存储没有区别。密码加密后一定能被解密获得原始密码,因此,该网站一旦数据库泄露,所有用户的密码本身就大白于天下。另外,管理员也存在获取原始密码,利用同样的帐号登陆其他互联网服务的可能。

为什么不能用Hash存储?
单向Hash算法(MD5, SHA1, SHA256等)可以保证管理员几乎不能恢复原始密码。但它有两个特点:
1)从同一个密码进行单向哈希,得到的总是唯一确定的摘要
2)计算速度快。随着技术进步,尤其是显卡在高性能计算中的普及,一秒钟能够完成数十亿次单向哈希计算

结合上面两个特点,考虑到多数人所使用的密码为常见的组合,攻击者可以将所有密码的常见组合进行单向哈希,得到一个摘要组合, 然后与数据库中的摘要进行比对即可获得对应的密码。这个摘要组合也被称为rainbow table【3】。
更糟糕的是,一个攻击者只要建立上述的rainbow table,可以匹配所有的密码数据库。

为什么不能用Salt + Hash的方式存储?
将明文密码混入“随机因素“,然后进行单向哈希后存储,也就是所谓的”Salted Hash”。
这个方式相比上面的方案,最大的好处是针对每一个数据库中的密码,都需要建立一个完整的rainbow table进行匹配。 因为两个同样使用“passwordhunter”作为密码的账户,在数据库中存储的摘要完全不同。
10多年以前,因为计算和内存大小的限制,这个方案还是足够安全的,因为攻击者没有足够的资源建立这么多的rainbow table。 但是,在今日,因为显卡的恐怖的并行计算能力,这种攻击已经完全可行。

为什么bcrypt, scrypt等算法能保证密码存储的安全性?
这类算法有一个特点,算法中都有个因子,用于指明计算密码摘要所需要的资源和时间,也就是计算强度。计算强度越大,攻击者建立rainbow table越困难,以至于不可继续。

也就是说,故意延长一个密码匹配的计算时间,如果一个密码匹配需要1秒钟,那么匹配1000万个密码组合就需要115天,这个开销就非常大。

另外,这类算法也可以保证即使计算能力不断提高,只要调整算法中的强度因子,密码仍然不可能被轻易的攻破,同时不影响已有用户的登陆。关于这些算法的具体优劣,请参考
 成增存,金融电商互联网,互联网是根基
1 票,来自 周昱江 密码的类型和风险:
一、简单的明文存储;之前的泄露很多都是明文保存;
风险:
1、网站被攻破后可以直接看到用户的明文;(想想下你的密码比如生日等别直接公诸于众的时候,一身冷汗)
2、密码容易被网站的内部人员得知并获取;(想象下后台的任何管理员都有办法知道你的密码,而且可以随时登陆,还可以修改)


二、对明文做Hash后存储;目前的很多bbs,各大网站的存储方式如md5等;
优势:
网站被攻破后,无法直接看到明文密码,相对安全性更高;
风险:
1、虽然无法可以直接获取明文,但可以通过穷举,列表查询方式获取明文,md5的查询库是非常丰富的。
2、内部的管理人员可以通过编程模拟获取投资人的密文,并通过穷举等方式获取明文,获得用户的登录口令。

三、MD5+Salt方式
说明:
MD5(【明文】+【salt】)=【存储在系统中的密文】
根据安全级别,可以设定系统级别的salt和用户级别的salt。
可以Google说明
优势:
存储在库中的秘密为【明文】+【salt】做过的Hash,无法获取原文明文;

劣势:
1、实现稍复杂,需要系统在设计之初考虑好,也应该在系统设计之初就考虑好“用户信息的安全是最重要的,尤其是密码,及其他重要信息等”
2、MD5还是有被暴力破解的方式还是有的,可以增加难度更高的Hash算法提高算法穷举的难度。


(())
顶一下
参与讨论
姓名: 验证码:看不清楚,换一个
最新评论

联系我们

软件开发: 15838307519(司经理)

网络营销: 13676968269(王经理)

网络建设: 13073737771(郭经理)

24小时服务电话: 0371-56683330

了解更多APP开发

+好友