BLE(15)—— Privacy

基于 BLE 5.1 协议 Core Spec。

 

目录

1、隐私策略简述

2、Resolving List

3、Private Address Generation Interval

4、Privacy In The Advertising State

4.1、Connectable and scannable undirected event type

4.2、Connectable directed event type

4.3、Non-connectable and non-scannable undirected and scannable undirected event types

4.4、Connectable undirected event type

4.5、Non-connectable and non-scannable directed and scannabledirected event types

5、Privacy In The Scanning State

6、Privacy In The Initiating State


1、隐私策略简述

除了设备过滤机制以外,BLE 还提供了隐私策略(Privacy)。Privacy 使用的对象是 Private Address。它的核心思想是保护地址不被窃取,所以进行地址加密/解密的过程。

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

1)BLE 配置并使能白名单机制,把那些受信任设备的地址(这里为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 ]

其中:

Local IRK:本地的 IRK,用于将本地设备的 Identity Address 转换为 Resolvable Private Address。可以为 0,表示本地地址直接使用 Identity Address;

Peer IRK:对端的 IRK,用于将对端设备的 Resolvable Private Address 解析为 Identity Address。可以为 0,表示对端地址是  Identity Address;

Peer Device Identity Address:对端设备的 Identity Address

Address Type:对端设备的地址类型,和 Peer Device Identity Address,一起,用于翻译后地址比对

 

2、Resolving List

Resolving List 也是一张表,是上层通过 HCI 命令提供给 Link Layer 的,Link Layer 负责如下事项:

1、发送数据包时:如果有 AdvA 需要填充,则判断 Resolving List 是否有非 0 的 Local IRK,如果有,则使用 Local IRK 将Identity Address 加密为 Resolvable Private Address,填充到 AdvA 中。否则,直接填充 Identity Address;

同理,如果有 InitA 需要填充,则判断 Resolving List 是否有匹配的、非 0 的 Peer IRK,如果有,则使用 Peer IRK 将对端的 Identity Address 加密为 Resolvable Private Address,填充到 InitA 中。否则,直接填充 Identity Address。

2、接收数据包时:如果数据包中的 AdvA 或者 InitA 为普通的 Identity Address,则直接做后续的处理; 如果它们为Resolvable Private Address(RPA),则会遍历 Resolving List 中所有的 【IRK | Identity Address】 条目,使用IRK解出Identity Address 和条目中的对比,如果匹配,则地址解析成功,可以做进一步处理。如果不匹配,且使能了白名单/LL Privacy策略,则会直接丢弃。

注: Link Layer 和 Host 之间所有的事件交互(除了Resolving List 操作之外),均使用 Identity Address。也就是说,设备地址的加密、解密、比对等操作,都是在 Controller 中完成的,对上层实体(HCI之上)是透明的。
 

3、Private Address Generation Interval

Privacy 主要针对的是 Resolvable Private Addresses 类型的地址;该类地址的是配合了一个 Timer 来进行生成, 定一个 Timer ,定时到了后就设置一个新的 Resolvable Private Addresses;Timer 的设置不宜太频繁, 这样会影响连接建立的效果,BLE Spec推荐的设置为 15 min 

 

4、Privacy In The Advertising State

先分析 Advertising 状态下的 Privacy 是什么处理流程。

 

4.1、Connectable and scannable undirected event type

1、发送包时,AdvA 填充策略为:

首先检查 Resolving List  查看是否存在非 0 的 Local IRK 条目,如果有,则使用这个 Local IRK 将自己的 Identity Address 加密为 Resolvable Private Addresses,并填充到 AdvA 中。否则,直接使用 Identity Address

2、当接收到连接请求的时候,请求者的地址会包含在 PDU 的 InitA 中,解析策略为:

如果 InitA 是 Resolvable Private Addresses,且当前使能了地址解析功能,LL会遍历 Resolving List 中所有的“Peer IRK | Peer Device Identity Address | Address Type”条目,使用Peer IRK解析出 Identity Address 后和 Peer Device Identity Address 做比对,如果匹配,则解析成功,再基于具体的白名单(WL)策略,觉得是否接受连接;如果解析不成功,则无法建立连接;

3、当接收扫描请求时,对 ScanA 的处理策略,和 InitA 类似,不在赘述。

 

4.2、Connectable directed event type

1、发送包时,AdvA 填充策略为:

首先检查 Resolving List  查看是否存在非 0 的 Local IRK 条目,如果有,则使用这个 Local IRK 将自己的 Identity Address 加密为 Resolvable Private Addresses,并填充到 AdvA 中。否则,直接使用 Identity Address

2、发送包时,TargetA 填充策略为:

首先检查 Resolving List  查看是否存在非 0 的匹配的 Peer IRK 条目,如果有,则使用这个 Peer IRK 将对端的 Identity Address 加密为 Resolvable Private Addresses,并填充到 TargetA 中。否则,直接使用 Identity Address

3、当接收到连接请求的时候,请求者的地址会包含在 PDU 的 InitA 中,解析策略为:

如果 InitA 是 Resolvable Private Addresses,且当前使能了地址解析功能,LL会遍历 Resolving List 中所有的“Peer IRK | Peer Device Identity Address | Address Type”条目,使用Peer IRK解析出 Identity Address 后和 Peer Device Identity Address 做比对,如果匹配,则解析成功,再基于具体的白名单(WL)策略,觉得是否接受连接;如果解析不成功,则无法建立连接;

 

4.3、Non-connectable and non-scannable undirected and scannable undirected event types

1、发送包时,AdvA 填充策略为:

首先检查 Resolving List  查看是否存在非 0 的 Local IRK 条目,如果有,则使用这个 Local IRK 将自己的 Identity Address 加密为 Resolvable Private Addresses,并填充到 AdvA 中。否则,直接使用 Identity Address

2、接收包时,如果收到扫描请求,策略为:

如果 ScanA 是 Resolvable Private Addresses,且当前使能了地址解析功能,LL会遍历 Resolving List 中所有的“Peer IRK | Peer Device Identity Address | Address Type”条目,使用 Peer IRK 解析出 Identity Address 后和 Peer Device Identity Address 做比对,如果匹配,则解析成功,再基于具体的白名单(WL)策略,觉得是否回复;如果解析不成功,则不回复;

 

4.4、Connectable undirected event type

1、发送包时,AdvA 填充策略为:

首先检查 Resolving List  查看是否存在非 0 的 Local IRK 条目,如果有,则使用这个 Local IRK 将自己的 Identity Address 加密为 Resolvable Private Addresses,并填充到 AdvA 中。否则,直接使用 Identity Address

2、当接收到连接请求的时候,请求者的地址会包含在 PDU 的 InitA 中,解析策略为:

如果 InitA 是 Resolvable Private Addresses,且当前使能了地址解析功能,LL会遍历 Resolving List 中所有的“Peer IRK | Peer Device Identity Address | Address Type”条目,使用Peer IRK解析出 Identity Address 后和 Peer Device Identity Address 做比对,如果匹配,则解析成功,再基于具体的白名单(WL)策略,觉得是否接受连接;如果解析不成功,则无法建立连接;

 

4.5、Non-connectable and non-scannable directed and scannable
directed event types

1、发送包时,AdvA 填充策略为:

首先检查 Resolving List  查看是否存在非 0 的 Local IRK 条目,如果有,则使用这个 Local IRK 将自己的 Identity Address 加密为 Resolvable Private Addresses,并填充到 AdvA 中。否则,直接使用 Identity Address

2、发送包时,TargetA 填充策略为:

首先检查 Resolving List  查看是否存在非 0 的匹配的 Peer IRK 条目,如果有,则使用这个 Peer IRK 将对端的 Identity Address 加密为 Resolvable Private Addresses,并填充到 TargetA 中。否则,直接使用 Identity Address

3、接收包时,如果收到扫描请求,策略为:

如果 ScanA 是 Resolvable Private Addresses,且当前使能了地址解析功能,LL会遍历 Resolving List 中所有的“Peer IRK | Peer Device Identity Address | Address Type”条目,使用 Peer IRK 解析出 Identity Address 后和 Peer Device Identity Address 做比对,如果匹配,则解析成功,再基于具体的白名单(WL)策略,觉得是否回复;如果解析不成功,则不回复;

其实套路都是一样的,本地发出的地址信息需要根据 Local IRK 加密,收到的使用 Peer IRK 解析。

 

5、Privacy In The Scanning State

这里其实和上面的套路也是一致的,不过是 ScanA/TargetA 是由 Scanner 发出的,所以使用 Scanner 本地的 Local IRK 处理,收到的使用 Peer IRK 处理。
 

6、Privacy In The Initiating State

这里和上面处理基本一致,不过是本机发出去的使用 Local IRK 处理,收到的用 Peer IRK 处理,细节就不在多说了。

 

你可能感兴趣的:(BLE)