隐藏可连接的外围设备
Hide a connectable peripheral device
我打算编写一个蓝牙智能外围设备,但我不太清楚如何实现它。
外设只能连接一台中央设备。是否可以在(一般可连接)广告(使用广告数据)期间告诉这个外围设备不接受来自所有人的连接?
显然,外围设备在首次连接之前必须 "public"(对任何中央设备可见且可连接),但之后它只对与该中央设备的连接感兴趣。这不是隐私或安全问题;我只是尽量不污染其他扫描中心设备的扫描结果。
我正在阅读 Robin Heydon 的书 "Bluetooth Low Energy - the developers handbook",其中介绍了一般的 Bluetooth Smart。它提到 "Flags AD" 广告数据。这可能是我要找的吗?书中还提到 "bonding" 我理解这只是一种长期的安全关系。我不需要加密 link、私有地址或签名写入,但在我的情况下是否建议使用绑定?
由于写完这个问题,我对蓝牙LE有了更多的了解,而且没有人回答,所以我在这里写一个答案。
两个设备之间的长期关系是通过绑定来实现的。绑定导致两个设备交换并保存密钥,这些密钥将用于进一步的连接以相互验证。此外,密钥还用于加密线路。
如果一个通用的广告外围设备想要针对一个特定的中心,它会使用广告数据来实现。 Core Specification Supplement (CSS) v6 有两种数据类型可用于此目的:Public 目标地址 (1.13) 和 随机目标地址 (1.14)。或者,作为开发人员,您可以按照自己的方式将任何您喜欢的内容添加到 制造商特定数据 中。
由于广告外围设备针对特定设备,因此它可能会阻止来自其他中央设备的连接。为此,请使用白名单。将目标中心的地址放入白名单,设置过滤策略只允许白名单中的设备连接,然后开始广播。但是有一个问题:外设需要解析中央的地址以确保它是之前绑定的地址。在蓝牙 4.2 之前,这必须手动完成(在应用程序中)。取而代之的是 4.2 规范 does this automatically for you: 将键中心也放入解析列表中,Link 层也将进行解析。
我打算编写一个蓝牙智能外围设备,但我不太清楚如何实现它。
外设只能连接一台中央设备。是否可以在(一般可连接)广告(使用广告数据)期间告诉这个外围设备不接受来自所有人的连接?
显然,外围设备在首次连接之前必须 "public"(对任何中央设备可见且可连接),但之后它只对与该中央设备的连接感兴趣。这不是隐私或安全问题;我只是尽量不污染其他扫描中心设备的扫描结果。
我正在阅读 Robin Heydon 的书 "Bluetooth Low Energy - the developers handbook",其中介绍了一般的 Bluetooth Smart。它提到 "Flags AD" 广告数据。这可能是我要找的吗?书中还提到 "bonding" 我理解这只是一种长期的安全关系。我不需要加密 link、私有地址或签名写入,但在我的情况下是否建议使用绑定?
由于写完这个问题,我对蓝牙LE有了更多的了解,而且没有人回答,所以我在这里写一个答案。
两个设备之间的长期关系是通过绑定来实现的。绑定导致两个设备交换并保存密钥,这些密钥将用于进一步的连接以相互验证。此外,密钥还用于加密线路。
如果一个通用的广告外围设备想要针对一个特定的中心,它会使用广告数据来实现。 Core Specification Supplement (CSS) v6 有两种数据类型可用于此目的:Public 目标地址 (1.13) 和 随机目标地址 (1.14)。或者,作为开发人员,您可以按照自己的方式将任何您喜欢的内容添加到 制造商特定数据 中。
由于广告外围设备针对特定设备,因此它可能会阻止来自其他中央设备的连接。为此,请使用白名单。将目标中心的地址放入白名单,设置过滤策略只允许白名单中的设备连接,然后开始广播。但是有一个问题:外设需要解析中央的地址以确保它是之前绑定的地址。在蓝牙 4.2 之前,这必须手动完成(在应用程序中)。取而代之的是 4.2 规范 does this automatically for you: 将键中心也放入解析列表中,Link 层也将进行解析。