Hackaday.io上的树莓派项目-带双重身份验证的保险箱
收藏
分享
脑图
Hackaday.io上的树莓派项目-带双重身份验证的保险箱
关于项目
项目描述:物联网主要是把事物带到互联网上,但它也是把互联网带到物联网中。一段时间以来,任务关键服务网站(如银行账户或比特币钱包)已经提供了双重身份验证 (2FA),除了密码之外,还提供了额外的安全层。由于resin.io是所有关于跨越互联网和现实世界之间的差距,我们决定把这个概念付诸行动,建立一个保险箱,需要2FA打开。通过将 resin.io与 Twilio 的 Authy 相结合,我们必须使用非常简单的部署系统 (git 推树脂母版) 和添加 2FA 机制的非常简单的方法做到这一点。保险箱和储物柜通常由钥匙或数字键盘上的代码打开。我们已想出一个替代方法,将数字代码与通过 Authy 发送到用户手机的 SMS 相结合,这意味着打开保险箱需要代码和移动电话。
项目图片
项目详情
我们用树莓派2和一个小电路在原板上。锁本身是 5V 电磁阀。
Pi 运行一个 node.js 服务器,该服务器通过简单的 Web 界面执行身份验证。我们使用 Authy 提供第二个因素身份验证,resin.io允许超简单的代码部署。
锁定和解锁保险箱的过程如下:-
用户输入其电子邮件。
如果是新用户,系统会询问他们的电话号码。
UI 要求用户的代码锁定保险箱。
当用户输入代码时,锁将接合。
完成操作后,打开保险箱:-
首先,用户必须输入正确的代码。
输入代码后,Authy 会向用户发送 SMS。
用户输入 SMS 代码,锁将打开。
锁仅打开几秒钟,但可以通过按 UI 上的"打开"按钮再次打开。
1 X 树莓派2
1 X 一个相当难以打破的盒子
1 X 小型原型板
6 X 电阻
1 X 1N4148 二极管
1 X 2N2222 晶体管
1 X 各种原板电线
1 X 5V 电磁阀
第 1 步
硬件
电磁阀驱动器的电路示意图如下所示:-
这是我们如何在原板上组装电磁阀驱动器
软件
树莓派运行一个节点.js服务器,它实现了多步身份验证机制,为了实现这一点,我们设计了一个状态机使用ma机械.js通过HTTP通过快递.js服务。大多数的交互操作socket.io,为用户提供实时反馈。
我们使用"authy"npm包轻松地与AuthyAPI进行交互,从他们的教程中借用一些代码。
状态机由生成从一种状态到另一个状态转换的状态和事件组成 - 我们在应用程序使用的模型"Safebox"具有"打开"和"关闭"状态,两个方向从一个状态到另一个状态,通过处理身份验证过程的中间状态。
每当用户与 UI 交互时,输入事件都会通过socket.io,这些事件将传递到状态机。
下面的代码是定义这些状态和转换的示例:
当计算机过渡到"关闭"状态时,其_onEnter称为禁用锁并保存此新状态。当用户随后输入代码时,我们仅将其与密码进行比较,只有在存在匹配项时才转换到下一个状态。
我们使用 MongoDB 来保留框的当前状态和用户数据 - 存储用户数据允许我们存储用户的密码和电话号码,这样他们不需要在每次重新启动设备时重新配置设备。
集成用户模型的代码还与 Authy API 进行交互,该 API 提供向用户发送 SMS 和验证他们提供的代码的方法。
在客户端,我们有一个简单的单页jQuery应用程序,它显示每个状态机状态的不同HTML内容,侦听拨号盘和输入上的事件,发送socket.io消息,并为用户提供相对的反馈。我们使用Bootstrap和Toastr 快速设计出一种界面,该界面在:)
我们使用resin.io与建立环境并运行启动脚本的 Dockerfile 连接在一起:
我们的start.sh脚本, 然后启动 Mongodb (在不干净关机的情况下修复它) 和我们的网络服务器:
使用 resin.io 使我们的部署就像键入"git push"一样简单,并且它允许我们使用 docker 这一事实可确保以完全相同的方式满足每个设备的所有依赖项。再简单一

评论

0 / 100
查看更多
Sen
2020-08-28
819
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号