对 6 位数字 PIN 进行慢哈希是不是形式主义安全?

2 月 10 日
 drymonfidelia
哪怕一次验证需要进行 1s 运算(这个效率已经影响用户体验了) 1000000/3600~=277.778h ,十多天的时间,更别说是可以加机器一起跑

至于拖慢数据库泄露后发现高价值用户的时间,你密码表都能泄露用户数据表大概率也泄露了
4041 次点击
所在节点    信息安全
17 条回复
2b5X607vRr3OB6ad
2 月 10 日
是指哪一款应用
ryd994
2 月 10 日
是。密码不能只有 6 位。
TPM/智能卡可以用 6 位数字 pin 是因为 TPM 无法读取,且错误多次后会自毁。6 位 pin 可以保证 3 次以内猜不到。
wfg
2 月 10 日
多次错误会冷却,不存在十多天爆破的情况。
sentinelK
2 月 10 日
没太懂楼主想表达什么,不安全指的是哪一侧?

如果是用户侧的话,问题不大,因为六位数字往往伴随着尝试次数限制。
如果是数据侧用于非明文存储的话,确实没意义。

但是你光拿到 hash ,你怎么知道他的算法是什么,以及他的明文是什么范围?
perrydot
2 月 10 日
想表达什么?
stormtrooperx5
2 月 10 日
你用六位 pin 保护的是什么?
BenHunDun
2 月 10 日
其实不是很确定场景是什么, 可能输入 6 位, 但是在后端有加 salt 后再做哈希?
drymonfidelia
2 月 10 日
@sentinelK 指的是后端存入数据库的哈希,我听说金融行业一般都有这类要求,对用户输入的数字 PIN 进行慢哈希处理
@stormtrooperx5
stormtrooperx5
2 月 11 日
@drymonfidelia 先问是不是再问为什么,我没觉得银行/券商登录时校验花了一秒以上,也没影响我体验
realpg
2 月 11 日
@stormtrooperx5 #6
有几个亿存款的银行卡
sentinelK
2 月 11 日
@drymonfidelia 数据库侧,慢哈希的意义是相较于其他算法而言的。
假设你知道密码字段的加密算法、加盐逻辑以及取值范围。按照你的理解,一个 6 位纯数字,慢哈希的破解是以天为维度。

如果是其他算法的话,使用 GPU 加速,那暴力破解的单位将会是毫秒。
一天已经把整个银行系统的所有用户都轮完了。
stormtrooperx5
2 月 11 日
@realpg 麻烦先举证一下
esile
2 月 11 日
连续三次错误锁死或者增加锁定间隔时间,这个 faceid 一样,你不可能短时间弄到长一样的人来解锁。
drymonfidelia
2 月 11 日
@stormtrooperx5 我的 1 秒就已经是极端破解难度的例子了
@esile 数据库慢哈希解决的是数据库泄露后的问题,代码层面限制此时已经无效了
iamwin
2 月 11 日
然而用 6 位数的东西,首先考虑的就是你输错几次以后就锁死,所以不存在给你 10 天爆破的机会的
restkhz
2 月 12 日
简化一下思路,假设跑完耗时 t=单次计算耗时 k 乘字符集的位数次方
大概就是 t=k*10^6

但是 k 有上限。能做的有限。而且特别消耗计算资源,可能导致 DoS 。LiveOverflow 曾经有个节目讲到过一点这个。既然有上限,我们这里就先把它当常数了。

你讲的这种情况,假设用 bcrypt ,factor 设置成大概跑 1 秒,3060 跑一个,hashcat 只要几个小时。
某种意义上慢 hash 在这个场景只能说防批量了吧。

然而 10^x,哪怕你字符集是 10 个数字,然而看位数是指数函数,增长速度很快。这就是为什么密码位数非常重要。
MrYELiex
2 月 26 日
慢哈希防御的是拖库以后的离线爆破 这种情况下会增加整个数据库密码被暴力破解的风险 特别是 6 位 pin(传统银行卡支付密码)很容易被爆破 密码表太小了

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

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

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

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

© 2021 V2EX