【摘要】  为解决目前市场上流行的蓝牙智能锁安全性不高,易被破解的问题,我设计了一款新型蓝牙智能锁。此款智能锁运用加密短信验证,TOTP动态密码,第三方验证等技术提高其安全性能。本文详细介绍了智能锁的系统架构,锁具物理结构,功能场景和工作原理,并针对各场景的破解方案进行安全性分析,归纳设计中的薄弱环节及防护措施。同时根据设计特点对智能锁的适用场景进行了简要说明。

4.工作原理

本款智能锁的设计:借助手机、服务器利用加密短信验证方式完成开启步骤。它的核心建立在TOTP动态密码技术基础上,此技术被广泛应用与网银的安全操作中。其系统结构如图2所示:

图2  系统拓扑结构图

图中服务器用途是用来存储用户手机号,购买产品信息,产品唯一ID,计算根据用户TOTP动态密码。

管理主机是管理员或客服人员管理服务器数据库中的数据的,人工注销用户。管理主机和服务器所在的网络是和互联网隔离的,属于私有网络。

短信猫池用来收发客户端和服务器端短信。因采用互联网组网易被黑客攻击,防范成本较高,为确保系统架构的健壮性,用户手机客户端与服务器端的数据通信方式采取加密短信的形式进行。

手机客户端和智能锁直接的通信方式采用蓝牙连接技术。

系统实现的基本原理:采用TOTP动态密码技术,在产品注册时设定唯一动态密码计算规则,在服务器端设定相同的动态密码计算规则,并将智能锁ID与注册用户手机号做一一绑定。即在相同的时间段内,服务端用户ID下计算的动态密码和出售给用户的智能锁计算的动态密码相同。智能锁通过手机客户端获取服务器上相应用户ID下计算的动态密码,与自身计算的动态密码相比较,比较正确开启,比较错误不开启。

智能锁的结构是由电控锁和触摸屏2部分组成,如图3所示:

图3  电控锁物理结构图

智能锁选用的电控锁是一款使用步进电机驱动的电控锁。将数据比对处理电路置入现成的锁体中并与其驱动控制电路相连接,电控锁的开启受控于数据比对处理电路。触摸屏在显示二维码,输入密码或切换场景操作界面时使用。如图所示电控锁和触摸屏之间的连接线是电源和通信复用线路,一旦两部分断开,电控锁将无法开启,可有效规避暴力破坏造成智能锁非正常开启的风险。5.实现过程

系统根据用户的实际需求,设置了注册、开锁、设置密码、忘记密码、手机挂失5个应用场景,如图3所示。

图3 系统用例图

5.1 注册

每个智能锁在出厂时都设置了唯一设备ID,服务器数据库中不记录任何信息。待用户第一次使用时进行用户注册,将用户手机号和锁ID绑定,一同记录在服务器数据库中,而后有服务器根据锁的信息生成唯一验证码计算规则,并将其通过激活的方式同步到锁体内,以实现锁和服务器间的同步验证。注册只能进行一次,以确保智能锁信息在数据库存储的唯一性。

智能锁在未激活前处于开启状态,待激活、预置密码两个步骤都进行后,方可使用。注册工作步骤如图4所示。

图4用户注册活动图

5.2 预置密码

为防止中间人攻击,重放信号,导致的非法开启。在使用TOTP动态密码的同时,又增加了用户设置个人密码(开箱密码)的环节,以增加非法开启的难度。在使用过程中,即便是冒用用户手机实施开锁,在不知道用户设置的预置密码的情况下,也是很难打开智能锁的。其工作步骤如图5所示。

每个功能界面的切换是通过九宫格图形密码锁输入固定的数字排序来实现的。

图5 预置密码活动图

5.3 开锁

开锁的过程是利用TOTP动态密码技术,通过手机加密短信的通信方式,将服务器产生的动态密码和智能锁产生的动态密码相比较,一致开锁成功,不一致开锁失败。因TOTP动态密码是有生命周期的,每组密码在不同的时间段是在不停变换的,增加了破解的难度。为了确保智能锁和服务器的时间同步,在每次通信时,智能锁首先会与手机时间同步。为确保手机设置时间的准确性,App客户端会定时通过网络校准时间。为了防止别人冒用手机开启智能锁,智能锁在使用前进行了个人密码预置,此密码只有用户个人掌握,只存储于智能锁内,一旦忘记密码,将需进入忘记密码环节进行密码重置。其开锁的工作步骤如图6所示。

图6 开锁活动图

5.4 忘记密码

用户在使用智能锁时,可能会忘记预置密码,针对这种情况设置了忘记密码功能。此过程是利用第三方认证技术,通过支付宝支付的形式获取操作用户的手机号,在与数据库中的手机号比对,发送相应手机号绑定的动态密码,而后有人工输入,智能锁自行比对完成验证过程。此场景考虑取证,记录操作人是谁,以便于倒查,设计了手机拍照取证环节。其工作步骤如图7所示。

图7 忘记密码活动图

5.5 更换手机

因系统采用手机操作,会遇到用户更换手机号或更换手机的情况,针对这种场景设计了更换手机的操作过程。此过程的核心思想是尽可能的延长授权时间,以增加非法开启的时间成本。更换手机的过程需要人工验证操作者的用户身份,需要在系统运行中设置客服人员。其工作步骤如图8所示。

图8 更换手机活动图

6.安全性分析

6.1 开锁过程的破解

要想进行开锁过程的破解需要3个必须条件:

  1. 获取到当前时间段预破解智能锁的动态密码;
  2. 获取到用户预置开箱密码;
  3. 使用正确的手机和手机号。

以上3个条件必须全部具备方可开启智能锁。那么要想具备上述3个条件需要进行那些破解步骤呢?

首先最简易的方式是冒用用户手机。但要想冒用用户手机开启智能锁,需要预先知道用户预置到智能锁内的开箱密码,要是开箱密码不知道,通过破解方式获取需要通过图形密码锁的破解环节,理论上非正常开启的时间代价是巨大的,其行为是比较容易被用户发觉得。

如果拿不到手机,要想破解,需要先攻击服务器获取当前的动态密码,因服务器不联网,网络攻击是不存在的。服务器只通过短信方式通信,通信内容又是经AES加密的,AES加密破解的难度取决于是否知道私钥,其私钥每个用户都不同,本文中提及的私钥是有用户的手机号组成的,但其不完全是用户手机号,还可以添加激活码的部分信息在里面,这样即便知道用户手机号也无法知道其完整的私钥信息。AES破解是最大的破解难点。其次是要知道用户手机的IMEI码,知道用户的开箱密码,给破解工作增加了成本。

第三种可能,截获加密短信定向重发。因短信是经两次加密的,第二次加密过程是在用户手机内完成的,并且增加了用户个人属性信息,其开锁最终比对的动态密码又是有生命周期的,其时间窗口就是破解的给予时间。其破解的可能性很小。

6.2 忘记密码过程破解

假如非法用户盗取了用户的手机实施开锁,他需要知道用户的开箱密码,需要知道用户的屏幕解锁密码。先暂时不提手机的屏幕解锁密码,假如非法用户打算通过忘记密码的功能进行非法开锁,他会遇到怎样的难题呢?因忘记密码过程首先要进行第三方验证,要进行验证需要知道用户的支付宝密码。在不知道用户支付宝密码的情况下,这个步骤是无法进行的。除非是内部人行盗,而且,每一次忘记密码操作都会拍照记录操作人,这个给下一步的物品丢失破案缩减了难度。

6.3 更换手机过程破解

更换手机过程,是需要人工验证的,非法用户需要知道用户的一些基本信息,比如之前用的手机号。而且此授权时间需要经历24小时,并且申请了更换手机,系统会第一时间向原手机号发短信通知其行为,只要合法用户在24小时内做出反应,此过程就无法继续进行。非法用户的破解成本很大。

6.4 其他非正常方式破解

智能锁采用断电长闭方式。断电后智能锁处于上锁状态,无法开启。在不破坏锁体的情况下,无论是破坏触摸屏,还是采取截断通信线路接入破解电脑的方式,都无法控制锁的开启。因为锁体机械部分开启的指令是在锁体内部完成的,而非外界授予的,并且通信线路又是和供电线路复用的,在不能模拟出通信环境的情况下是无法实现信息传输的,这种设计给非正常开启的破解增加相当的难度,可有效延长防技术和防破坏开启时间。

基于加密短信验证码的蓝牙智能锁设计相关推荐

  1. 短信验证码内容组成及设计注意事项

    我们经常会收到各种类型的验证码短信,那么这些验证码短信有哪些内容及类型,企业应当如何进行设计,在设计时又有哪些注意事项呢.下面为你说明短信验证码内容的设计问题. 我们在手机上接收到的各种验证码短信,依 ...

  2. php短信接口加密_PHP短信接口、PHP短信验证码接口源码

    PHP短信接口.PHP短信验证码接口源码 时间:2016-06-13 11:53 来源:原创 作者:admin PHP短信接口文档源码,PHP发短信接口,PHP在线发短信,PHP微信发短信接口 /* ...

  3. java 随机手机验证码_基于Java随机生成手机短信验证码的实例代码|chu

    简单版 /** * 产生4位随机数(0000-9999) * * @return 4位随机数 */ public static String getFourRandom() { return Stri ...

  4. 基于 短信认证 通过 华为、H3C 结合 OpenPortal认证计费系统 实现 网络准入 短信验证码 访客实名认证

    基于 短信认证 通过 华为.H3C 结合 OpenPortal认证计费系统 实现 网络准入 短信验证码 访客实名认证 在企业园区网络中,需要结合短信认证实现网络安全准入,访客短信验证码实名认证.方案中 ...

  5. 魔方APP项目-06-用户注册,完成短信验证码的校验、基于Celery实现短信异步发送、用户登录,jwt登陆认证、服务端提供用户登录的API接口

    一.用户注册- 1.完成短信验证码的校验 application.utils.language.message,代码: class ErrorMessage():ok = "ok" ...

  6. java+生成手机验证码_基于Java随机生成手机短信验证码的实例代码

    简单版 /** * 产生4位随机数(0000-9999) * * @return 4位随机数 */ public static String getFourRandom() { return Stri ...

  7. 基于阿里云平台的短信验证码服务API的使用

    基于阿里云平台的短信验证码服务API的使用 第一步:登录阿里云平台 第二步:申请国内文本短信签名 如果是个人作业项目(如作者的签名),可以直接申请测试和学习用的测试签名,该签名的缺点是必须绑定测试手机 ...

  8. 基于redis的短信验证码服务开发

    基于redis的短信验证码服务开发 目前可以提供的验证码服务平台有很多,这里选择阿里大于短信验证码服务平台,里面有10元体验卷可以免费试用,不多说上代码.写代码之前需要去阿里大于平台申请验证码服务,同 ...

  9. 基于阿里云的手机短信验证码和注册校验逻辑

    基于阿里云的手机短信验证码demo实现 1. 环境依赖 2. 页面表单 html 3. 校验与短信 js 4. 工具类 SmsUtils 5. 资源调用 Servlet 阿里云的短信平台:http:/ ...

最新文章

  1. Android 动态广播与静态广播
  2. PROC简单使用用例--VC连接ORACLE
  3. 从入门到实践:创作一个自己的 Helm Chart
  4. 有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?
  5. MySQL5.6免安装配置与“系统找不到指定的文件”错误
  6. linux进程通讯-纯文本文件1
  7. 坑了腾讯1624万!3人冒充老干妈员工诈骗腾讯 判决结果来了...
  8. [原]LVM管理与虚拟机管理
  9. 电气控制技术实训考核装置
  10. android webview file,Android WebView实现文件下载功能
  11. 2022--SE-GAN骨架增强的基于gan的毛笔手写字体生成模型原理以及网络结构
  12. 运放参数的详细解释和分析压摆率SR
  13. unity, Animation crossfade需要两动画在时间上确实有交叠
  14. html快闪软件制作,快闪文字视频制作
  15. Python Web 框架-Django day07
  16. tsm ANS0326E问题处理
  17. 第九次java课堂笔记
  18. 子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环10 次(线程面试:windows下实现)
  19. Vue3.0中Watch的几个问题
  20. ZeroTier-全网畅连

热门文章

  1. 转 TensorFlow Object Detection API 多GPU 卡平行计算,加速模型训练速度教学
  2. 用Python去京东抢90-40话费券,看到结果我惊呆了!
  3. 苹果这波是要偷家啊。。
  4. Revit二次开发小技巧(十二)创建带洞口的墙
  5. android换手机照片怎么转移,换手机了怎么把照片转移到新手机
  6. 网络分流器|网络分流器|网络分流采集器的应用领域
  7. IRQL深入解析(3)--与IRQ比较
  8. centos 安装python36 pip19.1 python虚拟环境
  9. 多个线程ThreadLocal中存的是什么
  10. H3C网管型交换机、路由器 常用登录管理方式使用详解 及 默认端口号,默认用户名、密码