前言

蓝牙Mesh配网就是通过配网器配置未配网设备,将未配网设备加入网络中,使其成为蓝牙mesh网络的节点;配网数据中包括分发网络密钥(network key)、元素单播地址(unicast address)和IV Index

为了提高配网效率,厂家会增加私有协议来完成快速配网的功能如有异议,欢迎留言指正

配网协议

配网分层架构

蓝牙mesh组网源码 蓝牙mesh组网原理_随机数

配网承载

承载层是用来在配网器和未配网设备之间传输配网PDU的,蓝牙Mesh规范定义了两种承载:

  • PB-ADV:通过蓝牙BLE广播信道(不可连接且不能扫描的非定向广播),用于传输通用配网PDU,MTU(最大传输单元)是24字节。一个支持PB-ADV的设备需要开启BLE扫描(100%的执行占空比)获取配网PDU

字段

字节长度

描述

Length

1

AD类型和PDU的长度

AD Type

1

AD类型(PB-ADV)

Contents

可变

PB-ADV PDU

PB-ADV的PDU数据格式

字段

字节长度

描述

Link ID

4

当前承载层建立的连接ID(标识两个设备之间的连接)

Transaction Number

1

每个PDU的唯一标识符(分包与重传)

Generic Provisioning PDU

1-24

通用配网PDU

  • PB-GATT:PB-GATT是另一种配置承载,通过代理PDU来配网(手机平板通过代理协议配网)
配网协议

配网PDUs用来在配网器和未配网设备之间进行通信的基本单元

字段

长度(bits)

描述

Padding

2

0b00,其他值被禁止

Type

6

配网PDU的类型值

Parameters

可变

消息参数

蓝牙mesh组网源码 蓝牙mesh组网原理_随机数_02

蓝牙Mesh定义了10种配网PDU,所有PDU都可以在整个配网流程中使用

Type

Name

Description

0x00

Provisioning Invite

邀请设备加入mesh网络

0x01

Provisioning Capabilities

设备配置能力

0x02

Provisioning Start

启动配置,配网器选择配置方法

0x03

Provisioning Public Key

配置公钥

0x04

Provisioning Input Complete

配置输入完成

0x05

Provisioning Confirmation

配置确认

0x06

Provisioning Random Contains

包含配网器和设备的随机数

0x07

Provisioning Data

配置数据,包括主元素的指定单播地址、网络密钥、网络密钥索引、标志和IV索引

0x08

Provisioning Complete

配置完成

0x09

Provisioning Failed

配置失败

配网流程

配网流程分为5个阶段:

  • 信标(Beconing)阶段
  • 邀请(Invitation)阶段
  • 交换公钥(Exchange Public Keys)阶段
  • 身份认证(Authentication)阶段
  • 分发配网数据(Distribution Of Provisioning Data)阶段
信标阶段

信标主要是为了配网器发现周边未配网的设备

  • 支持PB-ADV bearer的设备,会广播未配网的设备信标,信标中会带有设备的UUID,每个设备的UUID均不相同
  • 支持PB-GATT bearer的设备,也会广播带有配网服务UUID的广播报文
    两种配网都支持的话,设备会间隔广播两个类型;(如下图中无OOB信息认证)
邀请阶段

在信标阶段结束后,配网器和未配网设备通过PB-ADV或PB-GATT承载建立连接,进入邀请阶段

蓝牙mesh组网源码 蓝牙mesh组网原理_ble mesh_03

配网能力消息由设备发给配网器,表示设备支持的能力,包括加密算法、公钥类型、静态OOB类型、最大输出OOB大小、是否支持OOB输出行为、最大输入OOB大小、是否支持OOB输入行为

交换公钥阶段

交换公钥阶段,可以使用两种算法交换设备的ECDH公共密钥:明文交换和通过OOB隧道进行交换
在蓝牙mesh规范中,先采用非对称密钥方式计算出对称加密密钥,在网络中消息传输通过对称密钥进行加解密

  • 无OOB机制
  • 蓝牙mesh组网源码 蓝牙mesh组网原理_蓝牙mesh配网_04

  • 使用OOB公钥交互方式
  • 蓝牙mesh组网源码 蓝牙mesh组网原理_随机数_05

身份认证阶段

身份认证阶段是配网器和设备的互相认证过程,通过使用ECDH密钥以及OOB消息对随机数RandomValue加密计算得到ConfirmationValue,双方对比换算得到的ConfirmationValue和接收到的ConfirmationValue来完成认证;
根据配网器和设备的输入输出能力,定义了三种方式

  • 输出式OOB认证
  • 输入式OOB认证
  • 静态OOB认证
  • 无OOB认证
输出式OOB认证

输出式OOB认证方式通过未配网设备产生一个随机数,通过显式的方式(LCD屏幕、LED灯光闪烁等)让使用者获取到并输入到配网器来完成OOB的认证

蓝牙mesh组网源码 蓝牙mesh组网原理_蓝牙mesh组网源码_06

输入式OOB认证

输入式OOB认证是通过配网器生成一个随机数,同样由用户将随机数输入未配网器。与输出式OOB认证对比,输入式OOB认证时,未配网器在随机数输入后需要发送一个输入完成的报文,来通知配网器

蓝牙mesh组网源码 蓝牙mesh组网原理_ble mesh配网_07

静态OOB认证和无OOB认证

当配网器和未配网设备的输入输出受限的情况下,此时可以使用静态OOB或无OOB认证;静态OOB的话双方会预存静态的OOB信息,无OOB认证使用数值0来代替,但可能存在中间人攻击

蓝牙mesh组网源码 蓝牙mesh组网原理_蓝牙mesh配网_08

分发配网数据

身份认证完成之后,会进入分发配网数据阶段,配网器会负责生成分发配置数据,包括如网络密钥(Network Key)、密钥索引、单播地址、IV索引等;分发的数据会通过ECDH密钥派生的会话密钥,然后使用AES-CCM算法进行加解密
配置数据格式

Field

Size(byte)

Note

Network Key

16

网络密钥

Key Index

2

网络密钥索引

Flags

1

标识

IV Index

4

当前IV索引

Unicast Address

2

主元素单播地址

分配数据流程

蓝牙mesh组网源码 蓝牙mesh组网原理_蓝牙mesh组网源码_09

总结

设备配网是蓝牙mesh安全的基石,分发的密钥需要多方数据换算验证,这意味着后续节点能在网络中安全的通信,更多详细请参考蓝牙mesh协议规范