CH582 CH573 BLE设备地址 DEVICE ADDRESS
BLE设备,可以使用两种类型的地址(一个BLE设备可同时具备两种地址):Public Device Address和Random Device Address。而Random Device Address又分为Static Device Address和Private Device Address两类。其中Private Device Address又可以分为Non-resolvable Private Address和Resolvable Private Address。它们的关系如下所示:
The public device address is divided into the following two fields: |
• company_assigned field is contained in the 24 least significant bits |
• company_id field is contained in the 24 most significant bits |
Random Device Address,即设备地址不是固定分配的,而是在设备设备启动后随机生成的。根据不同的目的,Random Device Address分为Static Device Address和Private Device Address两类。
4.1 Static Device Address
Static Device Address是设备在上电时随机生成的地址,格式如下:
Static Device Address的特征可总结为:
1)最高两个bit为“11”。
2)剩余的46bits是一个随机数,不能全部为0,也不能全部为1。
3)在一个上电周期内保持不变。
4)下一次上电的时候可以改变。但不是强制的,因此也可以保持不变。如果改变,上次保存的连接等信息,将不再有效。
Static Device Address的使用场景可总结为:
1)46bits的随机数,可以很好地解决“设备地址唯一性”的问题,因为两个地址相同的概率很小。
2)地址随机生成,可以解决Public Device Address申请所带来的费用和维护问题。
4.2 Private Device Address
Static Device Address通过地址随机生成的方式,解决了部分问题,Private Device Address则更进一步,通过定时更新和地址加密两种方法,提高蓝牙地址的可靠性和安全性。根据地址是否加密,Private Device Address又分为两类,Non-resolvable private address和Resolvable private address。下面我们分别描述。
4.2.1 Non-resolvable private address
不可解析的私有地址
Non-resolvable private address和Static Device Address类似,不同之处在于,Non-resolvable private address会定时更新。更新的周期称是由GAP规定的,称作T_GAP(private_addr_int) ,建议值是15分钟。其格式如下:
特征可总结为:
1)最高两个bit为“00”。
2)剩余的46bits是一个随机数,不能全部为0,也不能全部为1。
3)以T_GAP(private_addr_int)为周期,定时更新。
4.2.2 Resolvable private address
可解析的私有地址
Resolvable private address比较有用,它通过一个随机数和一个称作identity resolving key (IRK) 的密码生成,因此只能被拥有相同IPK的设备扫描到,可以防止被未知设备扫描和追踪。其格式如下:
特征如下:
1)由两部分组成:
高位24bits是随机数部分,其中最高两个bit为“10”,用于标识地址类型;
低位24bits是随机数和IRK经过hash运算得到的hash值,运算的公式为hash = ah(IRK, prand)。2)当对端BLE设备扫描到该类型的蓝牙地址后,会使用保存在本机的IRK,和该地址中的prand,进行同样的hash运算,并将运算结果和地址中的hash字段比较,相同的时候,才进行后续的操作。这个过程称作resolve(解析),这也是Non-resolvable private address/Resolvable private address命名的由来。
3)以T_GAP(private_addr_int)为周期,定时更新。哪怕在广播、扫描、已连接等过程中,也可能改变。
4)Resolvable private address不能单独使用,因此需要使用该类型的地址的话,设备要同时具备Public Device Address或者Static Device Address中的一种。
PS:使用一个iPhone手机和一个BLE外设做测试,iPhone的地址是一直在变化的,每隔15分钟变一次。但是变化后还是可以继续连接外设,说明IRK会在主从设备间共享。