bcrypt 把密码和盐一起存放了,为什么还安全。

2021-08-02 11:33:19 +08:00
 balabalaguguji

bcrypt 生成的字符串这样 $2b$10$N9D5ZPZS7zNC5dDoMekfwuQucqPKJ1A6iztd7ARFaxEbHH.FRAWdK

其中包含了盐:$2b$10$N9D5ZPZS7zNC5dDoMekfwu

那泄露了这一串,别人岂不是知道你的盐了,然后就可以彩虹表破解?

2459 次点击
所在节点    问与答
12 条回复
tabris17
2021-08-02 11:34:47 +08:00
彩虹表命中且正好包含 salt 的概率是多少?
lcdtyph
2021-08-02 11:35:19 +08:00
彩虹表算出来是为了复用这张表的,你针对这个 salt 算了一张彩虹表,到哪里复用去?

如果彩虹表是一次性的,那就是相当于暴力破解,枚举空间没变
wolfie
2021-08-02 11:35:45 +08:00
正经人谁在彩虹表上加盐啊
Aliencn
2021-08-02 11:45:20 +08:00
别人不知道你加盐的规则,除非源码也泄漏了
kop1989
2021-08-02 13:01:15 +08:00
关于加盐,举个不太贴切的例子。

“Kobe, there's no I in team.” -Shaquille O'Neal
"I know, but there's a ME in that, motherf-----" -Kobe Bryant
whx
2021-08-02 13:10:28 +08:00
bcrypt 的特点是计算一个密码的时间比较长,盐泄露了也没关系。
比如一个可以几十秒通过穷举得到明文的 md5,在 bcrypt 可能需要十几年甚至更长时间,时间成本太高。
chinvo
2021-08-02 13:41:38 +08:00
每次生成的盐都不一样, 确定盐之后计算 hash 的过程又很复杂且漫长, 盐 和 hash 长度又不固定, 谁闲着没事去做这种"彩虹表"
chinvo
2021-08-02 13:43:19 +08:00
不过现在安全界普遍推荐用 argon2 了
chinvo
2021-08-02 13:43:35 +08:00
> Salting also protects against an attacker pre-computing hashes using rainbow tables or database-based lookups.

https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html
chinvo
2021-08-02 13:46:24 +08:00
md5 和 sha1 算法下的盐, 本质上只是输入值的一部分, 例如 md5(pwd+salt) , md5(md5(pwd)+salt) 这样的格式甚至直接就包含在明文彩虹表里. bcrypt 等算法的盐是独立的一组运算过程的参数.

而且 md5 和 sha1 进行一次运算需要的计算资源太少了(时间与空间都少), 所以即使不用彩虹表, 暴力穷举也花不了多少时间.
balabalaguguji
2021-08-02 14:01:33 +08:00
@chinvo #10 感谢
msg7086
2021-08-03 06:28:14 +08:00
不是安全,是相对不用盐更安全一些。
没有盐,一张彩虹表可以破解十万个密码。有了盐,一张彩虹表只能破解一个密码。
你说哪个更安全。

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

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

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

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

© 2021 V2EX