还以为微软的 BitLocker 有什么特别的防破解之道,去学了一下源代码,原来就是对用户密码 hash 自循环 100 万次。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tool2d
V2EX    编程

还以为微软的 BitLocker 有什么特别的防破解之道,去学了一下源代码,原来就是对用户密码 hash 自循环 100 万次。

  •  
  •   tool2d 2022-11-11 09:26:12 +08:00 7477 次点击
    这是一个创建于 1068 天前的主题,其中的信息可能已经有所发展或是发生改变。
    真是足够简单和暴力的,还别说普通的电脑 sha256 循环计算 100 万次,还是需要那么一点时间的。

    这点时间就可以防止黑客用字典的方式暴力破解本地密码。

    相对来说,还算安全吧。

    25 条回复    2022-11-14 09:55:54 +08:00
    cooioobb
        1
    cooioobb  
       2022-11-11 09:35:07 +08:00 via Android
    确实稳妥简单。也够用
    shinession
        2
    shinession  
       2022-11-11 09:35:33 +08:00
    涨姿势了 :)
    leavic
        3
    leavic  
       2022-11-11 09:48:42 +08:00   1
    密码学应用基本原则不就是不要自己发明轮子吗
    eason1874
        4
    eason1874  
       2022-11-11 09:55:37 +08:00
    这是防爆破最佳实践吧,挺多软件都是这样做
    litmxs
        5
    litmxs  
       2022-11-11 09:57:08 +08:00 via Android
    慢哈希
    codehz
        6
    codehz  
       2022-11-11 09:58:57 +08:00   1
    你这是哪来的 bit locker ,怎么还有 gbk_to_unicode 的
    CatCode
        7
    CatCode  
       2022-11-11 10:01:46 +08:00
    应该是逆向来的代码吧
    QUC062IzY3M1Y6dg
        8
    QUC062IzY3M1Y6dg  
       2022-11-11 10:50:59 +08:00
    最简单的方式 也是最有效的
    tool2d
        9
    tool2d  
    OP
       2022-11-11 10:51:37 +08:00
    @codehz gbk_to_unicode 是我自己加的,哈哈。

    微软的 1 百万次 hash 算法是 github 上找的,一搜一大把。
    ipwx
        10
    ipwx  
       2022-11-11 10:58:06 +08:00   1
    这点时间就可以防止黑客用字典的方式暴力破解本地密码。

    参数里面的 r_salt:请,认真地看着我。
    ----

    哈希类验证防止彩虹表的方法有两布:

    1. 加盐。
    2. 更多的哈希循环。

    缺一不可。
    ipwx
        11
    ipwx  
       2022-11-11 10:58:33 +08:00
    @tool2d 请认真地查找一下有关“加盐”的资料。
    48y1951r9G8k7Zou
        12
    48y1951r9G8k7Zou  
       2022-11-11 11:14:01 +08:00
    哈哈,微软真的是思路清奇

    记得以前有个 Password Hashing Competition ,参赛者选择的 hash function 基本上都是 blake2/sha512 ,没有用 sha256 的(大概是因为 sha256 用硬件加速成本太低了),最后胜出的是 argon2 (也是基于 blake2 )

    不知道微软当年有没有考虑参赛(狗头
    matrix67
        13
    matrix67  
       2022-11-11 11:18:28 +08:00
    我记得 keepass 还是 truecrypt 的 hash 迭代次数,就是 ( 1s /你本机算一次 hash 的时间)。这样你每次解开主密码需要 1s ,但是黑客受不了。
    matrix67
        14
    matrix67  
       2022-11-11 11:20:20 +08:00
    @matrix67 #13 是 keepass https://keepass.info/help/base/security.html

    By clicking the '1 Second Delay' button in the database settings dialog, KeePass computes the number of iterations that results in a 1 second delay when loading/saving a database.
    tool2d
        15
    tool2d  
    OP
       2022-11-11 12:08:50 +08:00
    @ipwx 个人觉得盐其实无所谓,学 RSA 加密标准里,对 padding 取随机数就可以了。
    tool2d
        16
    tool2d  
    OP
       2022-11-11 12:46:31 +08:00
    @tool2d 不好意思,搞错了。hash 不是加密,不能通过随机 padding 来还原。保存盐是必须的步骤。
    billlee
        17
    billlee  
       2022-11-11 13:41:10 +08:00 via Android
    这是 KDF 的标准做法
    jim9606
        18
    jim9606  
       2022-11-11 13:46:40 +08:00 via Android
    @majula bitlocker 是跟随 vista 一起推出的功能,那时候 blake 都还没诞生,很多现在使用的密码原语都还没标准化。
    Bitlocker 主要优势还是操作系统集成,例如基于 TPM 的自动解锁。想在 linux 用开源组件复刻这套功能还蛮麻烦的。
    antness
        19
    antness  
       2022-11-11 13:49:49 +08:00 via Android
    @ipwx 如果把上一步的 hash 结果用来生成盐会不会有什么用,比如可以减少循环次数但不减弱强度等等呢
    ipwx
        20
    ipwx  
       2022-11-11 13:54:01 +08:00
    @antness 只要没有随机数参与,就一定存在彩虹表。标准的 hash 做法是把盐这个随机数存下来的。
    44670
        21
    44670  
       2022-11-11 20:25:11 +08:00
    比较通用的实践是 pbkdf2 ,除了不断对自身 hmac 以外,还会和上一轮的结果异或一下
    antness
        22
    antness  
       2022-11-12 00:24:01 +08:00
    @ipwx 原来如此
    LittleDust
        23
    LittleDust  
       2022-11-12 07:13:38 +08:00 via iPhone
    这个循环里面 1024 * 1024 可以提出去吧…每次循环都要计算一下,这是微软源码?
    kice
        24
    kice  
       2022-11-13 02:24:14 +08:00 via Android   3
    @LittleDust 编译器优化里面有一个叫做常量折叠的操作,可以去了解看看。
    julyclyde
        25
    julyclyde  
       2022-11-14 09:55:54 +08:00
    多次 hash 会导致冲突增加吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4178 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 10:15 PVG 18:15 LAX 03:15 JFK 06:15
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86