V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
balabalaguguji
V2EX  ›  问与答

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

  •  
  •   balabalaguguji · Aug 2, 2021 · 2919 views
    This topic created in 1735 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    “Kobe, there's no I in team.” -Shaquille O'Neal
    "I know, but there's a ME in that, motherf-----" -Kobe Bryant
    seagrass
        6
    seagrass  
       Aug 2, 2021 via iPhone
    bcrypt 的特点是计算一个密码的时间比较长,盐泄露了也没关系。
    比如一个可以几十秒通过穷举得到明文的 md5,在 bcrypt 可能需要十几年甚至更长时间,时间成本太高。
    chinvo
        7
    chinvo  
       Aug 2, 2021
    每次生成的盐都不一样, 确定盐之后计算 hash 的过程又很复杂且漫长, 盐 和 hash 长度又不固定, 谁闲着没事去做这种"彩虹表"
    chinvo
        8
    chinvo  
       Aug 2, 2021
    不过现在安全界普遍推荐用 argon2 了
    chinvo
        9
    chinvo  
       Aug 2, 2021
    > 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  
       Aug 2, 2021
    md5 和 sha1 算法下的盐, 本质上只是输入值的一部分, 例如 md5(pwd+salt) , md5(md5(pwd)+salt) 这样的格式甚至直接就包含在明文彩虹表里. bcrypt 等算法的盐是独立的一组运算过程的参数.

    而且 md5 和 sha1 进行一次运算需要的计算资源太少了(时间与空间都少), 所以即使不用彩虹表, 暴力穷举也花不了多少时间.
    balabalaguguji
        11
    balabalaguguji  
    OP
       Aug 2, 2021
    @chinvo #10 感谢
    msg7086
        12
    msg7086  
       Aug 3, 2021
    不是安全,是相对不用盐更安全一些。
    没有盐,一张彩虹表可以破解十万个密码。有了盐,一张彩虹表只能破解一个密码。
    你说哪个更安全。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1524 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 16:16 · PVG 00:16 · LAX 09:16 · JFK 12:16
    ♥ Do have faith in what you're doing.