Bluetooth 在Bluez BLE信标上设置密码

Bluetooth 在Bluez BLE信标上设置密码,bluetooth,bluetooth-lowenergy,bluez,bluetooth-gatt,Bluetooth,Bluetooth Lowenergy,Bluez,Bluetooth Gatt,我在linux机器(Ubuntu14.04)上运行bluez5.52中的BLUE信标,使用默认值,信标使用tools文件夹中提供的。以下是我运行以设置信标的命令: 终端1: ./gatt-service 终端2 sudo ./btmgmt add-adv -u 180d -u 180f -d 080954657374204C45 1 我可以很容易地使用android中的BLE扫描仪应用程序连接和断开与信标的连接。 我想做的是为信标设置一个密码,以便我是唯一可以连接到它的人。到目前为止,我还无

我在linux机器(Ubuntu14.04)上运行bluez5.52中的BLUE信标,使用默认值,信标使用tools文件夹中提供的。以下是我运行以设置信标的命令:

终端1:

./gatt-service
终端2

sudo ./btmgmt
add-adv -u 180d -u 180f -d 080954657374204C45 1
我可以很容易地使用android中的BLE扫描仪应用程序连接和断开与信标的连接。
我想做的是为信标设置一个密码,以便我是唯一可以连接到它的人。到目前为止,我还无法在网上找到任何有助于建立这种关系的资源。我对btmgmt和gatt服务代码有相当的了解。我正在寻找关于bluez代码中设置密码保护的部分的方向。任何线索、伪代码或部分代码都会有很大帮助。

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

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

我想我应该用更好的措辞。我想说的是一个不可预测的外围信号灯。您可以连接到它并阅读gatt服务。我认为在第一个终端中运行gatt服务是显而易见的。BLE不支持密码保护/登录机制。它提供的是配对/绑定,只有当用户同时控制两台设备时才应该成功(例如,第一台设备有显示器,另一台设备有键盘,用户应该在其他设备的键盘上输入显示的密钥,以防止中间人攻击,例如窗口外的黑客). 您可以使用以下API实现这一点:。谢谢@Emil。我还有一个问题。是否可以动态更改gatt服务?我的想法是为用户输入密码(建立连接后)公开一个写特征,如果它匹配,那么我将在其他特征中公开实际数据。请详细说明我在哪里可以找到有关“授权读取”的更多信息?我已经试着查看了代码,但是没有找到任何东西。也许一个指向要查看的代码部分或要阅读的核心规范的特定部分的指针可以帮助我更好地实现这一点。谢谢,请原谅我迟来的回答。我在Bluez库中搜索了一个等价的“授权阅读”,但没有成功。他们似乎不提供这种许可。但是看看这个方法:这个方法处理一个特征的写入,并接收一个连接句柄。您可以创建一个接受密码的特征并存储连接的句柄。然后检查同一个连接是否要访问受保护的特性,并确定它是否被允许。我尝试了你说的方法,它工作得非常好。还有一个问题。有没有办法让多个连接与btmgmt一起工作?问题似乎是Bluez在第一次连接后停止了广告。您可以尝试按照此答案解决类似问题: