V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
balabalaguguji
V2EX  ›  问与答

bcrypt 把密码和盐一起存放了,为什么还安全。

  •  
  •   balabalaguguji · 2021-08-02 11:33:19 +08:00 · 2294 次点击
    这是一个创建于 969 天前的主题,其中的信息可能已经有所发展或是发生改变。

    bcrypt 生成的字符串这样 $2b$10$N9D5ZPZS7zNC5dDoMekfwuQucqPKJ1A6iztd7ARFaxEbHH.FRAWdK

    其中包含了盐:$2b$10$N9D5ZPZS7zNC5dDoMekfwu

    那泄露了这一串,别人岂不是知道你的盐了,然后就可以彩虹表破解?

    12 条回复    2021-08-03 06:28:14 +08:00
    tabris17
        1
    tabris17  
       2021-08-02 11:34:47 +08:00
    彩虹表命中且正好包含 salt 的概率是多少?
    lcdtyph
        2
    lcdtyph  
       2021-08-02 11:35:19 +08:00 via iPhone
    彩虹表算出来是为了复用这张表的,你针对这个 salt 算了一张彩虹表,到哪里复用去?

    如果彩虹表是一次性的,那就是相当于暴力破解,枚举空间没变
    wolfie
        3
    wolfie  
       2021-08-02 11:35:45 +08:00
    正经人谁在彩虹表上加盐啊
    Aliencn
        4
    Aliencn  
       2021-08-02 11:45:20 +08:00
    别人不知道你加盐的规则,除非源码也泄漏了
    kop1989
        5
    kop1989  
       2021-08-02 13:01:15 +08:00
    关于加盐,举个不太贴切的例子。

    “Kobe, there's no I in team.” -Shaquille O'Neal
    "I know, but there's a ME in that, motherf-----" -Kobe Bryant
    whx
        6
    whx  
       2021-08-02 13:10:28 +08:00 via iPhone
    bcrypt 的特点是计算一个密码的时间比较长,盐泄露了也没关系。
    比如一个可以几十秒通过穷举得到明文的 md5,在 bcrypt 可能需要十几年甚至更长时间,时间成本太高。
    chinvo
        7
    chinvo  
       2021-08-02 13:41:38 +08:00
    每次生成的盐都不一样, 确定盐之后计算 hash 的过程又很复杂且漫长, 盐 和 hash 长度又不固定, 谁闲着没事去做这种"彩虹表"
    chinvo
        8
    chinvo  
       2021-08-02 13:43:19 +08:00
    不过现在安全界普遍推荐用 argon2 了
    chinvo
        9
    chinvo  
       2021-08-02 13:43:35 +08:00
    > Salting also protects against an attacker pre-computing hashes using rainbow tables or database-based lookups.

    https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html
    chinvo
        10
    chinvo  
       2021-08-02 13:46:24 +08:00
    md5 和 sha1 算法下的盐, 本质上只是输入值的一部分, 例如 md5(pwd+salt) , md5(md5(pwd)+salt) 这样的格式甚至直接就包含在明文彩虹表里. bcrypt 等算法的盐是独立的一组运算过程的参数.

    而且 md5 和 sha1 进行一次运算需要的计算资源太少了(时间与空间都少), 所以即使不用彩虹表, 暴力穷举也花不了多少时间.
    balabalaguguji
        11
    balabalaguguji  
    OP
       2021-08-02 14:01:33 +08:00
    @chinvo #10 感谢
    msg7086
        12
    msg7086  
       2021-08-03 06:28:14 +08:00
    不是安全,是相对不用盐更安全一些。
    没有盐,一张彩虹表可以破解十万个密码。有了盐,一张彩虹表只能破解一个密码。
    你说哪个更安全。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2907 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:18 · PVG 23:18 · LAX 08:18 · JFK 11:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.