BLE中的Privacy功能
说明
BLE中的Privacy功能用于隐藏设备的真实设备地址,方法为通过密钥对原生设备地址进行加密,加密后的地址只有当对端完成配对绑定后双方同步密钥信息后才能进行解密确认,这种做法确保了设备不会被第三方设备跟踪
Privacy表
隐私表的单元结构如下
- Peer_Identity_Address_Type:对端设备标识地址类型-只有Public和Random(Static)两种
- Peer_Identity_Address:对端设备标识地址(原生地址)
- Peer_IRK:对端设备身份解析密钥
- Local_IRK:本地设备身份解析密钥
角色配置
无论是SCAN、ADV还是INIT,progress发起前都需要设置自身地址类型,这里在HCI设置时便可以选择是否使用隐私地址
Own_Address_Type:
Value | Parameter Description |
---|---|
0x00 | Public Device Address (default) |
0x01 | Random Device Address |
0x02 | 控制器基于隐私列表里的本地密钥生成可解析的隐私地址,如果隐私列表没有则使用Public地址 |
0x03 | 控制器基于隐私列表里的本地密钥生成可解析的隐私地址,如果隐私列表没有则使用Random地址 |
Peer_Address_Type:
Value | Parameter Description |
---|---|
0x00 | Public Device Address (default) |
0x01 | Random Device Address |
上述可以看到,只有自身地址可以设置是否使用隐私地址,对于对端设备是不能设置的,这里协议的定义是当启用隐私功能后,底层控制器会自动检查(根据隐私地址的位特征)并解析对端设备地址,给到用户端的都是解析好的原生地址。
比如说从机A的原生地址为88:88:88:88:88:88,经过加密后为B5:20:6F:3C:3C:7C 。那么空中包抓包会看到从机A的广播地址是B5:20:6F:3C:3C:7C。但是经过配对绑定后得到过IRK的主机B进行扫描时,扫描报告中得到的从机地址会是原生的88:88:88:88:88:88
时序
注意
- 隐私功能需要专门进行开关
- 隐私地址有专门的地址要求,最高两个Bit为0b10,原生地址不允许就设置为隐私地址
- 如果原生地址就配置为隐私地址格式,控制器会不加密直接使用
- 如果主机在扫描定向广播是遇到隐私地址且无法解析,会有专门的定向扫描广播report给host
用法
隐私地址+白名单+定向广播,该三者一般共同用于设备快速回连