V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
UserName99
V2EX  ›  程序员

自如的密码锁有个问题,只要输入密码包含正确密码就能开锁

  •  
  •   UserName99 · 121 天前 · 3393 次点击
    这是一个创建于 121 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这个问题存在好几年了,每次误触后还能开门就会纠结这个问题,比如正确密码是 A ,那么输入 A 、123A 、A123 、123A456 这几种都能开锁,这是个 bug 还是 feature 。然后又想到了另一个问题,他们是不是存的明文密码,如果是密文怎么判断输入密码包含正确密码的,就想到一个循环一下,每个字符后推 6 位加密后和存储的密文做对比,可能要循环很多次,还有其他什么好的算法吗?
    32 条回复    2024-07-26 15:51:15 +08:00
    mnsw
        1
    mnsw  
       121 天前 via Android
    虚位密码。
    MJTest
        2
    MJTest  
       121 天前   ❤️ 9
    是 feature.
    B1ankCat
        3
    B1ankCat  
       121 天前   ❤️ 1
    这是 feature ,就是为了让你可以随便输入,包含正确密码就能进去,防止被别人偷窥到
    FabricPath
        4
    FabricPath  
       121 天前   ❤️ 2
    feature ,当你背后有人站在的时候,你乱打几十个数字也能开门,但是对方不知道你真实密码是什么。
    你这个算法想的有点复杂,单片机大概率不能动态分配内存,不好处理“动态长度”的数据;简单的方式是,你每按一个数字,比如你正确的密码是 234 ,你敲 1 的话,和 4 比较,不正确;
    敲 2 ,和 2 比较,正确;
    敲 3 ,和 3 比较,正确
    敲 5 ,和 4 比较,不正确,清零。

    当中途有匹配的密码之后,开锁 flag 置位,就不会再管后面你敲了什么,按下#的时候判断开锁 flag 。
    FabricPath
        5
    FabricPath  
       121 天前
    @FabricPath “你敲 1 的话,和 4 比较” -> "你敲 1 的话,和 2 比较"
    yanqiyu
        6
    yanqiyu  
       121 天前   ❤️ 1
    判断密码就状态机(参照 kmp ),什么都不用存,存一个当前识别到几位连续密码就行,数据读一个丢一个

    肯定存的是明文密码,密码锁存个明文密码没有任何困难和安全风险
    EJW
        7
    EJW  
       121 天前
    feature ,我家新换的德施曼智能门锁也是这样。
    xubeiyou
        8
    xubeiyou  
       121 天前
    密码锁都这样- -
    MJTest
        9
    MJTest  
       121 天前
    @EJW 我最近也想换 德施曼感觉用的怎么样啊?尤其是耗电量 谢谢
    SimonOne
        10
    SimonOne  
       121 天前
    这是 feature 啊,哥们,你不会突然灵光一闪吗
    shadowyue
        11
    shadowyue  
       121 天前
    虽然知道这个是 feature ,不过我挺好奇为啥这么统一
    EJW
        12
    EJW  
       121 天前
    @MJTest
    1. 买的 q5s ,密码和指静脉用起来没啥毛病。
    2. 如果门不符合,安装师傅现场施工,服务不错。
    3. 四月初买的,用到现在还有 65%的电。
    4. app 功能不多,但是做的还可以。wx 公众号有开门推送。
    MoYi123
        13
    MoYi123  
       121 天前
    密码固定 6 位,输一次密码算一次 md5(password[-6:]) 不就行, 这还要什么算法吗?
    sennes
        14
    sennes  
       121 天前
    那理论上是不是可以用 De Bruijn sequence 破解
    ISOtropy
        15
    ISOtropy  
       121 天前 via Android   ❤️ 2
    我要是能输入一个π岂不是都可以破解
    belin520
        16
    belin520  
       121 天前
    @shadowyue 因为可能这个是密码锁标配的基础能力/基础功能
    deplives
        17
    deplives  
       121 天前
    老哥,所有的密码锁都支持啊,这个叫虚位密码,假定你不信任当前输入密码的环境,可以在连续正确密码前后增加任意多的字符,保证密码不被泄露
    krixaar
        18
    krixaar  
       121 天前
    @sennes #14 可以,毕竟单纯按理论的话六位密码直接从 000000 按到 999999 就破解了……
    Inn0Vat10n
        19
    Inn0Vat10n  
       121 天前
    @krixaar 失败多次就锁死保护了,必须重设密码
    Tsing2
        20
    Tsing2  
       121 天前
    我猜楼主想问的是,如果使用虚位密码功能,那锁里保存的就不是密码的哈希而是密码的明文了,不然运算量有点大
    ysc3839
        21
    ysc3839  
       121 天前 via Android
    @FabricPath 但是对方看到完整密码后输入进去也能解锁,感觉意义不大,只有在对方不能完整看到的情况下有点用,或者可能是增加容错率,避免不小心碰到别的数字再输入正确密码失败。
    tinytoadd
        22
    tinytoadd  
       121 天前
    @tlsmars009 正常的密码锁,输入一个 pi 也可以打开😺
    meisa
        23
    meisa  
       121 天前
    @Inn0Vat10n 我把每一种 6 位数字组合全部按一遍,到最后的时候才按 # 开锁,理论来说这样无论如何我都能开锁。
    jim9606
        24
    jim9606  
       121 天前 via Android   ❤️ 1
    防偷窥不合理,因为只要完整重放多头多尾的密码一样可以开锁。
    省内存这个存疑,我不觉得现在有 wifi 功能的 mcu 会负担不起这点代价,可能只是单纯沿用以前弱鸡 mcu 的交互设计。
    交互上,多数密码锁没有清空输入按键也没屏幕提示位数,支持这种输入可以免去对这两者的需求(故意输错虽然可以但会累计错误次数,不能等同于清空输入)
    mcfog
        25
    mcfog  
       121 天前
    多按几位还有一个好处是避免长期使用以后,密码的那几个按键痕迹/磨损到有肉眼可见的差异
    Ruikoto
        26
    Ruikoto  
       121 天前
    @jim9606 这个防偷窥是防你输了 6 位被直接记下来的,如果你输入 20 位的虚位密码还被人偷窥走了,那还是用指纹吧
    CSGO
        27
    CSGO  
       121 天前 via Android
    这个挺好,
    churchmice
        28
    churchmice  
       121 天前
    你只要密码长度的是固定的,里面存 hash 也是没有问题的
    输入的数据存在一个 buffer 里面,用个滑窗挨个算 hash 就行,计算量也不大
    但是现实的问题是大家都偷懒不会这么做,我见过太多做安全的应用,号称多么安全,最后把钥匙挂门上的设计
    安全这东西最重要的是安全意识,可惜大多数人没有
    反过来你如果有安全意识,你的设计成本会增加,反而会被劣币驱逐,乳汁奈何
    SimonOne
        29
    SimonOne  
       121 天前
    @jim9606 #24 记住 6 位密码和记住 20 位密码的难度是不一样的,我只要确保胡按的里面夹上正确的就行,偷窥记密码的人可没那么轻松了。
    JustBecause
        30
    JustBecause  
       120 天前
    @ysc3839 多加几位就好了,我当着面输 20 位密码,看得人也记不住啊,实在不行我输 30 位 40 位
    Ainokiseki
        31
    Ainokiseki  
       120 天前
    @FabricPath 如果是这样的话,假设正确密码是 2324 ,输入“232324”会无法判断通过的
    grady8866
        32
    grady8866  
       120 天前
    @meisa 锁体有限制虚位密码长度啊,像米家的就是最长 20 位,不可能没完没了让人输入的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   924 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 22:15 · PVG 06:15 · LAX 14:15 · JFK 17:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.