由一个电子指纹锁想到的,难道指纹锁内部存储密码都是明文?

2021-06-04 22:34:45 +08:00
 liuidetmks

最近买了一个销量很高的指纹锁装上了(牌子就不说了), 说实话各种体验都挺好。很人性化。很赞,我都想买个蓝牙网关把它的功能都玩一玩。

但是,(对,凡事就怕但是)
其中有个功能,只要你输入密码包含真实密码就能开门,是的这个是用来混淆旁观者的。
例如,你真实密码 123456,你可以输入 1234512333333331111111112345666666666 就能解锁。
对于此,我陷入了人生的大思考,
难道内部程序是吧密码直接明文存储在内存中? 匹配的时候直接

if (INPUTSTRING.contains(realPsw){
   openTheDoor ()
}

-- 这样不是可能存在漏洞让人通过内存嗅探到密码,当然单人单户可能不值得这么去破解,如果破解这一个型号的锁,应该也是有人做的吧。

如果他是加密存储的密码,如果那么验证也太飞快了吧,每个不定长子串都加密或者 Hash 匹配一次,也是很大的次数吧。(应该超过多项式复杂度了吧)

我目前知道的,防止人暴力枚举的方法是PBKDF2, 让每次尝试的时间成本很大,(当然对嵌入式设备,尤其是没插电的,可能有更省电的方式)而不是简单的程序判断错误次数超过阈值就休眠,因为这个内存中这个次数对于金手指来说是可编辑的。


我当然知道这只是一个 1000 块的东西,可是安全问题,多考虑一下也没什么问题。

由于本人所知有限,有错误的话,希望大家指正,谢谢。

7486 次点击
所在节点    信息安全
68 条回复
toaruScar
2021-06-05 04:01:38 +08:00
“窗口”的话就有德布鲁因序列的弱点了,显著降低的暴力破解的成本
xuanbg
2021-06-05 07:13:34 +08:00
@GuuJiang 0123456789 0123456789 ……一直输入就开了
kop1989
2021-06-05 07:29:45 +08:00
如果是我来设计,我一定会存明文。
1 、脱机存储
2 、没有盗取密码有意义的场景。(除非用户非正确使用)
delectate
2021-06-05 08:52:46 +08:00
手持小米推拉式,猜想一下:
1 、明文存储;
2 、虚位密码,输入后有个明显的停顿才会解锁,而且有最大长度限制,大概是 50 个数字。这个期间可能是以 6 位为单位,从头到尾遍历了所有,然后看 hash 是否一致;
3 、也可能是每次输入之后,从后向前截取 6 位直接对比,但是不开锁只记录令牌,停止输入后等待 1s 再看有没有令牌,再开锁。
rekulas
2021-06-05 09:29:54 +08:00
这样的锁确实有安全风险,旁路嗅探对 aes 都存在一定威胁更别说明文了,虽然从性价比来说应该没人会去研究这个破解,但从安全角度来说不应该这样设计
oott123
2021-06-05 09:34:35 +08:00
首先字串是定长的
其次就六位数字,你再厉害的 hash 也没用,拿个手机 CPU 都能一秒钟之内就给你暴力算出来
no1xsyzy
2021-06-05 09:50:56 +08:00
@delectate 明显停顿后解锁是有意的,就是为了防止 @toaruScar 提到的「德布鲁因序列」攻击
因为每次输入限长,全排序列长度很容易就超过了。
toaruScar
2021-06-05 10:17:31 +08:00
@no1xsyzy #27 要绕过这个限制也简单,每次开始前把上次尝试的后几位也输进去就行了
6 位数字的德布鲁因序列有 10 万个数字左右,一秒输入 10 个数字,只要 10000 秒就可以了,不到三个小时
就算隔 5 秒要停 1 秒,效率也还算合理。
aureole999
2021-06-05 10:22:35 +08:00
rolling hash 了解一下。不过用没用在锁上就不知道了。
GuuJiang
2021-06-05 10:22:43 +08:00
@xuanbg 要不你再好好想想?匹配的是子串,不是子序列
no1xsyzy
2021-06-05 10:27:13 +08:00
@toaruScar 你这是什么手速一秒 10 个数字?职业选手肌肉记忆按键 APM 都没有 600 吧
toaruScar
2021-06-05 11:00:19 +08:00
@no1xsyzy #31 暴力破解 10 万个数字肯定不能用手输了吧,至少有点自动化吧……
lysS
2021-06-05 11:11:06 +08:00
懂了,输 π 就行了
x86
2021-06-05 11:34:58 +08:00
锁匠:你讲的是咩啊?
zxcslove
2021-06-05 11:49:25 +08:00
电子锁必然要限制输入方式的,不然毫无意义。很多杂牌都是一把螺丝刀捅开,机械安全(相对)是第一位的。
Rheinmetal
2021-06-05 11:50:53 +08:00
@no1xsyzy 当然是嗅探接口重试了
mxT52CRuqR6o5
2021-06-05 11:52:42 +08:00
内部存储是不是明文并不是电子锁安全的瓶颈
服务器里存的密码都加盐 hash 是因为大多数的服务数据库都直接 /间接暴露在公网上
dangyuluo
2021-06-05 11:55:30 +08:00
单纯考虑下存储方式,可能是这样的,第一次输入密码的时候,存储密码的 md5 (或其他摘要方式)值和密码长度(记作 n )。当你输入一个 m 长的密码时,会从第 0 位开始匹配,每次匹配 n 个数字,直到第 m-n 为止。如果有匹配的就开锁。
dangyuluo
2021-06-05 11:55:58 +08:00
当然这个匹配过程也是进行 md5 (或其他摘要)
Stain5
2021-06-05 11:59:32 +08:00
明文 加密储存有意义吗

这种锁你有不可能设几十位密码,单纯的十位以内数字的数据 碰撞破解也就不到一天的事

就算不从密码下手,把你指纹的特征提取出来,进行离线测试
大约跑 300w 次就能筛选出一个碰撞模型来通过你的指纹锁

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

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

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

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

© 2021 V2EX