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

2022-11-11 09:26:12 +08:00
 tool2d
真是足够简单和暴力的,还别说普通的电脑 sha256 循环计算 100 万次,还是需要那么一点时间的。

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

相对来说,还算安全吧。

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

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

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

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

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

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

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

不知道微软当年有没有考虑参赛(狗头
matrix67
2022-11-11 11:18:28 +08:00
我记得 keepass 还是 truecrypt 的 hash 迭代次数,就是 ( 1s /你本机算一次 hash 的时间)。这样你每次解开主密码需要 1s ,但是黑客受不了。
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
2022-11-11 12:08:50 +08:00
@ipwx 个人觉得盐其实无所谓,学 RSA 加密标准里,对 padding 取随机数就可以了。
tool2d
2022-11-11 12:46:31 +08:00
@tool2d 不好意思,搞错了。hash 不是加密,不能通过随机 padding 来还原。保存盐是必须的步骤。
billlee
2022-11-11 13:41:10 +08:00
这是 KDF 的标准做法
jim9606
2022-11-11 13:46:40 +08:00
@majula bitlocker 是跟随 vista 一起推出的功能,那时候 blake 都还没诞生,很多现在使用的密码原语都还没标准化。
Bitlocker 主要优势还是操作系统集成,例如基于 TPM 的自动解锁。想在 linux 用开源组件复刻这套功能还蛮麻烦的。
antness
2022-11-11 13:49:49 +08:00
@ipwx 如果把上一步的 hash 结果用来生成盐会不会有什么用,比如可以减少循环次数但不减弱强度等等呢
ipwx
2022-11-11 13:54:01 +08:00
@antness 只要没有随机数参与,就一定存在彩虹表。标准的 hash 做法是把盐这个随机数存下来的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/894345

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX