×

安全乘车开源分享

消耗积分:0 | 格式:zip | 大小:0.03 MB | 2022-11-03

无人岛

分享资料个

描述

动机

交通上的信任/安全是一项挑战新功能,需要通过近年来越来越受欢迎的拼车服务来解决。Uber、Lyft、Via 和 Juno 是一些由业主驾驶的私家车的例子,提供从门到门或从特定起点到终点的交通服务。

公共交通和出租车因其共同的颜色、制造商和设计而很容易被发现。然而,拼车服务很难被注意到,因为它们只在前窗或侧窗上显示一个小贴纸。每次接老婆,都会在地铁站看到这种情况。人们在车站上下行走以寻找他们的请求乘车。发车款,颜色都尽量减轻这个负担,但还是有误乘的可能。

然后,有可能有人假装是您的乘车人,造成严重的安全问题。

该项目的动机是 Hackster 中提出的以下项目:

双重身份验证:Omega NFC 模块和 WIZ750SR

聪明的骑士

第一个展示了当前流行的使用个人外部设备(通常是手机)确认身份的安全功能。大多数系统会生成一个随机代码并将其发送到注册设备以输入到登录系统中。

第二个展示了用户成为确认身份的密码短语的想法。用户选择密码并将其发送到 AID,AID 将其转换为二维码以便于阅读。

使用 AID 可以保护隐私并使其具有防篡改功能,因为连接独立于拼车请求系统。

材料

Particle Boron LTE 是身份验证设备 (AID) 系统的核心板。Boron 板包含一个嵌入式 SIM 卡,可以与本地蜂窝网络通信。

Adafruit TFT 2.4" 触摸屏羽翼被用作主界面。

最后,任何网络浏览器都可以启用移动设备:笔记本电脑、平板电脑或手机来确认密码。

流水作业

工艺流程如下:

  • 请求乘车(请求者)。
  • 驱动程序接受请求并将 AID id 和名称发送给请求者
  • 请求者收到 AID id 和名称;尝试建立连接。
  • 使用 AID 连接成功,将设备名称与收到的设备名称进行比较。
  • 请求者写入密码并将其发送给 AID。
  • AID 接收请求者密码并构建 QR 码。
  • 请求者扫描驾驶员 AID 屏幕上的二维码。
  • 请求者对扫描的 QR 码进行解码并比较密码是否匹配。
  • 相同的密码欢迎请求者并解锁车门。
 
pYYBAGNiBL-ABOYZAABOKniIZ3M466.jpg
流程图
 

安全密码

密码短语已被证明比单字密码更安全。使用的密码最多可以有 63 个字符。当密码有效时,系统可以有一个时间间隔,超过该时间密码无效并且需要新的密码。

粒子函数

该应用程序使用 Particle 函数通过 Cloud API 函数与 Web App 进行通信。

Boron 程序定义了以下两个函数。

void setup() {    
   display.begin();    
    .    
    .    
    .    
   Particle.function("safeRyder",setQRcode);    
   Particle.function("confirmSR",setAccessConfirm);    
}

setQRcode 接收客户发送的密码,创建二维码并显示在屏幕上。

int setQRcode(String command) {    
 qrcode.create(command);    
 return 0;    
}

当密码匹配二维码并验证客户身份时,调用 setAccessConfirm 函数。然后屏幕会显示一个绿色圆圈和一条欢迎消息。

int setAccessConfirm(String command)    
{    
 int width = display.width();    
 int height = display.height();    
 display.fillScreen(ILI9341_BLACK);    
 display.fillCircle(width/2,height/3,width/3,ILI9341_GREEN);    
 display.setCursor(width/5, (height/3)*2+30);    
 display.setTextColor(ILI9341_WHITE);      
 display.setTextSize(4);    
 display.println("Welcome");    
 return 0;    
}

云 API

HTML5 代码使用云 API 和 JSON 调用注册函数。下面的 pingParticle 函数使用网址打开一个 http 请求。请注意 deviceId: 和 token: 必须替换为您的 deviceId 和 token,您可以在 Particle 仪表板中找到它们。

另外,请注意,为了使用 JSON 格式,您必须定义一个标头来标识您请求的内容类型。这是您用于传递令牌的标头的附加内容。ping 命令发送包以检查设备是否在线和连接。

请注意,PUT 用于 ping 命令。

function pingParticle()    
{    
   var xhttp = new XMLHttpRequest();    
   xhttp.onreadystatechange = function() {    
       if (this.readyState == 4 && this.status == 200) {    
           deviceInfo = this.responseText;    
       }    
   };    
   xhttp.open("PUT", "https://api.particle.io/v1/devices/deviceId:/ping", false);    
   xhttp.setRequestHeader("Authorization", "Bearer token:");    
   xhttp.setRequestHeader("Content-Type", "application/json");    
   xhttp.send();    
}

The以下函数 getDeviceInfo 请求设备的一般信息。请注意,回调函数将响应分配给 deviceInfo 全局变量。然后对该变量进行 JSON 解码以访问所需信息,例如设备名称。

请注意,a GET 用于获取设备信息。

function getDeviceInfo()    
{    
   var xhttp = new XMLHttpRequest();    
   xhttp.onreadystatechange = function() {    
       if (this.readyState == 4 && this.status == 200) {    
           deviceInfo = this.responseText;    
       }    
   };    
   xhttp.open("GET", "https://api.particle.io/v1/devices/deviceId:", false);    
   xhttp.setRequestHeader("Authorization", "Bearer token:");    
   xhttp.setRequestHeader("Content-Type", "application/json");    
   xhttp.send();    
}

callParticle 函数调用设备中定义的 Particle 函数。它使用 JSON 格式发送函数的参数,在本例中为密码。请注意,它使用 AID 的令牌和 deviceId。

请注意,POST 用于调用 Particle 函数。

function callParticle(msg2Send)    
{    
   var xhttp = new XMLHttpRequest();    
   var txtSCode = document.getElementById('txtSafeCode');    
   var sendData = txtSCode.value;    
   xhttp.onreadystatechange = function() {    
       if (this.readyState == 4 && this.status == 200) {    
           document.getElementById("btnContinue").style = "visibility:visible";    
           document.getElementById("btnSendCode").style = "visibility:hidden";    
       }    
   };    
   xhttp.open("POST", "https://api.particle.io/v1/devices/"+deviceId+"/safeRyder", false);    
   xhttp.setRequestHeader("Authorization", "Bearer "+token);    
   xhttp.setRequestHeader("Content-Type", "application/json");    
   xhttp.send("{\"arg\": \""+sendData+"\"}");    
}

下面的函数是库解码二维码后的回调注册函数。请注意,我们使用 sessionStorage 函数将密码从一个网页传递到相机控制网页。该函数向 AID 设备发送确认命令。

qrcode.callback = function(data) {    
   var output = document.querySelector("output");    
   output.innerHTML = "QR Code Data 2: " + data;    
   var sendData = window.sessionStorage["passphrase"];    
   if (data == sendData)    
   confimCodeParticle();    
}

这是通过调用confirmSR Particle 函数将确认POST 到AID 设备的函数。

请注意,POST 用于调用 Particle 函数。

function confimCodeParticle()    
{    
   var xhttp = new XMLHttpRequest();    
   xhttp.open("POST", "https://api.particle.io/v1/devices/"+deviceId+"/confirmSR", false);    
   xhttp.setRequestHeader("Authorization", "Bearer "+token);    
   xhttp.setRequestHeader("Content-Type", "application/json");    
   xhttp.send("{\"arg\": \"\"}");    
}

网络应用

Web App 是一个 HTML5/JavaScript 程序,它与 AID 设备建立通信,发送密码,从 AID 设备读取二维码并确认密码匹配。

在三星 Edge S7 手机中使用 Chrome 来运行 Web 应用程序。

下面的网页显示了主界面。该页面尝试使用收到的设备 ID 和令牌与 AID 设备建立通信。如果无法通信,界面中会显示 Ping 按钮。这使用户有机会再次尝试通信链接。

 
pYYBAGNiBMOAFVPfAAENGqNsB7g621.jpg
如果尚未建立通信链接,请按 Ping
 

建立通信链路后,Ping 按钮消失,并显示从通信链路读取的 AID 名称和状态

 
poYBAGNiBMyAbLS_AAEHVxTUyWk432.jpg
输入密码并按发送
 

输入您的唯一密码,然后按发送密码。该页面会将密码发送到 AID 设备(生成二维码的地方)并返回成功状态。

 
poYBAGNiBNCAYql3AAEDE6TH200824.jpg
按继续
 

Send Passphrase 按钮​​被隐藏并显示 Continue 按钮。按继续按钮访问读取二维码扫描页面。

 
poYBAGNiBNSAZb8yAAGBObw90WE152.jpg
开始实时预览
 

扫描二维码页面如上图所示。车辆到达车窗后,AID 附在车窗上,按下启动摄像头按钮激活车载摄像头,聚焦 AID 设备上显示的 QR 码,然后按下拍摄快照。

 
pYYBAGNiBNqAD7CPAAIbHC4115w619.jpg
系统解码二维码密码
 

然后该页面处理 QR 码并比较发送的密码。如果两者都匹配,则它会向 AID 设备发送一条确认消息,该设备会通过显示带有欢迎消息的绿色圆圈来响应。

有时相机的使用无法按预期工作,并且无法解释 QR 码。图像格式的设置可能会出现问题,如果是这种情况,请按选择文件,在三星 S7 中会显示通过相机或浏览选择文件的菜单。选择相机并拍照,系统将拍摄该图像并处理二维码。

二维码

用于处理 QR 码的库取自 Lazar Laszlo(Web 应用程序)和 Anun Panya(AID 应用程序)。Anun Panya 的库经过修改以支持粒子板和 Adafruit TFT 2.4 触摸屏监视器。还允许在 QR 码显示上使用缩放系数。

援助应用

AID App 非常简单。它基本上基于几个粒子函数,这些函数定义了客户触发的事件。如粒子函数一节所示,这两个函数定义的一个是显示客户发送的密码,第二个是确认密码已被验证。

产品、车队和客户

该系统可以很容易地扩展到产品。客户将共享连接到产品的所有设备,并且只与接受驱动程序服务请求的设备对话。然后可以根据实际安装 AID 设备的驱动程序的地理位置和客户请求服务的位置对设备进行分组。

粒子仪表板在创建产品时提供这些功能。当请求被批准时,产品服务将 AID 设备 ID、名称和访问令牌发送到设备。客户接收这些信息并与 AID 建立直接通信链接。

客户未连接到 AID 设备,但在收到信息时无法篡改 ID。

结论

该系统在提高骑手的安全性和防止有人冒充您的骑行方面表现出可喜的表现。

该系统还可用于从机场接人的豪华轿车服务,或与​​我们从未接触过的人或服务的任何会议,例如杂货店送货服务。

未来的工作预见了一种为服务正确收费的方法。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !