6

我知道这是一个“过度询问”的话题,Bcrypt但是我对它的安全性有一些担忧。

我一直在使用sha512($password.$salt),然后寻找更好的解决方案并遇到了Bcrypt.

我担心的是,在阅读它时,它表示轮$02$$rounds$.$salt.$hash

我的问题是:这不是不安全吗?显示使用的轮数,盐分清楚可用。因为攻击者可以说“好的,我需要 2 轮,盐是 123salt,这就是哈希”,对吧?

我明白在阅读时,安全并不是“全部”,而是破解密码需要多长时间,这就是 Bcrypt 的好处,它很慢。

谁能澄清我的误解/误解?

谢谢。

4

2 回答 2

11

bcrypt 通过不可简化的复杂性来实现安全性;不是默默无闻的安全。

加盐的目的是防止攻击者为多个用户重复使用计算。
将其交给攻击者并没有错。

同样,即使攻击者知道您使用了多少轮,也不会花费那么多时间(假设您使用的轮数相当多)。
使用多轮的意义不是攻击者不知道要使用多少轮;这是每一轮迫使攻击需要更长的时间。

于 2012-08-02T15:48:25.203 回答
4

盐与散列一起存储,因为每个散列使用不同的盐,这与您之前使用 sha512 的方法不同,在该方法中,您对每个散列使用相同的盐。

使用这种方法,单个彩虹表仅适用于单个密码,而如果对每个哈希使用相同的盐,则单个彩虹表将适用于所有哈希。

工作因子(如您所说:“轮数”)也需要存储,以便可以正确验证散列。是的,你可以把它去掉,但这真的没有坏处。


bcrypt 被设计为一种密集型算法。计算单个散列的成本很高,并且不可能为具有高工作因子的散列创建查找表。

工作因子被设计为随着技术的进步而改变,因此破解 bcrypt 哈希总是很困难。但是您只能在验证密码的过程中升级哈希。

您最终可能会得到一个系统,其中不同的哈希存储了不同的工作负载值,具体取决于哪些已升级,哪些尚未升级。

于 2012-08-02T15:57:15.110 回答