加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_阳江站长网 (https://www.0662zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 评论 > 正文

科普 | 低功耗蓝牙配对

发布时间:2020-06-04 09:14:36 所属栏目:评论 来源:站长网
导读:Paring(配对)和 bonding(绑定)是实现蓝牙射频通信安全的一种机制,有两点需要注意: 一是 paring/bonding 实现的是蓝牙链路层的安全,对应用来说完全透明,也就是说,不管有没有 paring/bonding,你发送或接收应用数据的方式是一样的,不会因为加了 pa

Legacy paring 在整个配对流程中只做一次认证,而 LESC paring 会做两次认证。LESC 第一阶段认证的原理是,设备 A 和 B 各生成一个随机数,然后认证这个随机数对不对。LESC 第二阶段认证过程是:设备 A 和 B 通过 MacKey 各生成一个检查值,对方确认这个值对不对。

以 LESC Numeric comparison 为例,其第一阶段认证流程如下所示:

科普 | 低功耗蓝牙配对

我们还是以 LESC Numeric comparison 为例,其第二阶段全工作流程如下所示:

科普 | 低功耗蓝牙配对

一旦 LTK 生成成功,主机端就可以发起加密连接流程,如下所示:

科普 | 低功耗蓝牙配对

至此,LESC 连接被 LTK 加密了,后面就可以分发秘密信息了。

2.3 阶段 3:秘密信息分发

°一旦连接加密了,主机和从机之间就可以分发一些秘密信息。如果是 legacy paring,如下秘密信息必须分发:

LTK

EDIV

Rand

°同时根据情况,legacy paring 还需分发如下信息:

IRK

Identity adresss

°对于 LESC paring,秘密信息分发是可选,一般有可能分发如下信息:

IRK

Identity adresss

如下为 legacy paring 可能分发的最多秘密信息的一个例子:

科普 | 低功耗蓝牙配对

2.4 绑定,重连和加密

°如果配对的两个设备生成了 LTK 及其他秘密信息:  如上所述,如果配对的两个设备生成了 LTK 及其他秘密信息,并且把 LTK 及其他秘密信息保存到 Flash 等永久化存储设备中,那么我们就可以说这两个设备绑定成功。换句话说,paring 和 bonding 是两个不同的概念,paring 更强调认证和密钥生成,而 bonding 更强调密钥保存。一旦两个设备 bonding 成功,那么这两个设备断开再次重连的时候,主机就可以发起加密流程,从而使用 paring 生成的 LTK 对后续的连接进行加密。主机发出加密连接流程如下所示:

科普 | 低功耗蓝牙配对

这里说明一下,加密连接只能由主机发出,而不能由从机发起。不过从机可以发出加密请求,主机收到从机的加密请求后,可以发起加密连接也可以拒绝其请求。如下为主机同意从机的加密请求的工作流程:

科普 | 低功耗蓝牙配对

2.5 配对命令一览表

°如下为 SM 中用的 PDU 命令列表:  (注:加密连接命令属于 LL 控制命令,所以没有包含在其中)

科普 | 低功耗蓝牙配对

3. Nordic SDK 配对流程

°如下为 SM 中用的 PDU 命令列表:  那么如何实现这个配对流程呢?也就是说,我该调用哪些 API 去实现配对流程,这些 API 调用的顺序又是如何,具体会产生哪些协议栈事件,该如何处理这些协议栈事件,这就涉及到协议栈的实现。

Nordic 蓝牙协议栈 softdevice 提供详细的工作流程图,以指导用户如何调用 softdevice API 去实现想要的配对流程,详细的配对流程图请参考 infocenter 如下界面:

科普 | 低功耗蓝牙配对

比如 S132 协议栈,其从机端配对流程图链接为:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.s132.api.v7.0.1%2Fgroup___b_l_e___g_a_p___p_e_r_i_p_h___s_e_c___m_s_c.html。

以 legacy paring,从机端显示 passkey,主机端输入 passkey 为例,softdevice 的配对流程图如下所示,链接为:

https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.s132.api.v7.0.1%2Fgroup___b_l_e___g_a_p___p_e_r_i_p_h___b_o_n_d_i_n_g___p_k___p_e_r_i_p_h___m_s_c.html

科普 | 低功耗蓝牙配对

上述配对流程图把用到的 API,产生的 softdevice 事件,以及 softdevice 事件如何处理,都一一阐明,大家只要按照这个流程图来做,就可以完成期望的配对。更让人省心的是,Nordic SDK 已经把几种典型的配对场景做成了例子,大家可以直接就拿过来用,连上面的配对流程图都不用看,就可以轻松完成自己的配对应用。

Nordic 提供的配对例子有:ble_app_hids_keyboard,ble_app_hrs,ble_app_gls,ble_app_bps,ble_app_bms,ble_app_cscs,ble_app_hrs_nfc_pairing,experimental_ble_app_hrs_nfc_pairing,ble_app_hids_keyboard_pairing_nfc,ble_app_multirole_lesc 等,基本上囊括了蓝牙各种配对情况。

后面会以 ble_app_hrs 为例来详细讲解如何实现低功耗蓝牙配对

4. 配对例程 ble_app_hrs 解读

°nRF5 SDK 把蓝牙配对做成了一个模块:  peer_manager,也就是说,所有关于 paring 的工作都由 peer manager 自动完成,用户无需去了解 softdevice 底层 API 的使用方法,大家直接参考 nRF5 SDK 里面的例程就可以完成自己的配对应用开发。

nRF5 SDK 提供的配对例子有:ble_app_hids_keyboard,ble_app_hrs,ble_app_gls,ble_app_bps,ble_app_bms,ble_app_cscs,ble_app_hrs_nfc_pairing,experimental_ble_app_hrs_nfc_pairing,ble_app_hids_keyboard_pairing_nfc,ble_app_multirole_lesc 等,基本上囊括了蓝牙各种配对情况,下面将和大家一起来解读 ble_app_hrs 配对相关代码

如果你对 Nordic nRF5 SDK 和 softdevice 不是很熟的话,建议你先看一下这篇文章:手把手教你开发 BLE 数据透传应用程序 ,以建立 Nordic 开发的一些基础知识,然后再往下看。  跟没有 paring 的 ble 应用代码相比,有 paring 的 ble 应用只多了一个初始化函数:peer_manager_init(),peer_manager_init 实现代码如下所示:

科普 | 低功耗蓝牙配对

peer_manager_init 里面注册了一个回调函数:pm_evt_handler,用来添加一些用户自定义的处理,例子代码 pm_evt_handler 的实现如下所示:

科普 | 低功耗蓝牙配对

至此,一个 just works 的蓝牙配对例子就算完成了,是不是有点懵?感觉太简单了以至于有点接受不了。没关系,下面我们在这个例子上加一些额外的功能,以加深大家对它的理解。

5. 改变 ble_app_hrs 配对方式

(编辑:应用网_阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读