本文主要是总结了BLE配对绑定后,二次连接时链路层的连接过程和在该过程中,蓝牙4.2所做的一些安全机制,主要包括蓝牙白名单和安全机制LL Privacy,LL Privacy主要是防止设备地址泄露,导致设备被跟踪。本文所有内容是按蓝牙4.2总结。
1 BLE地址类型
1.1蓝牙地址类型
有两种设备地址,即是公有地址和随机地址。公有地址包括一个 24 位的公司识别码(基于 IEEE802-2001 标准的组织唯一标识符,简称为 OUI)和一个 24 位的公司分配码(每个设备的号码不一样)。
随机设备地址分为两种:静态地址和私有地址。
静态地址是随机生成的 48 位地址,其中两个最高有效位被设置为 1。
公有地址是固定不变的。静态地址只在重新开机时才被修改。
对等设备很容易便能检测和连接使用了其中一种地址的设备。
私有地址则定期改变,这样可确保 BLE 设备不被跟踪。每次重新连接时,不可解析的私有地址都会改变。
对等设备无法计算不可解析的私有地址,因此连接前需要向对等设备提供该地址。
可解析的私有地址(RPA)被定期修改,支持保密功能的设备可以计算并使用它。
LL Privacy安全机制主要利用的就是RPA。
1.2可解析保密地址(RPA)的产生
可解析私有地址共48位,其格式如下:
设备生成 24 位数值(22 位是随机的, 2 位是固定的)被称为 prand。设备将使用 prand 通过 Hash 函数生成 24 位
hash = e(IRKlocal, padding | prand ), 截断为 24 位
其中:
randomAddress = hash | prand
RPA的产生过程如下图所示:
1.3可解析私有地址(RPA)的解析
BLE 保密设备如何解析对等设备的 RPA。对等设备提供的 RPA 包括 24 位随机部分(prand)和 24 位散列部分(hash),如第 7.2.3 节所述。对地址进行解析或解码时, RPA 的最低有效 24 位当作对等设备的 hash,地址的最高有效 24 位当作 prand。使用上面的 Hash 函数生成 localHash 值。其中,函数的输入参数为对等设备所提供的 IRK(首次配对绑定时会被主从双方交换)和从 RPA 提取得到的 prand。
localHash = e(IRKpeer, padding | prand ), 截断为 24 位
将 localHash 和从 RPA 提取的 hash 进行比较。如果 localHash 同所提取的 hash 匹配, 则表示对等设备的 ID 地址已被
解析。 地址解析流程如下图所示。
2蓝牙白名单
所谓的白名单,就是一组蓝牙地址;通过白名单,可以只允许特定的蓝牙设备(白名单中列出的)扫描(Scan)、连接(connect)我们,也可以只扫描、连接特定的蓝牙设备(白名单中列出的)。
例如,如果某个BLE设备,只需要被受信任的某几个设备扫描、连接,我们就可以把这些受信任设备的蓝牙地址加入到该设备的白名单中,这样就可以有效避免其它“流氓设备”的骚扰了。
不过呢,该机制只防君子不防小人,因为它是靠地址去过滤“流氓”的,如果有些资深流氓,伪装一下,将自己的设备地址修改为受信任设备的地址,那就惨了……
白名单是在LL层实现,其中包括:白名单策略、设备地址类型和设备地址等内容。
3安全机制-LL Privacy
和白名单机制上的White List类似,如果设备需要使用LL Privacy机制,则需要在Controller端保存一个Resolving List,其思路为:
Local IRK | Peer IRK | Peer Device Identity Address | Address Type
发送数据包时,判断Resolving List是否有非0的Local IRK,如果有,则使用Local IRK将Identity Address加密为Resolvable Private Address,填充到数据包中相应的存放地址的字段。否则,直接填充Identity Address;
接收数据包时,如果数据包中的地址为普通的Identity Address,则直接做后续的处理;如果它们为Resolvable Private Address,则会遍历Resolving List中所有的“IRK | Identity Address”条目,使用IRK解出Identity Address和条目中的对比,如果匹配,则地址解析成功,可以做进一步处理。如果不匹配,且使能了白名单/LL Privacy策略,则会直接丢弃。如果没有使能白名单,则走正常的连接过程。
在配对过程的第三阶段中, GAP 中心和 GAP 外设交换了 IRK 和 ID 地址。这些内容作为配对相关数据包的有效载荷部分。对等设备的 IRK、 ID 地址和局部 IRK 被存储在两个设备的解析表中。在该阶段,两个设备都包含用于解析 RPA 的信息,因此它们都设置了 RPA 超时参数,并使能了地址解析。它们也可以选择性地将对等设备的 ID 地址添加到筛选设备用的白名单内。白名单是 BLE 设备的链路层筛选广播者、扫描者和连接发起者时所用的一组蓝牙设备地址。仅在使能设备筛选功能时,才使用白名单。设备在 BLE 数据通道上交换数据。由于设备的解析表具有用于解析对等设备 RPA 的信息,因此重新连接程序将会使用 RPA。下图显示的是两个设备成功实现首次连接后被断开,然后正在重新连接。
如上面所示,这次,两个设备在广播通道上发送的所有数据包都使用 RPA。因此,两个设备间在广播通道上进行的通信不被任何第三个设备跟踪。请注意,重新连接时, GAP 外设可以使用可连接无定向广播或可连接定向广播。蓝牙 4.2 保密设备支持可连接定向广播。仅在 GAP 外设使用可连接无定向广播时,才会使用扫描请求和扫描响应。在 GAP 外设使用可连接定向广播时, GAP 中心只能发送连接请求进行响应。请注意,保密功能防止跟踪 BLE 设备在广播通道上进行的通信。数据通道的数据包所使用的访问地址每次连接都被修改,因此最难跟踪。 保密功能不会对数据通道数据包产生影响。
参考资料
蓝牙核心规范Core_v4.2.pdf
AN99209_-_PSoC_4_BLE_and_PRoC_BLE_Bluetooth_LE_4.2_Features_Chinese.pdf
http://www.wowotech.net/bluetooth/ble_ll_privacy.html
http://www.wowotech.net/bluetooth/ble_white_list.html