术语:
Medium access control (MAC) protocol
FHS: Frequency Hop Synchronization
Organizationally Unique Identifier (OUI)
每一个蓝牙设备都会被分配一个唯一的48-bit的蓝牙地址(BD_ADDR),也叫蓝牙MAC地址,用来识别唯一的蓝牙设备。
对于使用BR/EDR物理通道的经典蓝牙来说,其实用的是蓝牙public地址。
该地址应是根据IEEE 802-2014标准第8.2节("通用地址")创建的48位扩展唯一标识符(EUI-48)。
标准地址: IEEE SA - IEEE 802-2014
里面内容如下:
Universal addresses / 通用地址
- 概念和概述
通用地址的概念是基于一个网络的所有潜在成员都需要有一个唯一的标识符。通用地址的优点是,如果所有的站都遵守规则,并且网络的安全性能够防止MAC地址的恶意欺骗,那么拥有这种MAC地址的站就可以连接到世界上的任何IEEE 802网络,并保证MAC地址是唯一的。
通用地址是一个全球唯一的MAC地址。IEEE注册机构(RA)已经规定了两种不同长度的通用地址:48位扩展唯一标识符(EUI-48)和64位扩展唯一标识符(EUI-64)。
- 通用地址的分配
IEEE RA负责定义和执行通用地址的管理程序。IEEE RA也被ISO/IEC指定为ISO/IEC 8802系列标准的注册机构。定义程序的责任由IEEE注册授权委员会履行,该委员会由IEEE标准协会理事会授权。
IEEE RA通过分配不同长度的标识符,可以创建通用地址,即EUI-48和EUI-64,如下表所示:
IEEE分配的MAC地址块类型分三种,MA-L、MA-M和MA-S。
以MA-L为例,一个公司分配了一个MA-L的地址,其值是一个24-bit的公司ID,如果是EUI-48的标识符,那留给此公司可用于分配标识符的块大小就是2^24,如果是EUI-64,可分配的块大小就是2^40。
这三种不同的MAC address,就是可分配的标识符多少是不同的,MA-L是最多的。
MA-L的结构,分配了3个字节的公司ID。
MA-L、MA-M和MA-S的第一个字节结构一致,最低位LSB(least significant bit)是individual/group (I/G) 地址位。LSB下一个位表示universal/local (U/L)地址位。
I/G地址位用于识别目标MAC地址是一个单独的MAC地址还是一个组MAC地址。如果I/G地址位为0,它表示MAC地址字段是一个单独的MAC地址。如果该位为1,则MAC地址是一个组MAC地址,它识别为一个或多个(或所有)连接到IEEE 802网络的站。像所有站广播的MAC地址是一个特殊的组MAC地址,全部为1。
U/L位表示MAC地址是由本地还是通用管理员分配的。通用地址的U/L位被设置为0。如果U/L位被设置为1,其余的位(即除了I/G和U/L位以外的所有位)都是本地管理的,不应该期望满足IEEE RA分配值的唯一性要求。
一个通用地址由两部分组成:前导位(24、28或36)由IEEE RA分配,U/L位设为零,其余位由该受让方分配。下图中显示了EUI-48的一个例子。如果所示,MA-M和MA-S分配的地址使用LSB在左侧显示的情况下,看起来是不连续的,要注意。
I/G和U/L位信息,是占用IEEE分配的OUI(organizationally unique identifier)信息块。
在IEEE 802.3的网络中,每个字节都是LSB的位先传输。
所以上图的写法,反应的是实际传输的顺序,就是Bit-reversed representation表示。但实际数值表示是上面的十六进制表示法。
EUI-64的例子如下图:
- 各组织的分配
IEEE不打算向任何组织分配额外的MA-L、MA-M或MA-S,除非该组织已经用完了已经分配给该组织的地址块。
需要注意的是,从MA-L、MA-M或MA-S创建的通用地址不应该被用于会导致大量跳过的情形(例如,作为产品标识使用在公司库存管理程序)。IEEE要求各组织不要滥用剩余位的分配,从而不必要地耗尽该块。有足够的标识符来满足大多数人的长期需求,甚至在批量生产中;然而,没有一个地址空间是无限的。
一个受让人用来确保其没有两个站携带相同的通用地址的方法,在本标准中没有定义。然而,全世界的网络用户都希望有唯一的地址。因此,确保用户的期望和要求得到满足的最终责任在于提供此类站点的组织。
- 地址分配的唯一性
建议IEEE 802网络的每个不同的连接点都有自己独特的EUI-48或EUI-64。因此,通常情况下,一个IEEE 802网络适配器卡(或者,例如,主板上的同等芯片或芯片组)应该有一个唯一的EUI-48或EUI-64,用于它在特定时间内可以支持的每个IEEE 802网络附件。
注意-虽然一些实施方案使用单一的EUI-48或EUI-64来识别所有系统对IEEE 802网络的连接点,这种方法本身并不符合IEEE 802.1D MAC桥接的要求。
-------------------------------------------
所以,经典蓝牙中创建一个有效的EUI-48需要从IEEE注册机构获得以下MAC地址块类型之一:
• MAC Address Block Large (MA-L)
• MAC Address Block Medium (MA-M)
• MAC Address Block Small (MA-S)
一般情况下,是MA-L类型,及3个字节的组织ID。
不过蓝牙地址的表示,和上面的IEEE 802-2014好像不太一样,上面标准,是低位3个字节是IEEE分配的,而蓝牙地址是高位三个字节是IEEE分配的。
比如一个蓝牙地址aa:bb:cc:dd:ee:ff ,aa:bb:cc是组织ID,是三个MSB字节。当作为蓝牙地址存放或传输时,是从低字节,也就是0xff开始的,这个在使用中要注意。
比如char BD_ADDR[6] 这个结构用来存储蓝牙地址,BD_ADDR[0]就是0xff,但显示这个地址便于人们阅读,就要倒过来。
下图说明了 LAP、UAP 和 NAP 如何映射到 EUI-48。
下图中的位模式是一个BD_ADDR的例子。
UAP - Upper Address Part
NAP - Non-significant Address Part
LAP - Lower Address Part
NAP和UAP组成了OUI组织ID。LAP是厂商自己使用,用来分配给每个不同的蓝牙设备作为标识。
OUI是向IEEE申请才能注册,要花钱的。大公司比如苹果产品很多,就会申请很多OUI。
可以通过下面网址查询一个蓝牙地址所属的组织或公司名:
Bluetooth MAC Address Lookup | Bluetooth MAC Address Changer for Windows
- 保留地址
一个由64个连续的LAP组成的块被保留用于查询操作;一个所有设备通用的LAP被保留用于一般查询,其余63个LAP被保留用于特定类别设备的专门查询(见分配的号码)。不管UAP和NAP的内容如何,都使用相同的LAP值。因此,这些LAP都不能成为用户BD_ADDR的一部分。保留的LAP地址是0x9E8B00-0x9E8B3F。一般的查询LAP是0x9E8B33。所有地址的LSB都在最右边的位置,十六进制的符号。每当使用一个保留的LAP地址时,default check initialization (DCI)被用作UAP。DCI被定义为0x00(十六进制)。
-------------------------------------------
而对于BLE,既可以使用public地址,也可以使用random随机地址。
但所有蓝牙设备必须使用其中一种类型:public公共地址或随机静态地址。
下一类地址(私人地址)是可选的,仅用于解决隐私问题(即设备可以在公共或随机静态地址之外使用此类型)。
随机地址是一个标识符,它要么被编程到设备中,要么在运行时生成(取决于子类型)。
随机地址的两个子类型是:
- 随机静态地址
- 随机私有地址
- 随机静态地址
这种特定类型的蓝牙地址作为公共地址的流行替代品,因为使用它不涉及任何费用。
随机静态地址可以用两种方式之一来使用。
- 它可以在设备的生命周期内被分配和固定。
- 它可以在启动时改变
然而,它不能在运行时改变。
随机静态地址的格式看起来像这样:
- 1和1被固定在MSB开头两位中
- 其余46位由开发者/制造商随机选择
- 随机私有地址
有两种类型的随机私有地址:可解析和不可解析。随机私有地址专门用于保护蓝牙设备的隐私,以隐藏身份,并防止跟踪设备。
让我们来看看这两种类型。
- 可解析的随机私有地址
可解决的随机私人地址的目的是防止恶意的第三方跟踪蓝牙设备,同时仍然允许一个或多个受信任方识别感兴趣的蓝牙设备。
一个可解析的随机私有地址是使用与受信任设备共享的密钥而能够"可解析 "的。这个密钥被称为IRK(身份解析密钥Identity Resolving Key)。
该地址最初是用这个IRK和一个随机数生成的。
那么,是什么让一个设备被另一个设备 "信任"?
在这种情况下,一个受信任的设备就是一个绑定的设备。绑定是两个BLE设备配对后发生的可选步骤。绑定过程涉及到每个相互绑定的设备对密钥的存储。绑定还允许两个设备在配对时的原始连接之后进行无缝连接配对。两个绑定的BLE设备所交换的密钥之一是每个参与设备的IRK。
这种类型的地址会定期改变。根据蓝牙规范的建议,它每15分钟改变一次(这在所有iOS设备中都很明显)。
一个可解析的随机私人地址由以下字段组成:
- 0和1被固定在最高有效位(MSB)。
- 接下来的22位是随机产生的
- MSB的24位构成了prand。
- 较低的24位代表一个哈希值,该值是用prand和IRK生成的。
- 不可解析的随机私有地址
另一种类型的随机私有地址是不可解析的随机私有地址。
这种类型的地址也是周期性变化的。然而,与可解析的地址不同,它不能被任何其他设备解析。这种类型的地址的唯一目的是防止被任何其他BLE设备追踪。
这种类型不是很常见,但有时在信标应用中使用。
不可解析的随机私有地址的格式如下:
- 0和0被固定在MSB
- 剩下的46位是随机选择的
BLE中的隐私
隐私是蓝牙设备用户的主要关注点,需要认真对待。在这种情况下,我们所说的隐私是指确保不受信任的各方无法通过蓝牙地址追踪设备。
如果没有谨慎的措施,这个地址就会被用来追踪用户。幸运的是,BLE提供了保护隐私的功能来防止这种攻击。
蓝牙设备的隐私是通过使用可解析的私人地址实现的。这种类型的地址需要两个蓝牙设备的绑定,以便一个能解析另一个的地址。
以下是为BLE设备实现隐私的步骤:
- 一个被称为IRK(身份解析密钥)的密钥被用来生成和解析可解析的随机私人地址。
- 每个设备在本地生成的IRK要么是随机的,要么是在制造过程中分配的。
- 在绑定期间,每个设备将其对等的IRK存储在所谓的解析列表中。
- 然后,该IRK被用来解析对等设备的私有地址。例如,当它在以后的时间里收到对等设备的广告包时。
- 这是通过验证包含在私有地址中的哈希值与本地哈希值计算的输出值相匹配来完成的,具体方法如下:。
hash = ah(IRK, prand)
- 由于设备拥有存储在本地的IRK,并且可以访问作为私有地址一部分的prand,该地址包含在BLE数据包中,因此它可以进行这种计算。
值得注意的是,IRK并不是用来揭示对等体的身份地址(公共地址或随机静态地址)的,而只是用于验证目的。
参考:
What is Bluetooth Address (BD_ADDR) | Bluetooth MAC Address Changer for Windows
Bluetooth Addresses & Privacy in Bluetooth Low Energy - Novel Bits