Skip to content

Latest commit

 

History

History
42 lines (38 loc) · 3.62 KB

README.md

File metadata and controls

42 lines (38 loc) · 3.62 KB

一、基本要求:

  1. 多部手机能开同一把锁
  2. KEY加密、解密的安全性
  3. 手机丢了之后的应对措施

二、保障安全性:

  1. 锁大多数时间应为休眠状态
  2. 用于开锁的手机必须事先与待开启的锁绑定(GUID)
  3. 锁在唤醒之后,只能被已经绑定的手机开启
  4. 锁在唤醒之后,生成一个4位(或6位)的PIN,该PIN的有效时间限制为1分钟,1分钟后若锁未开启,则锁重置为休眠状态
  5. 解锁者需输入有效PIN才能生成用于验证开锁的KEY1
  6. 锁扫描手机生成的KEY1,并检查该手机的GUID是否在已绑定设备列表中,若不在,则锁重置为休眠状态
  7. 锁在检查GUID通过之后,根据刚刚的有效PIN和该GUID计算出解锁的KEY2,若该KEY2无法与KEY1对应开锁,则锁重置为休眠状态
  8. KEY1与KEY2若匹配,则开锁(输出高电平),之后锁重置为休眠状态
  9. 锁不应当联入局域网,更不应当联入互联网

三、保障用户使用体验:

  1. 锁应提供唤醒按钮,按下后从休眠状态转为唤醒状态并给出PIN
  2. 当锁处于唤醒状态时,再次按下唤醒按钮则不应有任何作用
  3. 整个开锁过程有且仅有两次验证,不应再增加任何冗余步骤

四、概要设计:

  1. 锁的内部使用简单数组来保存已绑定的手机的GUID,数组最大元素数量不应过大,且不可修改
  2. 锁在生成PIN时,应按照某一规律计算出有伪随机性的PIN
  3. 锁对应的显示屏应在生成PIN后显示出PIN,在休眠状态时关闭,在唤醒状态且PIN失效时亦应关闭
  4. 手机(上的APP)在输入PIN后,不检查该PIN是否为此时的有效PIN
  5. 手机根据输入的PIN和手机对应的GUID,按某一规律计算出KEY1,并显示出KEY1对应的解锁图案(暂用二维码)
  6. 解锁图案的信息应包含如下:
    • 当前设备GUID
    • 当前设备根据刚刚输入的未检查有效性的PIN生成的KEY1
  7. 该解锁图案不加入有效时间判断
  8. 锁扫描某一设备的解锁图案后,进行 保障安全性 中的第6条,判断该设备是否在已绑定的设备列表中
  9. 锁根据获得的GUID与刚刚的有效PIN进行同一规律的计算,生成KEY2,若解锁设备输入的PIN为有效的,刚KEY2与KEY1必满足某一特定规律,否则解锁设备中的PIN则为无效PIN
  10. 验证KEY2与KEY1,进行 保障安全性 中的第8条

五、常见逻辑问题:

  1. 若已与锁绑定的手机丢失,且手机上的解锁APP可用,则之后拥有该手机的任何人均可以进行正常步骤的开锁行为,但锁与解锁APP的开发者不对这种行为负责。参考普通钥匙丢失后,拾取到该钥匙的人可以正常使用钥匙开锁
  2. 锁应保留普通钥匙孔,即可以使用普通钥匙进行开锁
  3. 若所有与某一锁绑定的手机均丢失,参考使用钥匙开锁
  4. 若所有与某一锁绑定的手机均丢失,且对应的钥匙也丢失,则应采取第三方手段拆除锁,参考公安备案的开锁
  5. 每一部手机均可以与任意数量的锁进行绑定,且该手机可以按照上正常行为解锁与其绑定的任何锁