【问题标题】:What are Salt Rounds and how are Salts stored in Bcrypt?什么是盐轮以及盐如何存储在 Bcrypt 中?
【发布时间】:2018-03-23 10:28:21
【问题描述】:

我正在尝试为我正在制作的节点应用程序配置 Bcrypt,并且有几个关于盐的问题,我希望这里的人可以帮助回答。

  • 什么是盐“圆形”?例如,在 github 文档 (https://github.com/kelektiv/node.bcrypt.js/) 中,它使用 10 的盐轮。这到底是什么意思?

  • Bcrypt 生成的盐总是一样的吗?例如,如果我将用户的散列密码保存到数据库中,它用于散列密码的盐对于每个密码是否相同?

  • 盐是如何储存的?它是否安全免受潜在攻击?

【问题讨论】:

    标签: hash passwords password-protection bcrypt salt


    【解决方案1】:
    1. “salt round”实际上是指成本因素。成本因素控制计算单个 BCrypt 哈希所需的时间。成本因子越高,完成的散列次数就越多。将成本因子增加 1 会使所需时间加倍。需要的时间越多,暴力破解就越困难。
    2. salt 是一个随机值,每次计算都应该不同,因此即使密码相同,结果也几乎不会相同。
    3. 盐通常以可读的形式包含在生成的哈希字符串中。因此,通过存储哈希字符串,您还可以存储盐。请查看此answer 了解更多详情。

    【讨论】:

    • 您能解释一下“成本因素控制计算单个 BCrypt 哈希所需的时间”是什么意思吗?请 ?谢谢
    • @Webman - 成本因子为 10 意味着计算完成 2^10 次,大约是 1000 次。获得最终哈希所需的计算轮数越多,所需的 cpu/gpu 时间就越多。这对于计算登录的单个哈希值没有问题,但是当您暴力破解数百万个密码组合时,这是一个大问题。试图在我的密码tutorial中解释它。
    • 不错的教程@martinstoeckli!
    • 在将秘密与哈希进行比较时,我需要知道使用的盐轮数吗?
    • 有趣。我正在使用 bcryptjs ......看起来好像盐和轮数与哈希一起存储......这解释了为什么 bcrypt.compare(secret,hash) api 不将轮数作为输入?
    【解决方案2】:

    盐只包含在哈希中,比较时我们不需要记住。

    var myPlaintextPassword='Saifio';  
    var saltRounds = 10;   
    const hash = bcrypt.hashSync(myPlaintextPassword, saltRounds);
    
    
    $2b$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
    

    | | | | | | |哈希值 = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa | | | | | salt = nOUIs5kJ7naTuTFkBy1veu | | |成本因子 = 10 = 2^10 次迭代 | 哈希算法 = 2b = BCrypt

    【讨论】:

    • 他解释了结果字符串的组成部分。我认为这很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2014-01-31
    • 2021-11-30
    • 2020-02-21
    • 2013-07-07
    • 2018-07-08
    相关资源
    最近更新 更多