Bcrypt security


Bcrypt security

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

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

我担心的是,当读到它时,它说轮数($02$)和salt存储在哈希中的3个独立的"块"中,比如$rounds$.$salt.$hash(或者至少我是这样解释的)。

我的问题是:这难道不安全吗?显示使用的子弹数量,以及清楚可用的盐。因为攻击者可以说"好吧,我需要2发,盐是123盐,这就是散列",对吧?

我知道在阅读时,这并不是"全部"关于安全,而是破解密码需要多长时间,这就是Bcrypt的好处,它很慢。

有人能澄清我的误解吗?

谢谢。

bcrypt是关于不可减少复杂性的安全性;而不是默默无闻的安全

salt的目的是防止攻击者为多个用户重新使用计算
把它交给攻击者没有错。

同样,即使攻击者知道你使用了多少发子弹,在所有时间内也不会相同(假设你使用了相当多的子弹)
使用多发子弹的目的并不是攻击者不知道要使用多少发子弹;这是因为每发都会迫使攻击花费更长的时间。

盐与哈希一起存储,因为每个哈希都使用不同的盐,这与您以前使用sha512的方法不同,在sha512中,您对每个哈希使用相同的盐。

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

功因子(您称之为"rounds")也需要存储,以便可以正确验证哈希。是的,你可以把它去掉,但它真的没有害处。


bcrypt被设计成一种密集型算法。计算单个散列是昂贵的,并且不可能为具有高功因数的散列创建查找表。

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

你可能会遇到这样一个系统,不同的哈希中存储了不同的工作负载值,这取决于哪些哈希已经升级,哪些没有升级。