BLE设备地址类型笔记

本文介绍了低功耗蓝牙中关于设备地址方面的知识,主要包括蓝牙设备中的几种设备类型,对于我这种初学者来说,种类繁多的设备类型确实容易混淆。因此,根据蓝牙官方协议《Core_v5.1.pdf》谢了此文,希望对学习BLE的朋友有所帮助。了解详情,可以参照Core_v5.1.pdf第2685页。

一、报文结构

BLE设备地址类型笔记_第1张图片
设备地址是一串用于标识设备身份识别的数字,一个蓝牙设备对应一个设备地址。设备地址是一个48bit的数据。 设备地址的类型主要有:Public device address、Random device address、Static devide address、Non-resolvable private address、Resolvable private address。一个设备可以使用两种设备地址,分贝时Public device address或者Random device address,通过上述报文就可以看出,对于本文结构中,在报头的位置会有单独的1比特位进行表示该报文中使用的是上述两种地址类型中的哪一种。下图表示BLE设备地址类型:
BLE设备地址类型笔记_第2张图片

二、 Public device address

在通信系统中,设备地址是用来唯一识别一个物理设备的,如TCP/IP网络中的MAC地址、传统蓝牙中的蓝牙地址等。对设备地址而言,一个重要的特性,就是唯一性(或者说一定范围内的唯一),否则很有可能造成很多问题。蓝牙通信系统也不例外。

对于BLE蓝牙和经典蓝牙都保留了这种48bits的公共设备地址,这种设备地址具有全球唯一性,具体的说在全球所有的通信设备,不论是网卡、WiFi等等设备,它们之间的地址都是唯一的。问题来了,各种各样样的通信设备它们的地址怎么保证唯一性呢,这就交给了一个组织--------IEEE。各种通信设备企业向IEEE交钱,然后IEEE负责给你分配地址,来保证该地址的唯一性。关于这方面的内容,大家可以查阅《Core_v5.1.pdf》的第382页1.2 BLUETOOTH DEVICE ADDRESSING

三、Random device address

上面说过,由于在使用Public device address地址时,需要向IEEE购买地址,因此这样会增加成本。使用Public Device Address也会存在一些安全隐患。采用BLE芯片的设备大都是应用在低成本的产品中,因此对于BLE芯片的成本控制就显得格外重要。基于上述原因,BLE协议规定可以使用另一种地址进行通信,即Random device address。

Random device address主要分为两种:一种是Static address;另一种是Private address。

1、 Static device address

Static device address静态地址是一个48bits随机生成的地址,应该满足一下要求:

  • 地址的两个最高有效位应等于1
  • 地址随机部分的至少一位应为0
  • 地址随机部分的至少一位应为1
    BLE设备地址类型笔记_第3张图片
    对于静态地址来说,在整个上电运行期间,该地址是不改变的,只有在设备重新断电上电之后,静态地址才会改变。很显然,对于改变的静态地址的设备来说,其使用旧地址进行连接的设备将会无效,存储在对等实体中的设备地址也会变成无效。
2、Private address

Private address又可以分为以下两种:一种是Non-resolvable private address;另一种是Resolvable private address。

(1)Non-resolvable private address

对于Non-resolvable private address具有以下要求:

  • 地址的两个最高有效位应等于0
  • 地址随机部分的至少一位应为1
  • 地址随机部分的至少一位应为0
  • 地址不得等于公共地址
    BLE设备地址类型笔记_第4张图片
    该类型的地址和上面的Static device address类型地址类似,不过Non-resolvable private address地址会定时更新,更新周期是由GAT规定的,建议是15分钟。
(2)Resolvable private address

要生成可解析的专用地址,设备必须具有本地身份解析密钥(IRK)或对等身份解析密钥(IRK)。 可解析的私有地址应使用IRK和随机生成的24位数生成。 随机数称为prand,对于Resolvable private address具有以下特点:

  • 最高两位应该等于0和1
  • 随机部分中至少有一位应为0
  • 随机部分中至少有一位应为1
    BLE设备地址类型笔记_第5张图片

Resolvable private address比较有用,它通过一个随机数和一个称作identity resolving key (IRK) 的密码生成,因此只能被拥有相同IPK的设备扫描到,可以防止被未知设备扫描和追踪。前面说过,对于这种私有地址来说,它是每隔一段时间周期性变化的。因此需要解决当已连接过的两个设备,在经过一段时间后,由于设备地址发生变化了,无法连接的问题。为了解决这个问题,需要三个步骤:第一步是在绑定时保存IRK密钥;第二步是使用密钥生成可解析的私有地址;最后,主设备必须扫描所有的设备,利用其所有的IRK解释每一个地址,只有能够严明身份的才能够进行连接。

对于可解析私有地址的设备,可以看出。上面由两部分组成,其中高24位是一个随机数(有些资料中将其分解为单独的两部分),其中高两位是可解析地址的标志位,这是固定的;剩下的22位表示一个随机数。低24位hash是由随机数和IRK经过hash运算得到的hash值,运算的公式为hash = ah(IRK, prand)。通过上面可以知道,对于这个可解析的随机地址而言,最多只能够产生2^22个随机地址。

可解析私有地址来说,当对端BLE设备扫描到该类型的蓝牙地址后,会使用保存在本机的IRK,和该地址中的prand,进行同样的hash运算,并将运算结果和地址中的hash字段比较,相同的时候,才进行后续的操作。这个过程称作resolve(解析),这也是Non-resolvable private address/Resolvable private address命名的由来。

要连接使用私有地址的从设备,主设备必须扫描所有可解析的私有地址,取出其随机数,并结合所有可能使用私有地址设备的IRK,分别计算对应该设备的哈希值。这样就存在一个缺点,主设备每次收到一个可解析的私有地址,都会依次进行各个IRK的暴力校验。如果主机存有许多私有的设备,那么就会消耗大量时间和能耗。

你可能感兴趣的:(低功耗蓝牙(BLE))