雨雪随行 发表于 2019-12-15 15:52:46

求教共享单车开蓝牙开锁更快原理

不知道大家有没有发现,共享单车你开锁的时候会让你打开蓝牙,你会发现打开蓝牙开锁会非常快。也就是说,蓝牙通信绕过了GPRS通信实现了开锁。但是,正常蓝牙通信是要先连接再通信的,难道共享单车能迅速的连接通信并断开吗?
还有在ios13以后,即使你被盗的手机断了联网,苹果依然可以通过附近的苹果设备上传你的位置打到定位和提示的功能,所以更坚信了蓝牙不连接就能通信的想法!谁知道其中的原理 能解释一下吗?

闪客 发表于 2019-12-15 15:58:56

蓝牙BLE模式

yelong98 发表于 2019-12-15 16:04:10

广播模式?

bitter 发表于 2019-12-15 21:12:32

iBeacon模式?

雨雪随行 发表于 2019-12-18 15:15:31

https://www.jianshu.com/p/ddb0b92898fb
蓝牙开锁估计就是发送广播包的,还有之前的小鸣单车不用连蓝牙就能开锁,估计就是广播包的原理。单车接受合适的广播包就能开锁了。
同理苹果的找回可能是用了自家的 iBeacon 或者也是广播包的模式,有大神研究过没吃,加一个监听设备监听两台iPhone蓝牙之间是否发送信息

罗小蘑菇 发表于 2019-12-18 15:34:53

广播报文,把开锁的命令加密到广播报文,车锁的蓝牙监听到就开了

hawkinsky 发表于 2019-12-18 15:44:58

想到华为的手表,不用连上蓝牙就可以获得数据(在手机里是看不到连上蓝牙的,但手机蓝牙开关得开着),估计也是蓝牙的广播包方式吧

sunny_82 发表于 2020-9-10 07:34:08

那就是说车锁具备独立解密验证能力,不需要与服务器交流?

gongxd 发表于 2020-9-10 10:45:13

sunny_82 发表于 2020-9-10 07:34
那就是说车锁具备独立解密验证能力,不需要与服务器交流?

蓝牙发送的密钥也要从服务器获取,而且很多是滚动码,没法重放

hello2020 发表于 2020-9-10 12:25:17

曾经做过共享单车锁,每一把锁都是独立密钥,和手机蓝牙连接上后通讯,还是很快的。

雨雪随行 发表于 2020-9-16 08:38:57

hello2020 发表于 2020-9-10 12:25
曾经做过共享单车锁,每一把锁都是独立密钥,和手机蓝牙连接上后通讯,还是很快的。 ...

蓝牙没有连接后来了解好像只是发送了类似广播包一样的,但是没有人实锤

wjd40 发表于 2020-9-18 10:21:15

微信小程序上用的的话,看到发送广播,好像没接收的?可以用来互相通信反馈吗?
https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.startAdvertising.html

Appcat 发表于 2020-9-18 10:45:13

雨雪随行 发表于 2020-9-16 08:38
蓝牙没有连接后来了解好像只是发送了类似广播包一样的,但是没有人实锤 ...

自己所在公司是做共享单车锁的,蓝牙这个东西,BLE4.2还是飞快的,蓝牙与主机MCU相互验证,手机从服务器申请到token,
连接到BLE模块,送出token,BLE唤醒主MCU,请求校验,校验成功MCU执行开锁动作。大概流程就是这样,IOS的开锁时间基本在2秒以内,
安卓就比较复杂,不同版本不一样,不同定制深度都不一样,尤其以深度定制过的系统最为操蛋(比如菊花手机)。遇到时间长怎么办,
播放音效来转移用户注意力,用户就对这个时间稍长一些无感了。音效当然是锁体播放的,不手机播放的,音效还能空中下载。

hongfadg 发表于 2020-9-20 22:22:00

Appcat 发表于 2020-9-18 10:45
自己所在公司是做共享单车锁的,蓝牙这个东西,BLE4.2还是飞快的,蓝牙与主机MCU相互验证,手机从服务器 ...

你好,有个问题请教一下,mcu用蓝牙收到手机发来的token后,是直接在本地检验还是mcu要从服务器请求一个token做对比完成检验呢?谢谢!

Appcat 发表于 2020-9-21 10:36:59

hongfadg 发表于 2020-9-20 22:22
你好,有个问题请教一下,mcu用蓝牙收到手机发来的token后,是直接在本地检验还是mcu要从服务器请求一个t ...

为了开锁速度,MCU直接自己校验了,不再连接服务器,所以整个开锁的过程MCU不会连接服务器,而且2G模块也不开机(保持低功耗)。但是MCU校验时使用的密钥表是上次连接服务器时就更新过了。完成开锁后,MCU才会连接服务将之前暂存的各种数据和这次开锁信息送上去。

hongfadg 发表于 2020-9-21 12:37:40

Appcat 发表于 2020-9-21 10:36
为了开锁速度,MCU直接自己校验了,不再连接服务器,所以整个开锁的过程MCU不会连接服务器,而且2G模块也 ...

谢谢回复,大师能否抽空帮我解答下一个问题,再次表示感谢.

就是我有一个,单独的蓝牙产品,,老板想的效果是,只允许自己的APP来连接,控制. 防止别人破解协议控制.

我的思路是,每个蓝牙里面都保存一个不同的随机数,再把这个随机数和蓝牙地址 保存一份到去服务器.

手机连接蓝牙时服务器会根据这个蓝牙地址 找到对应的随机数 做 MD5 加密后,,返回给蓝牙,,如果蓝牙 对比MD5加密后的数不同,则断开连接.

大师看我的方法,是否有漏洞,,或者有什么更好的建议给下.

albert_w 发表于 2020-9-21 13:11:18

hongfadg 发表于 2020-9-21 12:37
谢谢回复,大师能否抽空帮我解答下一个问题,再次表示感谢.

就是我有一个,单独的蓝牙产品,,老板想的效果是 ...

我知道你算法你就玩完儿哪,嗅探通信得到你的md5,下次重放就好了。 如果锁不联网,可以让锁先发一个随机数给app,app把随机数和隐藏序列号(密码)串起来做MD5. 这就是挑战-响应。

这类事情,有一条就是验证消息不允许重放。

Appcat 发表于 2020-9-21 13:43:56

本帖最后由 Appcat 于 2020-9-21 19:25 编辑

hongfadg 发表于 2020-9-21 12:37
谢谢回复,大师能否抽空帮我解答下一个问题,再次表示感谢.

就是我有一个,单独的蓝牙产品,,老板想的效果是 ...

你的方案可能出现的漏洞17楼已经说了。具体安全措施的设计与你的产品形态,实际应用要求直接相关,不存在一统天下的安全设计,也不是往上堆各种算法或者专用模块就合适的。这里要结合具体应用来设计。
你的问题在于,随机数是什么概念,由谁来产生,而且随机数还要上传服务器,这个效率也太低了。还有MD5不是加密算法,只是签名算法。所以你的加密实际意义不大,如果使用AES等真正的加密算法,代价会不会
太大?
给你举个例子,传输数据不加密,双方设计一个可以同步的密钥表,蓝牙验证发起方生成行列a,b,手机拿到a,b根据自己的密钥表计算出结果发给蓝牙,蓝牙选取的a和b,自己知道结果,所以一比对就知道
验证是否通过了。蓝牙每次验证a,b时会标注密钥表里对应的项已经使用过,下次不再使用。这样的好处是,每次验证都不一样,防止枚举攻击,同时也能主动发现攻击行为,记录下攻击行为特征,然后可以
选择锁定或者报警的手段。选取一个合适大小的密钥表,在表项全部用完之前就可以更换密钥表。这样所有的工作就集中到了设计合适的密钥表,如何安全的传输存储密钥表,这时再上高级的安全手段,代价
就小很多,因为密钥表不是经常更换的。而且这个办法不依赖于具体的硬件方案,可移植性非常好。

hongfadg 发表于 2020-9-21 14:10:50

Appcat 发表于 2020-9-21 13:43
你的方案可能出现的漏洞117楼已经说了。具体安全措施的设计与你的产品形态,实际应用要求直接相关,不存 ...

明白,谢谢!

hongfadg 发表于 2020-9-21 14:11:51

albert_w 发表于 2020-9-21 13:11
我知道你算法你就玩完儿哪,嗅探通信得到你的md5,下次重放就好了。 如果锁不联网,可以让锁先发一个随机 ...

谢谢指点!
页: [1]
查看完整版本: 求教共享单车开蓝牙开锁更快原理