繁体   English   中英

是否应该与蓝牙 LE 设备建立绑定

[英]Should one create a bond with a Bluetooth LE device

对于使用 Xamarin(Android API 21 及更高版本)的蓝牙项目,我想知道创建与蓝牙设备的绑定是否很常见。 目前的要求是:

  • 蓝牙设备使用频繁,但不是持续使用。
  • 重新连接应该尽快发生
  • 设备掉电时蓝牙地址随机变化
  • 设备名称未知、为空或随机
  • 连接已加密
  • 该连接使用需要蓝牙设备作为连接参数的上层 API。

是否应该与此设备建立绑定以“更好地”识别(作为某种缓存)或“从头开始”重新连接到设备。 在这种情况下,什么是常见的? 因此,这不是“我可以绑定”的问题,而是是否有必要绑定,或者甚至更好:什么是coorect 和工作可靠的场景。

目前我使用这样的代码(result.Device.Name 用于开发目的):

  public override void OnScanResult([GeneratedEnum] ScanCallbackType callbackType, ScanResult result)
    {

        if (result.Device.Name == "��" &&

            !_discovered &&
          result.ScanRecord != null &&
          result.ScanRecord.ServiceUuids != null &&
          result.ScanRecord.ServiceUuids.Any(x => x.Uuid.ToString().ToUpper() == uuid))
        {
            lock (_locker)
            {
                _discovered = true;
                _deviceList.Add(result.Device);
                BluetoothDiscoverySucces?.Invoke(result.Device);
            }
        }
    }

简短回答:正确、常见且可靠的方案是绑定。 绑定意味着连接是安全的,链接是可信的。 这意味着您的本地设备通常会找到远程设备,即使其地址发生变化。 出于安全和隐私原因,配对/绑定是蓝牙中的推荐做法。


长答案:自推出以来,蓝牙规范的增量版本增加了一些功能,以提高蓝牙设备的安全性和隐私性。 许多设备不允许您交换数据或正确跟踪它们,除非您已配对/绑定(绑定和配对之间的区别在于绑定,交换的密钥存储在数据库中。)

在低功耗蓝牙中,配对/绑定过程包括三个阶段:-

阶段 1 - 配对功能交换

两个连接的设备交换它们的 IO 功能(例如设备是否有键盘)、身份验证要求(例如绑定或不绑定)和支持的密钥大小。

第 2 阶段 - 身份验证和加密

使用加密算法生成密钥并用于加密链接(这对于传统和 LESC 配对是不同的,但这超出了本问题的范围)。

阶段 3 - 密钥分发

多个密钥在设备之间交换,包括 CSRK(连接签名解析密钥)、IRK(身份解析密钥)和静态地址。

对您的问题特别重要的是 IRK 和地址。 自蓝牙 v4.0 以来,一项称为LE Privacy的功能允许设备不断更改其地址以降低其跟踪能力。 恶意设备将无法跟踪实现此功能的设备,因为它实际上看起来像是一系列不同的设备。 为了解析地址,设备需要事先配对/绑定 如果远程设备包含 IRK,则它可以使用该 IRK 和随机可解析地址来导出蓝牙设备的原始地址。


所以,回顾你的标准:-

  • 蓝牙设备使用频繁,但不是持续使用。

如果您要频繁断开/重新连接,您可以与设备配对一次并存储密钥(即绑定)。 之后不再需要配对,因为在断开/重新连接时将使用相同的密钥来加密连接。

  • 重新连接应该尽快发生

连接和绑定是两件不同的事情。 无论是否实施绑定,重新连接都将花费相同的时间。 但是,一旦设备重新连接,重新加密连接需要一些时间。

  • 设备掉电时蓝牙地址随机变化

这意味着该设备正在使用 LE 隐私功能。 因此,您的设备应该与其绑定以解析私有可解析地址。

  • 设备名称未知、为空或随机

这通常是 BLE 的情况。 这些设备通常可以通过它们的地址来识别。 因此,如果您的设备之前已绑定,您将能够解析更改地址并识别远程设备。

  • 连接已加密

如果不先配对,您将无法实现加密连接(按照上述 3 个阶段)。 通过绑定,您将密钥存储在数据库中,从而确保您将来可以使用它们来重新加密连接,而无需经过配对阶段。

  • 该连接使用需要蓝牙设备作为连接参数的上层 API。

我不确定这意味着什么,但与绑定要求无关。


有关该主题的进一步阅读,我建议访问蓝牙规范版本 5.0,第 3 卷,第 H 部分,第 2 部分安全管理器(第 2295 页)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM