修改了一些语句
This commit is contained in:
8
9.5.md
8
9.5.md
@@ -1,10 +1,10 @@
|
||||
##9.5 存储密码
|
||||
过去一段时间来, 许多的网站遭遇用户密码数据库泄露事件, 这其中包括顶级的互联网企业–Linkedin, 国内诸如CSDN近600万用户帐号密码外泄,该事件横扫整个国内互联网,并且随后又爆出多玩游戏800万用户资料被泄露 ,另有传言人人网、开心网、天涯社区、世纪佳缘、百合网等社区都有可能成为黑客下一个目标。层出不穷的类似事件对用户会造成巨大的影响,因为人们往往习惯在不同网站使用相同的密码,一家“暴库”,全部遭殃。
|
||||
过去一段时间以来, 许多的网站遭遇用户密码数据泄露事件, 这其中包括顶级的互联网企业–Linkedin, 国内诸如CSDN,该事件横扫整个国内互联网,随后又爆出多玩游戏800万用户资料被泄露,另有传言人人网、开心网、天涯社区、世纪佳缘、百合网等社区都有可能成为黑客下一个目标。层出不穷的类似事件给用户的网上生活造成巨大的影响,人人自危,因为人们往往习惯在不同网站使用相同的密码,所以一家“暴库”,全部遭殃。
|
||||
|
||||
那么我们作为一个Web应用开发者,在选择密码存储方案时, 容易掉入哪些陷阱, 以及如何避免这些陷阱?
|
||||
|
||||
##普通方案
|
||||
目前我们用的最多的密码存储方案是将明文密码做单向哈希后存储,单向哈希算法有一个特征:无法通过哈希后的摘要(digest)恢复原始数据,这也是“单向”二字的来源。常用的单向哈希算法包括SHA-256, SHA-1, MD5等。
|
||||
目前用的最多的密码存储方案是将明文密码做单向哈希后存储,单向哈希算法有一个特征:无法通过哈希后的摘要(digest)恢复原始数据,这也是“单向”二字的来源。常用的单向哈希算法包括SHA-256, SHA-1, MD5等。
|
||||
|
||||
Go语言对这三种加密算法的实现如下所示:
|
||||
|
||||
@@ -63,9 +63,9 @@ Go语言对这三种加密算法的实现如下所示:
|
||||
在两个salt没有泄露的情况下,黑客如果拿到的是最后这个加密串,就几乎不可能推算出原始的密码是什么了。
|
||||
|
||||
##专家方案
|
||||
也许在几年前上面的进阶方案也许是足够安全的方案,因为攻击者没有足够的资源建立这么多的rainbow table。 但是,在今日,因为并行计算能力的提升,这种攻击已经完全可行。
|
||||
上面的进阶方案在几年前也许是足够安全的方案,因为攻击者没有足够的资源建立这么多的`rainbow table`。 但是,时至今日,因为并行计算能力的提升,这种攻击已经完全可行。
|
||||
|
||||
故意增加密码计算所需耗费的资源和时间,使得任何人都不可获得足够的资源建立所需的`rainbow table`。
|
||||
怎么解决这个问题呢?只要时间与资源允许,没有破译不了的密码,所以方案是:故意增加密码计算所需耗费的资源和时间,使得任何人都不可获得足够的资源建立所需的`rainbow table`。
|
||||
|
||||
这类方案有一个特点,算法中都有个因子,用于指明计算密码摘要所需要的资源和时间,也就是计算强度。计算强度越大,攻击者建立`rainbow table`越困难,以至于不可继续。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user