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

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

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

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

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

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

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

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


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

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

7486 次点击
所在节点    信息安全
68 条回复
lvybupt
2021-06-04 22:39:23 +08:00
不用嗅探内存,一把锤子就能破。

这个锁的木桶短板是你的机械钥匙,不是电子元器件
shoaly
2021-06-04 22:43:42 +08:00
真的要较真的话 我说一个算法, 每次按下一个键之后, 就倒着取回去 6 位数, 然后就可以做 hash 去对比 "并不是明文储存的" 密码了. 所以也可以不是明文储存的密码
janxin
2021-06-04 22:45:38 +08:00
是明文的,要不然没法实现虚位密码功能

为什么是嗅探,从盗窃这种普遍操作而言,做这么复杂的工作门早就能打开了...毕竟撬门也没那么慢,尤其是对专业的人来说。嗅探抓用户输入自然可以,不过从某些程度上而言也是脱裤子放屁一样的操作,因为一般情况下意味着你需要打开门锁面板。

当然你是一个执行秘密任务的特工的话这事就另外讲了...
loading
2021-06-04 23:02:19 +08:00
当你能读存储的时候,你都能挂恶意代码了,如果你认为需要挂安全芯片,客户买单吗?
反正这个作为卖点我不买单,还不如你把机械锁芯做好一点。
yanqiyu
2021-06-04 23:13:32 +08:00
既然你都能直接接触芯片内存了,直接开锁就行了为什么要绕这个弯子。

当然如果记录了 /指定了密码位数的情况下滑动窗口就能解决问题

对于没有记录密码位数的情况下,如果密码位数是某个特定的范围的(总不能允许用户设置任意长密码),问题退化成多项式时间。以及不能允许虚位密码任意长(不然和允许暴力破解无异),那么也就有一个耗时上限,我猜也不是不能接受。
liuidetmks
2021-06-04 23:18:46 +08:00
@shoaly 每次做校验可能要重复几千上万次 hash 生成最终的 key ( pc 上一般是 10w 次以上)耗时上百毫秒,从原理上防止暴力枚举。
而且这个密码是不定长,输入到后面可能会处理不过来造成卡顿。


@loading 好吧,我杞人忧天了。物理上,门外没有输入口,希望蓝牙协议不要爆出严重漏洞导致密码指纹外泄。
tankb52
2021-06-04 23:20:45 +08:00
因为密码被泄露,多数来源于偷窥,极少数才来自于读取芯片内存吧?
Andrue
2021-06-04 23:53:56 +08:00
目前的技术里电子锁下面那个机械锁才是重点,和联网大规模攻击比起来直接短路开机械锁是最容易的
Tink
2021-06-05 00:17:48 +08:00
一定是明文的,不用多想
ysc3839
2021-06-05 00:47:47 +08:00
顺带一提,现在已经推荐使用 Argon2 而不是 PBKDF2 了。
Orciorc
2021-06-05 00:56:35 +08:00
题外话,始终不愿意使用指纹锁的最重要原因,是因为密码不可更换
admin7785
2021-06-05 01:05:30 +08:00
同感,目前住自如,输密码开锁时,也感觉是 contains() 校验的
FS1P7dJz
2021-06-05 01:10:06 +08:00
因为防范重点并不是这里

防御重点第一点就是物理锁体部分达到标准,你这么惊讶我能告诉你,所谓的 ABC 级锁,所谓的技术开锁 10 分钟以上,在实际上中都是 1 分钟攻破,你会不会更惊讶,但这就是事实,几百块到几千块在开锁匠眼里都是 1 分钟完事,根本不需要涉及电子部分

然后电子部分,主要漏洞依然是蓝牙 /wifi,和权限接入
这部分应该就是 V2 大家熟悉的了,某米号称自有加密技术也是这部分在采用,除去蓝牙 /wifi 协议底层漏洞,可以直接通讯,还存在权限这一部分的需要破解,到了这一步,你密码明文与否其实并不重要,因为最终控制电机转动即可开锁,理论上你能制造一个强大的磁场带动电机旋转也可以

其实最终还是成本和安全问题

当然可以设计一个并不采用通用设计的物理锁,甚至一锁一设计,出品后设计图销毁,让锁匠开锁的时候非常折腾
也可以设计一个完全防御各类电磁频闭,内部采用航天级别双备份双系统,设置对外协议也另起炉灶编写,所有通信交流需要专有设备
键盘指纹虹膜声音啥都弄上,一个不匹配自动炸毁焊死锁芯

可以,但是没必要
EscYezi
2021-06-05 01:12:42 +08:00
原来是这个功能吗🌚我一直以为是按#退格并且每次输错都按好几下#🌚
说起来楼下单元门一个电打火就可以开,其实就是楼上说的短路直接开机械锁?
SingeeKing
2021-06-05 01:24:57 +08:00
建议不要明文存储密码主要考虑的是数据库泄漏被用于撞库的情景,门锁密码这种只存在内存里不会上网,无法存在大规模攻击,所以并没有必要去刻意做加密
GuuJiang
2021-06-05 01:35:19 +08:00
这其实是一个非常有意思的问题,不知道真实的密码锁是怎么实现的,但是假如让我来设计一个密码锁的话,我会采用下面的方案
当设置密码时,将设置的密码编译为一个 AC 自动机(当然由于只有一个关键词,所以实际退化成了 KMP,不过也可以支持多密码),这样每按一个键时实际是在自动机中进行转移,当到达终结状态时就开门,这有个巨大的好处,无论前面输入的无效内容有多长,都不会带来时间和空间上的额外开销,理论上可以支持的无效内容长度没有上限
假设密码锁真的采用了这样的方案,那么确实可以认为是明文存储的,虽然没有直接地存储密码本身,但是获得了完整的自动机等价于获得了密码,不过对于密码锁这种必需要物理接触才能使用的系统来说,直接暴力破坏恐怕都比试图读取存储要容易得多,所以是否明文存储已经不是那么重要了
jinliming2
2021-06-05 01:53:39 +08:00
边信道(有的叫旁信道、侧信道)攻击了解一下
geniussoft
2021-06-05 02:01:58 +08:00
如果达到这种级别的攻击,摄像头、旁路触摸、劫持触摸芯片的引脚都是无法解决的,而且更容易实现。
levelworm
2021-06-05 02:15:20 +08:00
可以 dump 下来看看里头的东西。另外能不能防电击?据说很多电子锁在受到点击的时候会 reset,回到没有初始密码的情况,也就是可以打开了。
levelworm
2021-06-05 02:24:04 +08:00
我想了下是不是这样,就是用一个窗口啥的,一个个移过去,这样就算是密文,也应该可以解密吧。比如说密文 6 位,你输入 40 位,这样他每次检测 6 位,不知道可行否?
我知道有些车库的开关就是这样,只不过他是真的明文。

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

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

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

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

© 2021 V2EX