恶意攻击者能否从Bcrypt哈希结果中获取盐?加盐的作用解析
Bcrypt哈希结构解析
$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa | | | | | | | hash-value = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa | | | | | salt = nOUIs5kJ7naTuTFkBy1veu (22 characters) | | | cost-factor = 10 = 2^10 iterations | hash-algorithm = 2y = BCrypt
Bcrypt技术问询与解答
技术问题
- 恶意攻击者能否从Bcrypt哈希结果中获取盐值?
- 既然盐值可以直接从哈希字符串中查看,使用盐的意义何在?恶意攻击者是否可以通过获取的盐值对比哈希后的密码实施破解?
问题1解答
能,Bcrypt的哈希结果本身就明文包含盐值,就像示例里展示的那样,盐值是哈希字符串中间的22位字符。只要攻击者拿到完整的Bcrypt哈希串,直接就能提取出盐值。
问题2解答
盐值的核心作用是防止彩虹表攻击,同时避免相同密码的用户哈希结果完全一致——如果不加盐,所有使用同一密码的用户哈希值都会一模一样,攻击者破解一个就能批量搞定所有用这个密码的账号。
虽然攻击者能拿到盐值,但Bcrypt的防破解核心不在盐,而在它的迭代次数(cost因子)。要破解的话,攻击者必须用拿到的盐值,对猜测的密码执行和目标哈希相同的2^cost次哈希运算,再对比结果是否匹配。cost因子越高,单次哈希运算的耗时就越长,暴力破解的成本会呈指数级上升。比如cost=10时,单次哈希要做1024次运算;cost=12时,运算次数就变成4096次,攻击者跑字典或暴力枚举的耗时会陡增,这才是Bcrypt防破解的关键。
所以哪怕盐值公开,只要cost因子设置合理,攻击者想破解依然要付出极高的时间和算力成本,盐的作用依然能正常发挥,同时还能彻底规避彩虹表这种低成本攻击方式。
内容的提问来源于stack exchange,提问作者phukon
相关产品推荐
相关产品推荐

