Mesh(三)----Provision

Provision statck

下图是provision的stack架构,分为三层,左边基于Adv,右边基于GATT


Mesh(三)----Provision_第1张图片
image.png

Provision bearer layer

bearer,送信人的意思,表示传输媒介
两种bearer构成:

  • PB-ADV
  • PB-GATT

一个未配对的设备应该支持上述两种中的一种,强烈建议都支持。
Provisioner(发起配对方)应该支持至少一种,强烈建议支持PB-ADV

PB-ADV

通过adv channels传递Generic Provisioning PDUs,基于会话,一个未绑定的设备只能同时支持一个会话,Provisioner没有限制。会话的建立使用Link Establishment procedure。
MTU(maximum transmission unit)大小是24个字节
设备要能主动扫描(close to 100% duty)避免丢包。
任何使用PB-ADV的广播应该是非连接的非定向扫描的。(non-connectable, non-scannable undirected)

PB-ADV数据格式:


Mesh(三)----Provision_第2张图片
image.png

PB-ADV PDU格式


Mesh(三)----Provision_第3张图片
image.png
  • Link ID:
    区分每个link
  • transaction number:

PDU过长,分段,所有的分段使用同样的transaction number。
PDU重发的时候,分段号也不变。
Provisioner上该值的范围0x000x7F,device上该值的范围0x800xFF。
当一个设备收到Provisioning PDU,它应该把该值设置为收到的值
当一个设备发送Transaction Acknowledgement PDU,该值应该被设为被承认的PB-ADV中的值----发ack的时候,使用双方协定好的transaction number。

PB-GATT

允许绑定设备,通过Proxy PDUs。
连接间隔建议250ms~1000ms

Proxy Protocol
该协议允许节点收发Network PDUs,mesh beacons,proxy configuration messages and Provisioning PDUs over a connection-oriented bearer。
Proxy PDUs包含Network PDUs,Mesh beacons, proxy configuration messages or provisioning PDU。
mesh消息转发的协议

Generic Provisioning layer

传输Generic Provisioning PUDs的。

Generic Provisioning PDU types:

  • Transaction Start
  • Transaction Acknowledgement
  • Transaction Continuation
  • Provisioning Bearer Control(会话管理)
    • Link Open
    • Link ACK
    • Link Close
    • RFU(reserved for future use)

Link Establishment procedure

不同设备靠Device UUID区分
Device UUID,128-bit UUID,因为mac地址太简单了,不够复杂

Mesh(三)----Provision_第4张图片
image.png
  • 每个Generic Provisioning PDU应该有20~50ms延时
  • 分段
  • segments index 0~63个,第一个发transaction start PDU, 其他的发transaction continuation PDU.

Provisioning protocol

Provisioning PDUs

发起者和设备之间交流的媒介。
格式如下:

Mesh(三)----Provision_第5张图片
image.png

type如下:

Mesh(三)----Provision_第6张图片
image.png

传输层协议使用带外数据(out-of-band,OOB)来发送一些重要的数据,如果通信一方有重要的数据需要通知对方时,协议能够将这些数据快速地发送到对方.为了发送这些数据,协议一般不使用与普通数据相同的通道,而是使用另外的通道.

Provisioning behavior

Provisioning is performed using a five-step process:

  • beaconing
  • invitation
  • exchanging public keys(ECDH加密用的)
  • authentication
  • distribution of the provisioning data

ECDH,Deffie-Hellman 算法是 密钥交换算法,它的作用是解决如何在不安全的信道中安全的传输一些信息(主要是交换对称加密的密钥/参数)。ECDH 就是使用椭圆曲线函数的 DH 算法
a,b都有一对公钥,各自根据公钥计算出密钥,使用该密钥就行加密

下图是Provisioning process的整体流程,在下一节会对每个流程做详细描述。


Mesh(三)----Provision_第7张图片
image.png

Provisioning errors

一旦中间失败,没有恢复机制,必须从新开始配对。
发起方发生错误,会立即断开连接。
接收方发生错误,发送一个Failed PDU给发起方,由发起方断开连接。60s超时后,可以不同发送Failed PDU。

流程详解

基于PB-ADV

Mesh(三)----Provision_第8张图片
image.png
  • Invitation & Capabilities

    建立连接,检测device的兼容性。
    兼容性主要指:支持什么加密方式,(目前只有一种加密方法FIPS P-256 Elliptic Curve,
    就是ECDH),支不支持OOB等一些行为。

  • Exchanging public keys

    支持加密,即交换公共密钥,不支持不用

不支持加密的流程

Mesh(三)----Provision_第9张图片
image.png

支持加密的流程


Mesh(三)----Provision_第10张图片
image.png
  • Authentication
    认证,主要有三种方式。
    1.Output OOB
    device上展示一个Random number,用户在provisioner上输入这个number
    2.Input OOB
    provisioner上展示一个Random number,用户在device上输入
    3.Static OOB/no OOB
    没有Random number
    下述是三种方式的流程图
    Output OOB


    Mesh(三)----Provision_第11张图片
    image.png

Input OOB


Mesh(三)----Provision_第12张图片
image.png

Static OOB

Mesh(三)----Provision_第13张图片
image.png

  • Distribution of Provisioning data
    该环节主要用来发送Network Key,IV index, Unicast Address(分配给节点的)等信息。然后该环节还会计算出一个session key用来加密Provisioning data。
    Provisioning data如下:


    Mesh(三)----Provision_第14张图片
    image.png

加密

目前只支持一种加密方式FIPS P-256 Elliptic Curve,整体加密流程如下:
P是public key


Mesh(三)----Provision_第15张图片
image.png
Mesh(三)----Provision_第16张图片
image.png

最终算出一个session key用来加密provisioning data这些信息。

你可能感兴趣的:(Mesh(三)----Provision)