【问题标题】:Setup password on a Bluez BLE beacon在 Bluez BLE 信标上设置密码
【发布时间】:2021-02-08 22:45:03
【问题描述】:

我在 linux 机器 (ubuntu 14.04) 上使用默认的 gatt-service 和使用工具文件夹中提供的 btmgmt 的信标在 bluez5.52 中运行 BLE 信标。以下是我运行来设置信标的命令:

1 号航站楼:

./gatt-service

2号航站楼

sudo ./btmgmt
add-adv -u 180d -u 180f -d 080954657374204C45 1

我可以使用 android 中的 BLE 扫描仪应用轻松连接和断开信标。 我想做的是为信标设置密码,以便我是唯一可以连接到它的人。到目前为止,我一直无法在网上找到任何可以帮助进行设置的资源。我对 btmgmt 和 gatt-service 代码有很好的理解。我正在寻找有关设置密码保护的 bluez 代码部分的方向。任何线索、伪代码或部分代码都会有很大帮助。

【问题讨论】:

  • 我想我应该措辞更好。我的意思是一个ble外围信标。您可以连接到它并阅读 gatt 服务。我认为在第一个终端运行 gatt-service 很明显。
  • BLE 不支持密码保护/登录机制。它提供的是配对/绑定,只有当用户控制两个设备时才应该成功(例如第一个有显示器,另一个有键盘,用户应该在另一个上输入显示的密码设备的键盘,以防止中间人攻击,例如窗外的黑客)。你可以使用这个 API 来实现它:git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/….
  • 谢谢@Emil。我还有一个问题。是否可以动态更改 gatt 服务?我在想的是公开一个写入特征供用户输入密码(在建立连接后),如果它匹配,那么我在其他特征中公开实际数据。

标签: bluetooth bluetooth-lowenergy bluez bluetooth-gatt


【解决方案1】:

Emil 已经在 cmets 中提到了配对和绑定。这绝对可以满足您的目的,因为您将能够控制谁可以连接到您的外围设备。 BLE 特性可以要求连接的设备在读取或写入之前进行身份验证,如果设备未与您的外围设备配对,则会导致“身份验证不足错误”。 Android 应用程序能够通过根据使用的配对方法显示配对弹出窗口来处理此错误。 因此,有可能在需要配对的特性旁边具有没有安全性的特性。

如果您仍想实现您提到的密码安全性,您应该查看“授权读取”。 需要授权的特征首先收到读取请求,您可以根据自己的要求允许或拒绝它。这意味着您可以通过向一个特征发送密码来授权自己,然后允许对另一个特征的读取请求。如果您一次只接受一个连接,这会更容易。

【讨论】:

  • 您能否详细说明在哪里可以找到有关“授权阅读”的更多信息?我尝试过查看代码,但没有找到任何东西。也许指向要查看的代码部分或要阅读的核心规范的特定部分的指针将帮助我更好地实现这一点。谢谢
  • 请原谅我迟到的回答。我在 Bluez 库中搜索了相当于“授权阅读”的内容,但没有成功。他们似乎不提供这种许可。但是看看这个方法:github.com/bluez/bluez/blob/master/tools/gatt-service.c#L468 这个方法处理一个特征的写入,也接收一个连接句柄。您可以创建一个接受密码的特征并存储连接的句柄。然后检查同一个连接是否想要访问安全特性并决定是否允许。
  • 我试过你说的方法,效果很好。还有一个问题。有没有办法让多个连接与 btmgmt 一起工作?
  • 问题似乎是Bluez在第一次连接后停止了广告。您可以尝试按照这个答案来解决类似的问题:stackoverflow.com/questions/56236749/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
  • 2019-01-02
  • 2015-03-08
  • 1970-01-01
  • 2021-02-12
  • 2017-12-30
  • 2018-11-13
相关资源
最近更新 更多