博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BLE(15)—— Privacy
阅读量:822 次
发布时间:2019-03-24

本文共 5280 字,大约阅读时间需要 17 分钟。

基于 BLE 5.1 协议 Core Spec。

 

目录


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 处理,细节就不在多说了。

 

转载地址:http://dkyuk.baihongyu.com/

你可能感兴趣的文章