Provisioning a Bluetooth Mesh Network他山之石(一):蓝牙Mesh 技术一起学 配网(1)

蓝牙Mesh配网

任大神的这篇文章之前我也转帖过,因为配网这个过程在蓝牙mesh里面是头一遭,很多人都想搞清楚到底配网是怎么样的,和之前的BLE有没有区别。终于有一点时间把这篇文章的主要部分翻译了一下,也加了一些大威自己的理解。想啃E文的请移步到 Provisioning a Bluetooth Mesh Network Part 1

 

概述

配网是把一个新的,没有配网过的设备加到一个蓝牙mesh的网络中,比如灯泡。 配网是由配网器来管理的。在规格书里面,配网器和未配网设备要遵循一套固定的流程。配网器提供配网数据来使得未配网设备成为一个Mesh节点。

常常有人问配网器是什么?因为在以前的蓝牙设备里面没有这样的设备。其实配网器可以是一个手机,或者是其他运行配网程序的移动设备。尽管一个网络只需要一个配网器,但是多个配网器在一个mesh网络中也是可以的。

配网协议

规范定义了配网协议。比如定义了在配网器和未配网设备之间通讯的PDU。 图1 诠释了在全蓝牙Mesh协议栈中的配网协议栈。

 

图 1: Mesh system architecture vs. provisioning protocol stack.

从协议的底层到上层有这样的几个部分:

1.Provisioning Bearer 配网承载

配网承载负责配网器和未配网设备中间传输配网PDU的功能。分为两类:

  • PB-ADV: 通过蓝牙的广播信道来配网。PB-ADV承载用于通用配网PDUs。一个支持PB-ADV的设备需要实现接近100%占空比的被动Scanning来避免错过任何发过来的通用配网PDU。
  • PB-GATT: 另外一个配网承载用于通过代理协议的代理PDU来配网。 代理协议使节点可以发送和接收网络PDU,Mesh信标,代理配置信息,和通过连接BLE承载的配网PDU。PB-GATT 封装通过使用GATT的方式来配网。主要适用于不支持PB-ADV的配网器。

2. Provisioning protocol配网协议

定义了配网所需的PDU,行为和安全等。理解配网协议能帮助大家选择一个适用于应用需求的认证。

 

The Provisioning Procedure 配网方式

配网协议定义了10个类型的配网PDU:

1. Provisioning Invite

2. Provisioning Capabilities

3. Provisioning State

4. Provisioning Public Key

5. Provisioning Input Complete

6. Provisioning Confirmation

7. Provisioning Random

8. Provisioning Data

9. Provisioning Complete

10. Provisioning Failed

具体大家请参看规格书section 5.4.1 从大块来讲,配网过程要完成这两件事情。

1. 未配网设备的认证。在蓝牙mesh的网络中,可能在很想的空间存在于很多的设备,认证是要保证进行配网设备的设备是用户想要入网的。

2. 和未配网设备建立一个安全链接,同时分享相关的信息。在流程的最后阶段,要使得未配网设备成为mesh网络的一个节点。

配网有5个阶段:

1. Beaconing 信标

2. Invitation 邀请

3. Exchange public keys 交换公钥

4. Authentication 认证

5. Distribution of provisioning data 分发配网数据

1. Beaconing 信标

信标是一个传统的BLE的应用场景。蓝牙mesh提供了同样的广播机制。

如果一个未配网的设备支持PB-ADV bearer, 它就会广播 未配网设备信标。这是一个特别的报文,使得配网器能够发现这个设备。

如果使用的是PB-GATT bearer,需要一个叫做Mesh Provisioning Service的 GATT Service。在信标环节,未配网设备广播的数据里带有该UUID。所以配网器是通过标准的BLE SCAN的流程来找到这个设备的。

2. Invitation 邀请

信标阶段结束以后,配网器和未配网设备通过PB-ADV或者PB-GATT进行了初步的接触,接下来配网器会发送一个配网邀请PDU,未配网设备就会相应的发一个响应包。

配网邀请PDU包含一个Attention Duration信息, 它是一个时间信息,主要用于告诉配网设备你的主要元素要吸引用户注意力多久。大威注: 是不是看不懂,怎么吸引注意力?简单说, 就是要配网的设备,你总是要告诉用户你开始配网了。比如闪闪灯,响几声。这个时间是以秒记的。

配网能力PDU包含:

  • The number of elements the device supports. 设备有的元素数量
  • The set of security algorithms supported. 支持的安全机制
  • The availability of its public key using an Out-of-Band (OOB) technology. 公钥的使用OOB的方法
  • The ability for this device to output a value to the user. 输出一个值给用户的能力
  • The ability for this device to allow a value to be inputted by the user. 用户输入值的能力
大威注:这里的内容比较多。先把PDU贴在这里。再贴一个关于用户输入值的能力的表格,看看现在支持怎么样的用户输入。看到了吧,大概就这些。什么push啊,扭啊,数字输入,字母输入等。这些和设备的种类其实有比较大的关系。

配网能力PDU定义

 

图2 BLE的配对过程

通过图2 我们回忆了BLE的配对过程。这一流程和mesh的配网邀请过程是非常相似的。

3. Exchange Public Keys 交换公钥

有两种加密信息的技术:对称加密(密钥加密)对称加密(公钥加密)。

Symmetric encryption 对称加密 使用同样的密钥来加密和解密。因为发送端和接收端都知道密钥,他们可以加密和解密所有的报文。但是,这种方法使得交换密钥会非常困难,很难保证这个密钥不落入他手。

Asymmetric encryption 非对称加密,使用两个相关密钥,一对密钥--公钥和私钥,来解决刚才对称加密遇到的问题。公钥可以给任何需要发信息给你的设备,而私钥是保密的,只有你自己知道。任何使用公钥来加密的信息(文字,二进制文件或者对称密钥)只能使用相同的算法和对应的私钥才能解密。这意味着你不用担心传输公钥,因为他只能加密而不能解密。但是非对话加密会要求更多的处理能力和时间来完成加密和解密。

大威注: 这是一些基本的加解密的概念。如果还不清楚,可以参考一些文章,比如:https://www.cnblogs.com/jfzhu/p/4020928.html

在蓝牙Mesh的使用场合,大部分的设备是基于嵌入式芯片或者模块的,所以如果每次通信都用非对称加密的话代价太大。所以蓝牙选择的是两种方式的结合。

Asymmetric cryptography不对称密码:椭圆曲线Diffie–Hellman
(ECDH)是一种匿名密钥协议协议,允许双方各有一个椭圆曲线公私密钥对,在不安全的通道上建立一个共享的秘密。在蓝牙网格配置中,ECDH的目的是允许创建配网者和未配网设备之间的安全链接。它使用公钥和私钥分发一个对称密钥,这两个设备可以用来加密和解密后续消息。

  • Symmetric cryptography:对称密码:在蓝牙Mesh网络中传输的每条消息都使用AES - 128加密技术进行加密。AES - 128算法是一种通用的对称加密/解密引擎,常用于嵌入式平台。

在交换公钥阶段,有两种方法可以交换ECDH公共密钥。它们可以通过蓝牙连接或通过OOB隧道进行交换。在配网邀请阶段,未配网设备已经报告是否支持通过OOB隧道发送其公钥。如果支持,配网者人可以继续使用它,并通过发送一个配网启动PDU通知未配网设备。

如果没有未配网设备支持通过OOB隧道的公钥交换,那么一个临时的公钥就从配网者传输到设备,未配网设备可以使用适当的OOB技术来读取一个静态公共密钥 (比如二维码),见图。如果不支持OOB隧道,那就通过一个BLE的连接通道交换,见图4

Figure 3 - Public key exchange when the unprovisioned device uses an OOB method

Figure 4 - Public KeyExchange when unprovisioned device public key is unknown.

 

ECDHSecret =P-256(private key, peer public key)

In this equation,P-256 is the FIPS-P256 curve which is defined in FIPS 186-3.

未完待续!

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值