【IoT】蓝牙 BLE 设备地址类型解析
一个 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。
1、Public Device Address
由 24-bit 的 company_id 和 24-bit 的 company_assigned 组成。
在通信系统中,设备地址是用来唯一识别一个物理设备的,如 TCP/IP 网络中的 MAC 地址、传统蓝牙中的蓝牙地址等。
对设备地址而言,一个重要的特性,就是唯一性。
对经典蓝牙(BR/EDR)来说,其设备地址是一个 48bits 的数字,称作 "48-bit universal LAN MAC addresses“。
正常情况下,该地址需要向 IEEE 申请。
缺点:
1)Public Device Address 需要购买和维护,增加成本;
2)安全因素:BLE 很大一部分的应用场景是广播通信,这意味着只要知道设备的地址,就可以获取所有的信息。
2、Random Device Address
Random Device Address:是在设备设备启动后随机生成的。
根据不同的目的 Random Device Address 分为 Static Device Address 和 Private Device Address 两类。
1)Static Device Address
Static Device Address 是在设备上电时随机生成的,
特性如下:
1)最高两个bit为“11”;
2)剩余的 46bits 是一个随机数,不能全部为 0,也不能全部为 1;
3)在一个上电周期内保持不变;
4)下一次上电的时候可以改变,但不是强制的,如果改变,上次保存的连接等信息,将不再有效。
2)Private Device Address
Static Device Address 通过地址随机生成的方式,解决了部分问题,Private Device Address 则更进一步,通过定时更新和地址加密两种方法,提高蓝牙地址的可靠性和安全性。
根据地址是否加密,Private Device Address 又分为两类,Non-resolvable private address 和 Resolvable private 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) 为周期,定时更新。
Resolvable private address 比较有用,它通过一个随机数和一个称作 identity resolving key (IRK) 的密码生成,因此只能被拥有相同 IRK 的设备扫描到,可以防止被未知设备扫描和追踪。
特性如下:
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) 为周期,定时更新,哪怕在广播、扫描、已连接等过程中,也可能改变。
refer:
http://www.wowotech.net/?post=305
https://blog.****.net/yk150915/article/details/79639035