BLE4.2链路层(LL)安全机制-LL Privacy

本文主要是总结了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 位

其中:

  • IRKlocal = 128 位局部 IRK
  • Padding = 向 prand 零填充 104 位以得到 128 位
  • prand = 24 位随机数值(22 位是随机的, 两个最高有效位被设置为 0b10)
  • 安全函数‘e’ 是 128 位 AES 加密函数,该函数在 PSoC 4/ PRoC BLE 设备的链路层硬件中被执行。它使用 128 位key 和 128 位 plaintextData 来生成 encryptedData,如 FIPS-1971 所定义:encryptedData = e(key, plaintextData)
  • 按照以下方式将 24 位 hash 和 24 位 prand 结合起来便得到随机地址(randomAddress) :

randomAddress = hash | prand

RPA的产生过程如下图所示:

       BLE4.2链路层(LL)安全机制-LL Privacy_第1张图片

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 地址已被

解析。 地址解析流程如下图所示。

       BLE4.2链路层(LL)安全机制-LL Privacy_第2张图片

2蓝牙白名单   

    所谓的白名单,就是一组蓝牙地址;通过白名单,可以只允许特定的蓝牙设备(白名单中列出的)扫描(Scan)、连接(connect)我们,也可以只扫描、连接特定的蓝牙设备(白名单中列出的)。

    例如,如果某个BLE设备,只需要被受信任的某几个设备扫描、连接,我们就可以把这些受信任设备的蓝牙地址加入到该设备的白名单中,这样就可以有效避免其它“流氓设备”的骚扰了。

    不过呢,该机制只防君子不防小人,因为它是靠地址去过滤“流氓”的,如果有些资深流氓,伪装一下,将自己的设备地址修改为受信任设备的地址,那就惨了……

    白名单是在LL层实现,其中包括:白名单策略、设备地址类型和设备地址等内容。

3安全机制-LL Privacy

    和白名单机制上的White List类似,如果设备需要使用LL Privacy机制,则需要在Controller端保存一个Resolving List,其思路为:

  1. BLE设备要按照2.2中的介绍,配置并使能白名单机制,把那些受信任设备的地址(这里为Identity Address)加入到自己的白名单中,并采用合适的白名单策略。
  2. 如果设备需要使用LL Privacy策略,保护自己(以及对方)的地址不被窃取,则需要将自己(local)和对方(peer)的地址和加密key保存在一个称作Resolving List的列表中。
  3. Resolving List的每一个条目,都保存了一对BLE设备的key/address信息,其格式为:

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

你可能感兴趣的:(BLE安全)