密码泄路很疯狂,很多密码加密都使用了salt,如何安全的保存salt呢?

2011-12-29 16:46:11 +08:00
 etre
如何安全的保存salt?存在其他地方,程序中等等?
17544 次点击
所在节点    程序员
66 条回复
SErHo
2011-12-29 19:16:54 +08:00
类似WordPress的,直接将salt和加密的密码拼在一起存起来。
yyfearth
2011-12-29 19:46:08 +08:00
@kongruxi @cxh116 @SErHo 这样的话,泄露hash后的密码同时,salt也就必定泄露了。不过对抗彩虹表倒是有些用处,比固定的好。
yyfearth
2011-12-29 19:48:09 +08:00
但是,一个用户一个salt话,给验证带来了麻烦。
9hills
2011-12-29 19:50:51 +08:00
@yyfearth 如果每个用户一个salt的话,泄露就泄露了吧,有黑客蛋疼到给每个用户都跑一遍彩虹表么。。。


建议salt直上40位。然后抛弃md5,用sha1啥的。。。。
yyfearth
2011-12-29 20:10:07 +08:00
@kongruxi Bcrypt 确实不错,hash代价很高,就连服务器本身估计都够呛的,不要说爆破了。
@9hills 固定salt直接用binary keyfile。如果每个用户独立salt话,我觉得可以和hash后的长度相同,方便存储和分割。
觉得和hashed password合并在一起比较好,这样如果仅仅db被盗,还看不出个所以然来。
md5早就该放弃了,sha的话,sha512还是比较好的,256也不错,要求不高的话sha1也勉强。如果不追求性能的话,bcrypt挺好,我下次试试。
bhuztez
2011-12-29 20:16:44 +08:00
@9hills salt再长也挡不住人家拿着高频密码或者弱密码一个个试过来,试不出来就放弃的策略。
9hills
2011-12-29 20:22:09 +08:00
@yyfearth 当然你可以每个用户一个salt,然后再来一个固定salt。。
@bhuztez 每个用户一个salt啊,那得试到哪辈子去了。。

差不多就行了,黑客也是讲投入产出的,一天才能破一个用户,还必须的是弱密码。你当黑客是傻子么
bhuztez
2011-12-29 20:28:22 +08:00
@9hills 你也太低估现在的显卡了,有个估算表,你可以参考一下 http://golubev.com/gpuest.htm
yyfearth
2011-12-29 20:34:51 +08:00
@9hills 混合真是个好主意。sha512的话,sha512(512bit的随机salt+ps+1024Byte二进制keyfile) + 512bit的随机salt 得到1024bit的hash结果(sha256的话就是512bit)很恐怖啊~!
@bhuztez 说的一个个试,是可行的(比如就难123456去黑一个一般的论坛,绝对命中一大把,要是支付宝这种,估计没戏)
前提是:系统没有限制校验的次数而且速度比较快(在服务器端限制)
或者 得到了确切的算法,比如盗取了服务器脚本文件(php之类)或者反编译(java、.net之类)。这样就算是有单一salt,也无法阻止用字典爆破,除非用bcrypt这种非常“慢”的hash。
9hills
2011-12-29 20:36:38 +08:00
@bhuztez 注意我说的是一个用户一个salt。

黑客算出所有的 8位简单密码(纯数字小写字母) + salt 的彩虹表你觉得要花多长时间,你自己算一下吧

一个彩虹表只能用一次,下一个用户还得重新算一个
9hills
2011-12-29 20:39:38 +08:00
@yyfearth 我觉得网站也有责任,应该在本地就用js不允许使用弱密码。

8位以上,不允许纯数字,然后配合每个用户一个单独的40位salt,想安全再加一个固定salt

以目前的计算机水平,普通黑客就算拿到你的数据库,想算出来也基本不可能
bhuztez
2011-12-29 20:40:07 +08:00
@9hills 不是这个策略。比如CSDN存的是 SHA1(salt + password) ,有人拿到了 600W 帐号,对他来说,更好的策略是先算 600W帐号 SHA1(salt+'12345678') 而不需要分别计算彩虹表。
9hills
2011-12-29 20:42:11 +08:00
@bhuztez 本地用js禁止弱密码不就行了。8位以上带字母,算去吧
yyfearth
2011-12-29 20:43:56 +08:00
@9hills @bhuztez 就目前而言,每个用户不同salt基本上可以杜绝彩虹表的使用。但是要爆破还是可以的。
GPU的话,如果知道明确的算法,还是可以比较迅速的爆破出简单密码。
如果用上量子计算机的话,大部分密码都可以算出来。
不过总的来说,要同时盗取db和程序,还是比较难的。如果仅仅盗取db,猜不对算法,要爆破也不容易。
dongbeta
2011-12-29 20:45:45 +08:00
我们明文保存,你们继续……
bhuztez
2011-12-29 20:47:07 +08:00
@yyfearth 量子只是特别适合攻击RSA。对于别的类型的计算还没找到有效的算法。所以是另一个问题。
yyfearth
2011-12-29 20:47:16 +08:00
@bhuztez 独立salt,仅仅是对付彩虹表。
字典爆破是完全另外一种,只能靠加大hash计算量来阻止。但是这样的同时,程序的性能也大大降低。(但是相对影响肯定是爆破要大得多)
前面提到的bcrypt,就同时提供了这2种方法的解决方案。
likuku
2011-12-29 20:47:17 +08:00
我们明文保存,你们继续…… +10086
likuku
2011-12-29 20:47:48 +08:00
我们明文保存,你们继续…… +10086
9hills
2011-12-29 20:48:07 +08:00
@yyfearth 本地一定要做js弱密码验证。。。要不就和CSDN一样全是123456789.....

不知道有没有现成的js弱密码验证库可用,把这些都给禁了:
QWERTYUIOP
!@#$%^&*(
....

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

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

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

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

© 2021 V2EX