bcrypt 生成的字符串这样 $2b$10$N9D5ZPZS7zNC5dDoMekfwuQucqPKJ1A6iztd7ARFaxEbHH.FRAWdK
其中包含了盐:$2b$10$N9D5ZPZS7zNC5dDoMekfwu
那泄露了这一串,别人岂不是知道你的盐了,然后就可以彩虹表破解?
1
tabris17 2021-08-02 11:34:47 +08:00
彩虹表命中且正好包含 salt 的概率是多少?
|
2
lcdtyph 2021-08-02 11:35:19 +08:00 via iPhone
彩虹表算出来是为了复用这张表的,你针对这个 salt 算了一张彩虹表,到哪里复用去?
如果彩虹表是一次性的,那就是相当于暴力破解,枚举空间没变 |
3
wolfie 2021-08-02 11:35:45 +08:00
正经人谁在彩虹表上加盐啊
|
4
Aliencn 2021-08-02 11:45:20 +08:00
别人不知道你加盐的规则,除非源码也泄漏了
|
5
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 |
6
whx 2021-08-02 13:10:28 +08:00 via iPhone
bcrypt 的特点是计算一个密码的时间比较长,盐泄露了也没关系。
比如一个可以几十秒通过穷举得到明文的 md5,在 bcrypt 可能需要十几年甚至更长时间,时间成本太高。 |
7
chinvo 2021-08-02 13:41:38 +08:00
每次生成的盐都不一样, 确定盐之后计算 hash 的过程又很复杂且漫长, 盐 和 hash 长度又不固定, 谁闲着没事去做这种"彩虹表"
|
8
chinvo 2021-08-02 13:43:19 +08:00
不过现在安全界普遍推荐用 argon2 了
|
9
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 |
10
chinvo 2021-08-02 13:46:24 +08:00
md5 和 sha1 算法下的盐, 本质上只是输入值的一部分, 例如 md5(pwd+salt) , md5(md5(pwd)+salt) 这样的格式甚至直接就包含在明文彩虹表里. bcrypt 等算法的盐是独立的一组运算过程的参数.
而且 md5 和 sha1 进行一次运算需要的计算资源太少了(时间与空间都少), 所以即使不用彩虹表, 暴力穷举也花不了多少时间. |
11
balabalaguguji OP @chinvo #10 感谢
|
12
msg7086 2021-08-03 06:28:14 +08:00
不是安全,是相对不用盐更安全一些。
没有盐,一张彩虹表可以破解十万个密码。有了盐,一张彩虹表只能破解一个密码。 你说哪个更安全。 |