蓝牙地址(Bluetooth Address),又称为蓝牙设备地址(Bluetooth Device Address,BD_ADDR),是蓝牙设备在无线通信中用于唯一标识自身的一种地址。这个地址通常是一个 48 位的唯一标识符,采用 EUI-48(Extended Unique Identifier 48-bit)格式。
通常以六组十六进制数字表示,每组包含两个字符,中间以冒号或连字符分隔。例如,一个蓝牙地址的格式可能是:00:1A:2B:3C:4D:5E。
为区分不同的蓝牙设备,一般使用蓝牙地址和地址类型进行标识蓝牙设备。地址类型包括public device address 和 random device address,两者均为 48 bit长度。其中,经典蓝牙(BR/EDR)设备只有 public 地址,BLE 设备可以使用其中一种也可以使用两种。
对经典蓝牙来说,蓝牙地址应是一个符合 IEEE 802-2014 标准第 8.2 节(“通用地址”)的 48 位扩展唯一标识符(EUI-48)(IEEE SA - IEEE 802-2014)。
创建有效的 EUI-48 需要从 IEEE 注册管理机构获得以下 MAC 地址块类型之一。
• MAC Address Block Large (MA-L)
• MAC Address Block Medium (MA-M)
• MAC Address Block Small (MA-S)
具体申请详情请参考 IEEE SA - Registration Authority,也就是公司向 IEEE 申请购买一个唯一的蓝牙地址号段,一般是 3 字节的长度。
Welcome to The Public Listing For IEEE Standards Registration Authority 这里可以查看已经注册的公司信息,包括公司号段(company id)和公司地址信息。
BLE 设备大部分使用随机地址,一方面随机地址不需要花钱购买,而且私密性更好,不容易被追踪。
static address 是随机生成的 48-bit 地址,有如下特点:
1. 低位46bits 随机数,不能全为0,也不能全为1。
2. 最高两个 bit 为 “11”。
3. 每次重新上电都可以改变,上电周期内保持不变
与 Public Device Address 不同,Private Device Address 是在设备运行时动态生成的,因此具有更高的随机性和隐私性。
Private Device Address 分为两种类型:
这种地址允许其他设备在一定条件下解析出设备的真实身份。通过一个随机数和 IRK( identity resolving key) 加密生成。
RPA 有如下特点:
2. 低位24bits,是IRK和 随机数高prand通过hash运算hash = ah(IRK, prand)得到的。
3. RPA 最终是由 prand 和 hash 连接起来组成的, randomAddress = prand || hash
4. 可以周期变化,变化周期可以通过 host 指定,一般默认是 15 分钟
这种地址不提供身份解析的能力,其他设备无法通过这个地址获知设备的真实身份。这种地址适用于一些场景,例如广告中使用的地址,旨在提供更高的隐私保护。
NPRA有如下特点:
1. 低位46bits 随机数,不能全为0,也不能全为1。
2. 最高两个 bit 为 “00”。
解析 RPA 地址需要用到配对过程中对端分发的 IRK,然后使用同样的 hash 算法,将 IRA 和RPA中的 prand 部分作为入参进行计算localHash = ah(IRK, prand),最后将计算出来的 lcoahHash跟 RPA 地址中的 hash 部分进行比较,如果相同则认为解析成功,否则则失败。
non-resolvable private address 是不可解析的
大家可能在以前的core spec 中看到 bluetooth address 的相关介绍,有提到company id 的概念,也就是本文中提到的的public 地址的蓝牙地址号段,这个要跟 Link Layer 消息 LL_VERSION_IND的company_identifer区别开来:
这个是向 SIG 申请的一个 2字节长度的 Id,一般是用来表明这个蓝牙芯片是哪个厂商的,详情请参考 Assigned Numbers
对于public 地址,产品厂商一般会在产线根据自己购买的号段生成一个地址
对于 random地址,一般是生成一个 static device address 地址,然后将地址写入flash的指定位置,在开机上电后去读取地址然后写给 controller,也有时候在读取的时候发生读取失败或者读到非法的地址值,这个时候可能会重新随机生成一个地址
以上是工作过程中的一点总结和经验分享,有错误之处请指出,也欢迎一起探讨。
BLE Core Specification 5.4