自如门锁之密码锁迷思

因为租房是住的自如,然后自如的客厅门锁及房间门锁均是用的电子密码锁,对于我这种常忘记带要是的人还是蛮有用的。

因为是电子密码锁,流程是(APP上先设置个人密码,开门时输入个人密码,验证,开锁。注意,同一个门可以有多个密码)

在输密码时很容易按错,然后一般输错了也就重来。

我的密码设置的是aabc,但有一次输入密码时按错为aabcd

呃,你猜,门居然也开了。

这就激起了我的好奇心,好奇这个密码锁的设计机制是怎样的。

然后尝试了下列操作

设置密码 尝试密码 开门状态 备注
aabc aabc 开门成功 完全匹配字串
abc 开门失败 不包含密码字串
abcd 开门失败 不包含密码字串
aabcd 开门成功 密码字串在最前面
daabce 开门成功 密码字串在中间
deaabc 开门成功 密码字串在最后面

ok,我们可以看到只要输入的值中包含连续的密码字串,即可解锁。

这….,让我觉得有些神奇又有些好奇,怎样的密码系统会设计成这样…

那么,该智能密码锁是如何验证密码是否正确的呢。

  • 离线验证

    离线验证的意思是,密码锁本地存储了(可能加密后的)密码副本一份,然后每次输入密码后(可能先加密)再和本地副本比对下,验证成功则开锁

  • 联网验证

    加解密模式一样,只是密码存在服务器端。

我猜是本地明文存储,然后验证输入中是否包含密码字串(KMP算法),验证成功,即开门成功。

呃,一想到密码是明文存储,觉得有些难以奇怪,然后在网上搜了下电子密码锁,看到了已经有相同困惑的用户在v2ex上进行过讨论。因为链接需要些魔法才能打开,这里转述些有价值的讨论。

这里说下讨论中的一些有价值的猜想:

  1. 密码可以不是明文存储,存储hash字串也可以,因为密码的长度是固定6位,那么当用户输入时,实时校验最后6位数字,成功匹配则记录is_open,当用户输入点击确认开锁键,直接匹配is_open即可
  2. 密码是否明文存储并不重要,因为你不太可能读电子锁的内存来获知密码以及无法远程登陆来开门
  3. 电子锁下面有把机械锁,攻击这个显然更快。
  4. 存在一些攻击手段干扰电路面板让其默认打开门锁
  5. 这是个feature,用户可以故意输入很长的密码(只要包含正确的密码字串即可)来迷惑别人

那么是否存在一个字串可以破解所有密码?

基于这个字串匹配的特性,密码又全是数字,理论上是存在的,输入π 就行了(逃~)

参考链接:

  • https://www.v2ex.com/t/781468
  • http://www.dplslab.com/zh/%e6%99%ba%e8%83%bd%e9%97%a8%e9%94%81%ef%bc%88%e5%b0%8f%e9%bb%91%e7%9b%92%ef%bc%89%e5%8f%af%e6%8e%a7%e7%94%b5%e7%a3%81%e6%b3%a8%e5%85%a5%e6%b5%8b%e8%af%95%e5%b9%b3%e5%8f%b0/#more-314
  • https://yaseng.org/intelligent-lock-attack-and-defense-1.html
  • https://www.zhihu.com/question/27222942/answer/2253102026

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注