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

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

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

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

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

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

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

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


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

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

7486 次点击
所在节点    信息安全
68 条回复
beijiaoff
2021-06-05 11:59:58 +08:00
每输入一位,就检查前面 6 位就行了呗。
你的举例中,最后几位 6 就不用管了,因为已经出现正确密码了,锁就认为你是主人了。
当然还要限定一下总位数,比如不能超过 50 、100 这种明显捣乱的。
liuidetmks
2021-06-05 12:29:20 +08:00
@mxT52CRuqR6o5 蓝牙协议是一个弱点,这个锁能通过蓝牙网关联网的。可以通过蓝牙网关远程控制。也就是说用户的密码会通过 用户手机-> 厂商服务器->蓝牙网关->门锁,这其中最孱弱的估计是蓝牙这一块(主观感受,新闻里面经常说蓝牙 xxx 漏洞)
intellectual
2021-06-05 13:32:46 +08:00
基本上所有的锁都是防君子不防小人。。。
现在锁的目的其实就是为了不带钥匙,方便。。。

你去查一下技术文档,各种级别的锁有规定需要在啥时间可以用开锁器打开。很多 5000 块的锁,1 分钟就能打开的。醒醒吧。
yellowV2ex
2021-06-05 15:01:08 +08:00
我认为这不是 bug,是一个 Feature,为了就是你输错前几个字母的时候不用按取消不用等几秒重置,随时直接输入对的密码即可开门,就算多输入几位也可以。
ziseyinzi
2021-06-05 15:08:43 +08:00
你都说蓝牙网关了,不就相当于说是哪家了……
xcstream
2021-06-05 15:29:22 +08:00
这不是机械容易破解的问题,这是个算法问题。
验证的是最后 6 个数字,又不是所有历史输入(狗头),哪里来的多项式复杂度。
pcbl
2021-06-05 15:30:33 +08:00
楼上说暴击破解的是来搞笑的吗?连续错误会延迟输入的
shawnsh
2021-06-05 16:06:12 +08:00
不同厂家的电子锁实现应该不一样,什么情况都有
est
2021-06-05 18:01:49 +08:00
猜黑盒子水平,楼主不合格,2 楼满分!

用户输入数字 -> 回头检查 6 位是否为正确密码(管你明文还是 hash )

如果检查正确,那么就是否开锁 -> true,等用户停止输入一段时间就执行电机开锁,完毕。

其实这也可以产生一个问题,如何输入最短的数字串,用来穷举完所有 6 位密码组合?(或者先把条件简化为 3 位密码)
agostop
2021-06-05 18:16:35 +08:00
@shoaly 如果真的只是存的 hash,你怎么知道是 6 位的密码?
Valid
2021-06-05 18:26:38 +08:00
防君子不防小人的东西加不加密都不重要
namelosw
2021-06-05 19:04:39 +08:00
如果是不定长的话,的确不用明文存储很难做到。

定长的话就是最后 N 位,也就是 O(n),只是加密算法的常数都很大。
namelosw
2021-06-05 19:07:30 +08:00
@oott123 PBKDF2 Aragon 这种别提手机了,6 位的话,就算用很快的电脑,0.2 秒一个,也得算个几小时。

除非直接用字典,但是加个盐就得重新算了。
dLvsYgJ8fiP8TGYU
2021-06-05 19:24:11 +08:00
就算电子部分的算法设计再巧妙,只要有失灵 /没电的可能,就需要留一个机械钥匙孔做备份,也就多了一个攻击面。机械锁芯抗技术开锁的能力如何?

有些电子锁还有 Wi-Fi/蓝牙(甚至未来不排除有厂家用物联网卡)这些通信模块,用来实现一些(高情商:物联网智能化;低情商:花里胡哨)的功能,又多了一个攻击面。

数字密码锁:别人涂一点特殊染料到你键盘上,观察哪些数字经常被按,再用排列组合是不是更快?

指纹锁:现在不会还有光学指纹吧?指纹膜了解一下?半导体 /电容指纹锁不知道能不能用这种方法攻破

卡片:用的是 IC 还是 ID ?不会还有扇区不加密的卡片锁吧?抗复制性能怎么样?

别人拿个大功率远程读取器从几米外读你身份证 /带闪付功能的银行卡 /护照的案例了解一下?有没有人体验过经过某种安检门后,手机的 Apple Pay 界面莫名其妙弹出的?是不是出门还得把你的卡片放在防 RFID 的卡套里面?

手机手表的 NFC 啥时候能用来开锁也是不错的

单一因素认证风险都不可忽略,最好选支持双因素认证的锁。门口装个摄像头也是不错的选择。
zx4824
2021-06-05 19:56:08 +08:00
呃,不懂技术细节就问,为什么要假设这种耸人听闻的呢?

首先设置的密码是有位数限制的,比如 4-16 位

那只需要分别记录

“最后输入的 4 位数”
“最后输入的 5 位数”
。。。
“最后输入的 16 位数”

总共 13 个字符串,然后 hash 比对,其中有一个符合就可以了
这点 hash 量很轻松


哪家正规大厂会冒着损害商誉的风险,搞这种明文存储的低级失误。
zgzb
2021-06-05 20:11:25 +08:00
去重,取后六位
jiangzhizhou
2021-06-05 20:14:53 +08:00
老哥,锁都是防君子,防不了小人。
密码锁仅仅只是为了让你别带钥匙而已。
在 CN 警察敲门你敢不开门么?
真的要开门,早就砸了
janxin
2021-06-05 21:16:13 +08:00
很多人想当然了,就没考虑过在中间和最开头的情况么...为什么假设正确密码一定就在最后...
beijiaoff
2021-06-05 22:44:13 +08:00
@janxin 在中间也没啥问题呀。只要检测到连续 6 个是对的,就判定是主人了。后面就不用检测了。等输入停顿后执行开锁即可
LithiumLee
2021-06-05 23:53:19 +08:00
明显是明文密码,只要处理物理密码和处理网络部分分开就行,你从网络上也无法获取他真实密码就可以了
毕竟你都把锁拆开了读芯片了,你为啥不直接把门一起开了呢,开锁机构就一个电机而已,你给电机上电门就开了
这种智能门重点就是不要让人通过网络黑进来开了就行

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

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

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

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

© 2021 V2EX