像LAN连接设备的MAC地址一样,蓝牙设备也具有与每个设备关联的标识地址。对于每个BLE开发人员而言,了解蓝牙地址的工作方式都是至关重要的,尤其是当设备隐私受到关注时。

那么,什么是蓝牙地址?

蓝牙地址有时被称为蓝牙MAC地址,是一个48位值,该值唯一地标识一个蓝牙设备。在蓝牙规范中,它称为BD_ADDR

根据Bluetooth Core规范文档,Bluetooth地址主要有两种类型:公共地址和随机地址。

蓝牙设备必须使用这些类型的地址之一,并且在某些情况下,它包含两种类型的地址。

让我们看一下一个图,该图总结了可用的不同蓝牙地址类型:

android adb 获取蓝牙地址 安卓蓝牙地址_android adb 获取蓝牙地址

蓝牙地址类型

上图显示了蓝牙地址类型的层次结构。总而言之,四种蓝牙地址类型是:

  • 公开地址
  • 随机私人地址
  • 随机静态可解析静态地址
  • 随机静态不可解析静态地址

如图所示,“随机地址”和“静态地址”仅是分类,不是实现中本身使用的类型。

公开地址

蓝牙公共地址是必须在IEEE中注册的全局固定地址。它遵循与MAC地址相同的准则,并且应为48位扩展的唯一标识符(EUI-48)。

要创建有效的EUI-48,需要从IEEE注册机构获得以下MAC地址块类型之一:

  • MAC地址块大(MA-L)
  • MAC地址块中(MA-M)
  • 小型MAC地址块(MA-S)

此地址永不更改,并保证对于蓝牙设备唯一。然而,与通过IEEE获得/保留块相关的费用。

下图表示公共蓝牙地址的简化格式。


android adb 获取蓝牙地址 安卓蓝牙地址_开发人员_02



公共地址格式


  • 公司ID:由IEEE公开分配的地址部分
  • 公司已分配:内部分配的ID,作为分配块的一部分。

要了解有关IEEE分配的MAC地址块的详细信息,请参考以下链接:

随机地址

随机地址比公共地址更受欢迎,因为它们不需要向IEEE注册。随机地址是已编程到设备中或在运行时生成的标识符(取决于子类型)。

随机地址的两个子类型是:

  • 随机静态地址
  • 随机私人地址

让我们更详细地研究每种类型。

随机静态地址

这种特定类型的蓝牙地址可作为公共地址的一种流行替代方法,因为使用它无需付费。

随机静态地址可以通过以下两种方式之一使用:

  • 可以在设备的使用寿命内分配和固定它
  • 可以在启动时更改

但是,无法在运行时更改它。

随机静态地址的格式如下:


android adb 获取蓝牙地址 安卓蓝牙地址_android adb 获取蓝牙地址_03


随机静态地址格式


  • 1和1固定在最低有效位
  • 剩余的46位由开发人员/制造商随机选择

重要说明:所有蓝牙设备都必须使用以下两种类型之一:公共地址随机静态地址
下一种地址类型(Private Addres)是可选的,仅用于解决隐私问题(即,设备可以使用“公共地址”或“随机静态地址”之外的任何一种)。

随机私人地址

随机专用地址有两种类型:可解析的不可解析的。随机专用地址专门用于保护蓝牙设备的隐私,隐藏身份并防止对该设备进行跟踪。

让我们看一下以下每种类型:

可解析的随机私人 地址

可解决的随机专用地址的目的是防止恶意第三方跟踪蓝牙设备,同时仍然允许一个或多个受信任方识别感兴趣的蓝牙设备。

使用与可信设备共享的密钥,可解析的随机专用地址是“可解析的”。该密钥称为IRK(身份解析密钥)。

该地址最初是使用此IRK和一个随机数生成的。

那么,是什么使一个设备被另一个设备“信任”呢?

在这种情况下,可信设备是绑定设备。绑定是两个BLE器件配对后发生的可选步骤。绑定过程涉及由彼此绑定的每个设备存储密钥。绑定还允许两个设备在配对后在原始连接之后无缝地配对连接。由两个绑定的BLE设备交换的密钥之一是所涉及的每个设备的IRK。

这类地址会定期更改。根据蓝牙规范的建议是每15分钟更改一次(在所有iOS设备中都很明显)。

可解析的随机专用地址由以下字段组成:


android adb 获取蓝牙地址 安卓蓝牙地址_开发人员_04


可解析的随机专用地址格式


  • 0和1固定在最低有效位
  • 接下来的22位是随机生成的
  • 所述prand这些至少显著24位构成
  • 高24位表示使用prandIRK生成的哈希值

不可解析的随机专用地址

另一种类型的随机专用地址是不可解析的随机专用地址

这类地址也会定期更改。但是,与可解析地址不同,它不能被任何其他设备解析。这类地址的唯一目的是防止任何其他BLE设备进行跟踪。

这种类型不是很常见,但有时在信标应用中使用。

不可解析的随机专用地址的格式如下:

android adb 获取蓝牙地址 安卓蓝牙地址_地址格式_05

不可解析的随机专用地址格式

  • 0和0固定在最低有效位
  • 其余46位是随机选择的

BLE中的隐私

隐私是蓝牙设备用户的主要关切,因此必须予以认真对待。在这种情况下,隐私是指确保不受信任的各方无法通过其蓝牙地址来跟踪设备。

如果没有采取适当的措施,此地址可用于跟踪用户。幸运的是,BLE提供了隐私功能来防御此类攻击。

蓝牙设备的隐私是通过使用可解析的私有地址来实现的。这种地址类型需要将两个蓝牙设备绑定在一起,以便一个设备解析另一个设备的地址。

以下是实现BLE设备隐私的步骤:

  • 称为IRK(身份解析密钥)的密钥用于生成和解析可解析的随机私有地址。
  • 由每个设备在本地随机生成或在制造期间分配的IRK。
  • 在绑定期间,每个设备都将其对等方的IRK存储在一个解析列表中
  • 然后使用IRK解析对等设备的专用地址。例如,当它稍后接收到对等方的广告包时。
  • 通过根据以下等式验证专用地址中包含的哈希与本地哈希计算的输出匹配来完成此操作:

    hash = ah(IRK,prand)

android adb 获取蓝牙地址 安卓蓝牙地址_android adb 获取蓝牙地址_06


  • 由于设备将IRK存储在本地,并且可以访问作为BLE数据包中包含的私有地址一部分而包含的Prand,因此它可以执行此计算。

重要的是要注意,IRK不是用来显示对等方的身份地址,它是公共地址还是随机静态地址,而是仅用于验证目的。