深度解构 Bluetooth 设备地址

所有的 Bluetooth 设备地址 (BD_ADDR) 虽然都固定为 48-bit,但是它们细分下来却有 5 种。下面将分别讨论这 5 种 BD_ADDR。

BR/EDR 设备地址

在 BR/EDR (Basic Rate/Enhanced Data Rate) 的世界中,每个设备的 BD_ADDR 都应该是唯一的。其格式符合 EUI-48 规范:

MSBit         LSBit
+-----------------+
|     EUI-48      |
+-----------------+
|    OUI    |     |
|-----------|-----|
| NAP | UAP | LAP |
|-----|-----------|
|     |    SAP    |  
|-----|-----------|
| 2 B | 1 B | 3 B |
+-----------------+

先简单说明上面的部分字段:

  • OUI, Organization Unique Identifier

    该字段被 IEEE 管理,由 NAP + UAP 组成,用于标识蓝牙设备的厂商。

  • NAP, Non-significant Address Part

    Baseband 定义的 FHS (Frequency Hop Synchronization) packet 会携带 NAP。这个 packet 主要用于在 piconet 信道建立之前或是切换 piconet 时,同步设备间的跳频:

  • UAP, Upper Address Part

    一些 BR/EDR baseband 定义的重要算法需要 UAP 的参与,比如自适应跳频选择算法的输入值之一就有 UAP(也有 LAP):

  • SAP, Significant Address Part

    UAP 与 LAP 组成了与 NAP 对立的字段 SAP。

下面单独说明 LAP 字段。

LAP

LAP (Lower Address Part) 由厂商分配给自己生产的设备。不过在 LAP 的值域中,有 64 个值被保留使用,它们是 0x9E8B00-0x9E8B3F。

BR/EDR 设备在不同的 link controller 状态中传输 baseband packet 时,将携带不同的 access code。LAP 则会参与这些 access code 的计算。Link controller 状态机如下:

当设备处于 page, page scan 以及 page response 状态时,baseband 上传输的 packet 将携带 DAC (Device Access Code)。该值的计算需要被 page 设备的 BD_ADDR 参与(相当于 LAP 需要参与)。

当设备处于 connection, synchronization train 以及 synchronization scan 状态时,baseband 上传输的 packet 将携带 CAC (Channel Access Code)。该值的计算需要 master 设备地址的 LAP 参与。

当设备处于 inquiry 状态时,若使用 general inquiry,则 baseband 上传输的 packet 需要携带 GIAC (General Inquiry Access Code)。该值与 LAP 保留值 0x9e8b33 相关;若使用 dedicated inquiry,则 packet 需要携带 DIAC (Dedicated Inquiry Access Code)。该值与剩下的 63 个 LAP 保留值相关。

BLE 设备地址

在 BLE (Bluetooth Low Energy) 的世界中,设备地址有如下 4 种:

  • Public Device Address
  • Static Device Address
  • Resolvable Private Address
  • Non-resolvable Private Address

它们之间的关系如下:

Public Device Address

Public device address 与 static device address 同属于 identity address。拥有 identity address 是使用 RPA (Resolvable Private Address) 的前提。

Public device address 大体遵循 BR/EDR device address 规范。唯一的不同是 public device address 可以无视 BR/EDR BD_ADDR 规范对 LAP 的限制,除非该地址同时作为 BR/EDR BD_ADDR 使用。

Static Devcie Address

Static devcie address 的格式如下。其中 random part 需至少有一个为 1 的 bit,也需至少有一个为 0 的 bit:

MSBit    48-bit   LSBit
+---------------------+
| 1 | 1 | random part |
+---------------------+

如果 BLE 设备使用 static device address,那么在每次上电时它都应该生成一个新的 static device address。而且在一个上电周期中,该地址不应该被改变。Static device address 也有在设备出厂时被写死的情况。在实际场景中,这种地址大概率上可以保证地址的唯一性,同时不像 public device address 需要花钱向 IEEE 购买。

作为远端设备则无法区分一个设备地址是 static device address 还是 public device address。

Non-resolvable Private Address

这种类型的地址格式如下。其中 random part 中需至少有一个为 1 的 bit,也需至少有一个为 0 的 bit:

MSBit   48-bit    LSBit
+---------------------+
| 0 | 0 | random part |
+---------------------+

若 BLE 设备使用 non-resolvable private address,那么它在每次连接时,都需要改变该地址。因此该地址随机性更强,可以保护 BLE 设备的隐私,使其难以被追踪,但同时也让合法的设备难以自动识别自己。

Resolvable Private Address

Resolvable private address 是 BLE 设备实现隐私策略的关键。若仅使用 identity address,BLE 设备在 advertising 时可能被恶意追踪。因为在一定程度上 identity address 是固定的;若使用 non-resolvable private address 又会导致地址随机化太强,对应用造成不变。Resolvable private address 则可以很好地解决这些问题。其格式如下,其中有 hash = ah(IRK, prand)(IRK 在后面解释):

MSBbit       48-bit       LSBbit
+------------------------------+
| prand 24-bit        | hash   |
|---------------------|--------|
| 0 | 1 | random part | 24-bit |
+------------------------------+

要使用 resolvable private address 就需要引入 BLE pairing 的概念。当两个 BLE 设备完成配对后,会交换存储各自的 IRK (Identity Resolving Key) 和 identity address:

之后对端设备收到一个包含 RPA 的 advertising PDU 后,会尝试使用本地存储的 IRK (peer IRK) 计算 localHash = ah(IRK, prand)(其中 prand 从 RPA 中提取),然后将结果 localHash 与 RPA 中包含的 hash 比对。如果两者相同,那么地址解析成功。之后再找到与 peer IRK 对应的 peer device identity address 就可发起连接。

虽然 resolvable private address 也经常发生变化,但结合解析机制后,可以让受信的设备自动识别并连接自己。

插曲:BlueZ 定义的 bdaddr_t 类型

BlueZ 为 BD_ADDR 定义了专门的类型 bdaddr_t,并提供了将字符串形式的 BD_ADDR 转为 bdaddr_t 的函数 str2ba

#include <bluetooth/bluetooth.h>
bdaddr_t bdaddr;
str2ba("11:22:33:44:55:66", &bdaddr);

References

  1. BLE v4.2: Creating Faster, More Secure, Power-Efficient Designs—Part 2
  2. 1.2 BLUETOOTH DEVICE ADDRESSING, BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 2, Part B page 416
  3. 蓝牙协议分析(6)_BLE地址类型
  4. Bluetooth: Defining NAP + UAP + LAP
  5. An Overview of Addressing and Privacy for Laird’s BLE Modules
  6. 5.4.5 Privacy feature, BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 1, Part A page 278
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容