BCrypt哈希的盐附在结果尾部,为何攻击者无法利用其暴力破解密码?
BCrypt随机盐存储机制相关疑问解答
疑问a:什么阻止攻击者获取存储在哈希末尾的盐?
- 盐的设计本身就不要求保密,没有机制也不需要阻止攻击者获取该盐。
- 随机盐的核心作用是避免攻击者使用预计算的彩虹表批量破解全量用户密码,而非作为密钥对攻击者隐藏。
疑问b:攻击者拿到盐后是否可以暴力破解密码?
- 攻击者拿到单用户的盐后,确实可以针对该用户的密码发起定向暴力破解,这是所有密码哈希方案都无法完全规避的特性。
- BCrypt本身自带慢哈希设计,你可以通过调整
cost参数控制单次哈希运算的耗时,比如把耗时调到100ms/次,攻击者每秒最多只能尝试10个密码,暴力破解的成本会被拉高到绝大多数场景下都无法承受的程度。
随机盐公开存储是否会抵消相对固定盐的优势?
- 完全不会,随机盐的核心优势本身就和是否公开无关:
- 固定盐哪怕全程不公开存储,一旦泄露,攻击者只需要生成一套对应该固定盐的彩虹表,就能批量破解所有用户的密码;同时固定盐一旦确定就无法更换,更换就会导致所有已存储的哈希值全部失效。
- 每个用户独立的随机盐哪怕全部公开,攻击者要破解每个密码都需要单独针对对应盐生成彩虹表,破解成本等于单密码破解成本乘以用户总量,单个盐泄露也只会影响对应用户,完全不会牵连其他账号,这一优势和盐是否公开没有任何关系。
内容的提问来源于stack exchange,提问作者Chris A
相关产品推荐
相关产品推荐

