BLE MESH组网(二)

  • Friendship功能
  • 一、概述
  • 1.Friendship是什么
  • 2.Friend和LPN
  • 3.Friend参数
  • 4.好友建立
  • Friendship消息
  • 安全
  • 友谊终止
  • 平台选择技巧
  • 二、蓝牙MESH网络中的设备管理
  • 1.向网络添加新设备
  • 步骤 1. 信标
  • 步骤 2. 邀请
  • 步骤 3. 交换公钥
  • 步骤 4. 身份验证
  • 步骤 5. 供应数据的分发
  • 2.从网络中删除节点
  • 拒绝清单
  • 密钥刷新过程



Friendship功能

蓝牙®低功耗 (LE) 是世界上最节能的短距离无线通信技术之一。其低功耗受到开发者和消费者的广泛赞誉。随着蓝牙MESH网络的发布,开发人员可能想知道蓝牙MESH网络的设计是否也考虑到了低功耗。是否继承了蓝牙LE低功耗的美感?

答案是肯定的,肯定的!蓝牙MESH网络包括各种优化功耗的措施,特别是一种称为“Friendship”的功能。


一、概述

友情功能在蓝牙MESH网络中的应用可能非常多样化。一些产品,比如灯,会连接到主电源(国家电网),蓝牙mesh模块的功耗,与灯本身的功耗相比,可以忽略不计。但其他产品,如智能传感器或锁,将受到功率限制,这意味着它们需要由小型电池或能量收集技术供电。此类产品最有可能利用蓝牙®MESH网络的Friendship概念。


1.Friendship是什么

一个由数千个设备组成的网络,每个设备都通过蓝牙®低功耗 (LE) 短脉冲无线连接进行通信。BLE MESH网络上的这些设备称为节点。

Friendship是节点一种附加网络功能,节点具有与产品类型相关的功能,但也可能具有与网络本身的操作相关的功能,并且可以承担特殊角色。这是由它们支持的网格特征决定的。所有节点都可以在网络中发送和接收网格消息。此外,节点还可以选择支持一种或多种附加网络功能,如下所示:

  • 中继功能:能够通过广告承载接收和重新传输MESH消息以启用更大的网络。
  • 代理功能:能够在 GATT 和广告承载之间接收和重新传输MESH消息。
  • 低功耗特性:能够以显着降低的接收器占空比在MESH网络中运行。最小化无线电接收器的开启时间可降
  • 低功耗,节点仅在绝对必要时启用接收器。低功耗节点 (LPN) 通过与朋友节点建立友谊来实现这一点。
  • Friend 功能:通过存储发往 LPN 的消息并仅在 LPN 明确请求来自 Friend 节点的消息时才将消息转发给 LPN 来帮助 LPN 操作的能力。

要了解友谊如何使 LPN 降低功耗,请参考传感器。传感器是一种可能利用友谊并充当 LPN 的节点类型的一个很好的例子。他们通常花费大部分时间来传输数据,而很少需要接收数据。也许传感器只在温度读数超出一组配置的限制时才传输温度读数,而且这种情况可能一天只发生两次。这种不频繁的数据传输使此类设备的能源使用量保持在较低水平。

但是,如果需要根据季节修改这些温度限制以使用不同的值,并且通过向传感器发送配置消息来实现对这些限制的修改,该怎么办?对于直接接收此类消息的传感器,它需要打开收音机并收听。大多数时候它在聆听它什么也没有收到,但仍然消耗了能量。

因此,和朋友一起工作,LPN就可以安排它使用无线电接收信息,接收的频率对设备来说是有意义的,而且频率要比它需要一直收听信息时的频率低得多。LPN会调查他们的朋友是否有新消息,而朋友只会偶尔存储这些消息。这就是如何节省电量。

2.Friend和LPN

LPN 必须与另一个支持 Friend 特性的节点建立友好关系,以减少其接收器占空比并节省能源。图 1 取自蓝牙MESH网络配置文件规范。除此之外,它还说明了 LPN 和朋友节点之间的关系。特别是它显示:

  • 浅蓝色:LPN
  • 深灰色:与特定 LPN 相关联并提供服务的朋友节点
  • 浅灰色:与 LPN 没有关系的朋友节点
图 1 – MESH网络的示例拓扑

朋友节点P具有LPN的友谊关系I、J和K,朋友节点O具有LPN友谊关系L和M。因此,寻址到节点I、J或K 的消息将由朋友 P 存储和转发。寻址到节点L或M 的消息将由朋友O存储和转发。好友节点的转发仅在 LPN 轮询好友等待发送的消息时发生。

3.Friend参数

LPN 需要找到 Friend 节点并与其建立友谊关系。所涉及的程序称为好友建立。我们将很快检查这个过程,但在我们开始之前让我们介绍一些控制 LPN 行为的关键参数,因为这些参数是在朋友建立期间设置的。有三个重要的参数:ReceiveDelay、ReceiveWindow、PollTimeout

  • ReceiveDelay是LPN向Friend节点发送请求和开始侦听响应之间的时间间隔。这允许Friend节点有时间准备响应并将其发送回来。
  • ReceiveWindow是 LPN 用于侦听响应的时间。图 2 说明了涉及 ReceiveDelay 和 ReceiveWindow 的时序。

安卓蓝牙mesh组网 蓝牙 mesh组网_bluetooth

图2 –  ReceiveDelay 和 ReceiveWindow时序
  • PollTimeout建立了 LPN 向其 Friend 节点发送的两个连续请求之间可能经过的最长时间。如果在PollTimeout计时器到期之前,Friend 节点没有收到来自 LPN 的请求,则友谊终止。

4.好友建立

两个人想要建立友谊,一个眼神就足够了!要在蓝牙®MESH网络中建立友谊,还需要完成几个步骤。

  • LPN 发布好友请求消息。此消息不会被中继,因此只有直接无线电范围内的朋友节点才能处理它。没有好友功能的节点会丢弃它。好友请求消息包括 LPN 所需的ReceiveDelay、ReceiveWindow和PollTimeout参数。
  • 附近的每个可以支持好友请求消息中指定的要求的好友节点准备并向 LPN 发送回好友报价消息。该消息包含各种参数,包括支持的ReceiveWindow大小、可用的消息队列大小、可用的订阅列表大小以及Friend节点测量的RSSI值。
  • 在接收到 Friend Offer 消息时,LPN 通过应用特定于实现的算法来选择合适的 Friend 节点。该算法很可能会考虑各种点。有些设备可能会优先考虑ReceiveWindow 的大小以尽可能减少功耗,而有些设备可能更关心 RSSI 值,以确保它们可以与 Friend 节点保持良好的质量链接。使用的精确算法由产品开发人员确定。
  • 选择一个Friend节点后,LPN向该Friend节点发送Friend Poll消息。
  • Friend节点收到LPN发来的Friend Poll消息后,回复Friend Update消息,结束好友建立流程并提供安全参数。至此,友谊已经建立。

Friendship消息

  • 友谊建立后,当 Friend 节点接收到寻址到 Friend 节点的 LPN 的消息时,Friend 节点会缓存该消息,并将其存储在称为 Friend Queue 的区域中。在图 4 中,说明了 Friend 节点和关联的 LPN 之间的消息交换,我们可以看到消息 1 和 2 代表 LPN 存储在 Friend 节点中。
  • LPN 定期启用其收发器并向Friend 节点发送Friend Poll,请求为其存储的任何缓冲消息。
  • Friend 节点首先将一条存储的消息发送回 LPN 作为对Friend Poll的响应。
  • LPN在收到来自 Friend 节点的每个消息后继续发送Friend Poll消息,直到它接收到 MD (MD=More Data) 字段设置为 0的Friend Update消息。这意味着不再为 LPN 缓存消息。此时,LPN 停止轮询 Friend 节点。
图4 – Friendship消息

安全

蓝牙®MESH网络中无处不在。Friendship 也不例外,它使用两个特殊的安全凭证:

  • Managed flooding security material:源自NetKey,也可以被同一网络中的其他节点使用。使用托管泛洪安全材料加密的消息可以被同一网络中的任何节点解密。
  • Friend 安全材料:派生自 NetKey 和一些由 LPN 和 Friend 节点生成的附加计数器编号。使用好友安全材料加密的消息只能由拥有它的好友和 LPN 解密。
    LPN和Friend节点使用的两种安全材料如何?这是一个总结:

使用好友安全材料加密的对应好友消息为:

  • 朋友投票
  • 朋友更新
  • 好友订阅列表添加/删除/确认
  • Friend 节点传递给 LPN 的存储消息

使用托管泛洪安全材料加密的相应友谊消息是:

  • 朋友清除
  • 好友清除确认

根据应用程序设置,从 LPN 发送到朋友节点的消息使用托管泛洪或朋友安全材料进行加密。

友谊终止

在某些情况下可以终止友谊:

  • 如果 在PollTimeout定时器超时之前,Friend 节点没有收到Friend Poll、Friend Subscription List Add或Friend Subscription List Remove消息,则友谊终止。
  • LPN 可以通过向其Friend 节点发送Friend Clear消息来发起友谊终止程序,从而导致Friend 节点终止友谊。

平台选择技巧

开发人员在选择实施 Friend 和 LPN 的平台时应考虑以下准则:

  • 内存容量。可用的 RAM 量直接影响 Friend 节点可以支持多少 LPN 以及它可以为关联的 LPN 缓冲多少消息。
  • LPN。所选 MCU 和模块的总体功耗性能是 LPN 的关键。此外,从睡眠模式到运行模式的唤醒/预热时间会影响 LPN 的响应能力和延迟。

二、蓝牙MESH网络中的设备管理

蓝牙MESH网络使用不同安全密钥类型的系统来保护整个网络,以及保护和分离网络中的各个应用程序。在这两种情况下,成为网络成员并有权参与特定应用程序都是设备拥有正确安全密钥的结果。网络中的所有节点都拥有一个称为网络密钥或NetKey的密钥。拥有该密钥使设备成为该网络的成员,即其节点之一

1.向网络添加新设备

将设备添加到网络主要涉及为其提供该网络的所有其他节点拥有的网络密钥。当然,该过程本身必须是安全的,以便恶意设备无法窃听在添加新设备时发生的通信并窃取NetKey。

添加新设备到BLE MESH网络过程涉及几个步骤,如下面的流程图所示。

安卓蓝牙mesh组网 蓝牙 mesh组网_安卓蓝牙mesh组网_02

步骤 1. 信标

所述蓝牙MESH网络规范引入了新的GAP的广告类型,包括<<网信标>> AD类型[II]。

设备通过使用< Mesh Beacon >AD 类型将其自身作为未配置的设备来表明其可配置的可用性。用户可能需要按照制造商描述的程序以这种方式启动新设备广告,例如按下按钮组合或按住某个按钮一段时间。

用户还需要在provisioner中启动“将设备添加到网络”过程,这将导致它从信标设备接收广告数据包。请记住,provisioner可能是智能手机或平板电脑应用程序,因此实际上,这涉及解锁智能手机、启动应用程序、可能登录应用程序(以提高安全性)并使用其用户界面开始寻找信标设备. 通过这种方式,provisioner了解新设备并准备好完成其余的供应过程。

步骤 2. 邀请

接下来,provisioner向要供应的设备发送邀请消息。邀请采用供应 Invite PDU 的形式,它是供应协议的一部分。所述信标设备响应以在供应功能PDU关于自身的信息。

Provisioning Capabilities PDU 提供诸如它拥有的元素数量和它支持的与供应相关的算法等信息。它还指示设备具有的输入和输出功能的类型,以及在身份验证步骤中使用的信息。

步骤 3. 交换公钥

所有蓝牙®MESH网络设备,包括provisioner,都支持 FIPS P-256 椭圆曲线算法,因此必须有一个公钥。基于此算法的非对称加密用于创建安全通道,通过该通道执行剩余的配置过程。为此,provisioner和设备交换他们的公钥。请注意,设备可能会通过带外方法(例如 QR 码)提供其公钥。我们将在后面的文章中关注网格安全,包括配置安全。

步骤 4. 身份验证

所述供应者利用其的新设备的能力的知识和发送一个消息给它,它指示输出要么响应于各种支持的用户动作,诸如按压按钮中的一个的单或多位数的值。根据设备的不同,输出时值的形式会有所不同。一个设备可能会在 LED 面板上显示一个三位数的数值,而另一个可能会多次闪烁红色 LED,闪烁的次数就是输出验证值。Provisioner 的用户将观察设备输出的值并将其输入到 Provisioner 用户界面中。

然后,设备和provisioner交换一个加密散列,该散列源自包含设备输出的随机值的数据,允许他们完成对等方的身份验证。

步骤 5. 供应数据的分发

经过身份验证已成功完成,会话密钥是由每两台设备的从自己的私人密钥导出和交换,远端公钥。然后,会话密钥用于保护完成配置过程所需的数据的后续分发,包括NetKey和设备的唯一地址,称为单播地址

配置完成后,被配置的设备拥有网络的 NetKey,这是一个蓝牙®MESH安全参数,称为IV 索引,并且它有一个由配置者分配的单播地址。新设备现在正式成为蓝牙MESH网络的节点和成员。

2.从网络中删除节点

节点包含安全密钥,这些密钥是通过配置过程提供的。请记住,它拥有确定设备是网络成员并因此可以访问它的主NetKey。在您丢弃或出售设备时将与蓝牙MESH网络相关的密钥留在设备中可能会使您的网络容易受到垃圾桶攻击。因此,已经定义并且将在此处描述消除这种担忧的用于移除节点的安全过程。

从网络中删除节点涉及两个步骤。
1、首先,provisioner应用程序需要将要删除的节点添加到拒绝列表。
2、其次,启动称为密钥刷新过程的过程

拒绝清单

使用provisioner,用户必须将要删除的节点添加到其拒绝列表中。拒绝列表的目的只是充当那些在启动密钥刷新程序时不得发布新安全密钥的节点的列表。

密钥刷新过程

键刷新程序导致网络中的所有节点,除了那些成员拒绝列表,正在与新的网络键,应用程序键和所有相关的,得出的数据发出。换句话说,构成网络和应用程序安全基础的整套安全密钥被替换。

用户使用provisioner启动密钥刷新,provisioner使用配置消息创建并向网状网络中的每个节点发送新密钥,拒绝列表成员除外。

低功耗节点将从他们的friend那里收到新密钥。因此,在他们收到它们之前可能需要相当长的时间,因此整个网络的密钥被替换。

由于每个节点不会在完全相同的时间收到其新密钥,因此密钥刷新程序定义了一个称为“阶段 2”的过渡期,在此期间旧密钥和新密钥都被使用。具体来说,传输使用新密钥,但支持接收消息的节点同时使用旧密钥和新密钥。

当第 2 阶段完成并且每个未被拒绝列出的节点都收到其新密钥时,provisioner通知所有节点他们应该撤销旧密钥。

此时,从网络中删除并包含旧NetKey和旧AppKey集的节点不再是网络成员,因此不构成威胁。

BLE MESH组网(一)简介BLE MESH组网(二)友谊功能和设备管理BLE MESH组网(三)普通BLE如何添加到网络BLE MESH组网(四)安全概述BLE MESH组网(五)配置BLE MESHBLE MESH组网(六)配置BLE MESH