Ble Mesh技术(十一)之Mesh安全

1. Mesh数据加密流程

meshdata1
meshdata2
① AccessPDU由Opcode+Payload组成,在UTransport层进行加密,形成EncUTransportPDU,由EncAccessPDU+TransMIC组成。
② LTrans层将加密后的EncUTransportPDU和未加密的ControlPDU分包后,形成LTransportPDU。
③ Network层将目的地址DST+LTransportPDU进行加密,形成EncNetworkPDU,由EncDST和EncLTransportPDU+NetMIC组成。
④ 再将CTL,TTL,SEQ,SRC再进行混淆。
⑤ 最后在空口暴露的数据只有IVI和NID。

2. Mesh Secure Network Beacon

除了在配网期间,Mesh设备会发送Unprovisioned Beacon外,设备在运行期间还会周期的发送Secure Network Beacon,用以同步网络中的数据,维持网络的安全。
其数据格式如下:
securebeacon

FieldSize(octets)Notes
Beacon Type10x01,表示当前Beacon类型为安全网络Beacon
Flags1当前网络状态。
flagbitmap
Key Refresh Flag:0->未处于更新阶段;1->处于更新阶段。
IV Update Flag:0->未处于更新阶段;1->处于更新阶段。
Network ID8当前的Network ID值
IV Index4当前的IV Index值
Authentication Value8当前网络Beacon数据的授权值,采用AES-CMAC生成。

其中Authentication Value计算如下:
A u t h e n t i c a t i o n _ V a l u e = A E S _ C M A C B e a c o n K e y ( F l a g s ∣ ∣ N e t w o r k _ I D ∣ ∣ I V _ I n d e x ) [ 0 − 7 ] Authentication\_Value=AES\_CMAC_{BeaconKey}(Flags||Network\_ID||IV\_Index)[0-7] Authentication_Value=AES_CMACBeaconKey(FlagsNetwork_IDIV_Index)[07]
安全网络Beacon是节点感知到网络不安全时,发送至网络中的消息,通知网络中的设备进行Key Refresh或IV Update程序。当节点收到Secure Network Beacon时,需要根据Beacon中的Flag域,在本地开启对应的更新程序。
为了避免网络中出现大量的Secure Network Beacon,需要对Beacon的量进行限制,期望每个节点在一个子网中大约每10s能收到一个Beacon。则每个节点发送Beacon的周期计算如下:
I n t e r v a l B e a c o n = P e r i o d O b s e r v a t i o n ∗ N O b s e r v e d + 1 N E x p e c t e d Interval_{Beacon}=Period_{Observation}*\frac{N_{Observed}+1}{N_{Expected}} IntervalBeacon=PeriodObservationNExpectedNObserved+1
在观察窗口期间,得到在此期间收到的Beacon数量 N O b v e r v e d N_{Obverved} NObverved,根据每个节点在一个子网中大约每10s能收到一个Beacon,即 P e r i o d O b s e r v a t i o n = 10 ∗ N E x p e c t e d Period_{Observation}=10*N_{Expected} PeriodObservation=10NExpected,得到此节点的Beacon发送周期。可以知道每个节点的Beacon发送周期都是不同的,是根据当前网络的状态实时计算出来的。

3. Key Refresh procedure

Key Refresh procedure的目的是删掉节点中key,用一个new key来替代它。秘钥刷新程序主要有三个阶段,分发new key,使用new key,抛弃old key。其示意图如下:
keyrefresh
第一阶段:
① 配置客户端通过Device Key指定要更新的节点,未被更新的节点可视为被抛弃的节点。此时进入第一阶段。
② 配置客户端给每个需要更新的节点发送Config NetKey Update或者Config AppKey Update来分发new key。
③ 节点收到分发的new key后,响应给配置客户端status消息。
④ 在此阶段,节点使用old key发送消息,使用old/new key接收消息。
第二阶段:
① 当配置客户端收到所有更新节点的respond后,说明所有要更新的节点都有了new key。此时进入第二阶段。
② 配置客户端发送Secure Network Beacon,设置其中的Key Refresh flag域为1,并且使用new key进行加密。或者发送Config Key Refresh Phase Set消息给指定的节点,设置参数为0x02。
③ 当节点收到Key Refresh flag域为1的Secure Network Beacon消息或者参数为0x02的Config Key Refresh Phase Set消息时,表示节点应该进入阶段2。
④ 在此阶段,节点使用new key来发送消息,使用old/new key来接收消息,并且只接受使用new key加密的Secure Network Beacon。
第三阶段:
① 当配置客户端认为所有需要更新的节点都进入了阶段2时,此时进入第三阶段。
② 配置客户端发送Secure Network Beacon,设置其中的Key Refresh flag域为0,并且使用new key进行加密。或者发送Config Key Refresh Phase Set消息给指定的节点,设置参数为0x03。配置客户端在自己数据库删除old key。
③ 当节点收到Key Refresh flag域为0的Secure Network Beacon消息或者参数为0x03的Config Key Refresh Phase Set消息时,表示节点应该进入阶段3。若阶段1的节点收到此类消息,则跳过阶段2,直接进入阶段3。(因为阶段2到阶段3的转变时机是不能保证的,即配置客户端不能确保所有需更新的节点都进入了阶段2,但可以保证所有需更新的节点都收到了new key。因此节点拥有new key,并收到使用new key加密的第三阶段Secure Network Beacon或Config Key Refresh Phase Set,则可以直接进入阶段3)
④ 在此阶段,节点使用new key来发送消息,使用new key来接收消息。
在阶段描述中,使用第一二三阶段来描述配置客户端的状态,即当前网络的整体秘钥刷新状态,使用阶段123来描述每个节点的本地秘钥刷新状态。
Node Removal procedure: 通过Key Refresh程序移除该节点相关的key,然后配网者回收该节点的单播地址,在一次IV Update后,此时Sequence Number置为0,然后下次配网就可以使用此Unicast Address。

4. IV Update procedure

IV Update的发起者可以是主网中(Netkey Index=0x000)任意一个节点。当节点认为自己或者其他节点的Sequence Number在96h之后即将耗尽,则会发起IV更新,这也是为什么LPN的PollTimeout的最大值为96h的原因,保证LPN必定能收到一次IV Update的Secure Network Beacon。
ivupdate
① 在正常状态下,节点发送消息使用当前IV值,接收消息使用当前IV值和当前IV值减1
② 在正常状态下,当收到Secure Network Beacon中的IV Index大于节点的当前IV值加1,则节点需要发起IV Index Recovery procedure。
③ 在正常状态下,当收到Secure Network Beacon中的IV Index等于节点的当前IV值加1,并且Secure Network Beacon中的IV Update Flag=0,则说明这个节点可能错过IV Update Flag=1的消息,要么直接更新IV或者发起IV Index Recovery procedure,或者无视这条消息。
④ 在正常状态下,当收到Secure Network Beacon中的IV Index大于节点的当前IV值加42,则该节点需要被重新配网,即设备关机48weeks则需要重新配网。
⑤ 正常使用96h后,如果检测到Sequence Number在96h后即将耗尽,此时会从正常状态转化为IV更新状态,发起IV Update程序,即广播IV Update Flag=1的Secure Network Beacon,并且把当前的IV值加1。
⑥ 在正常状态下,如果收到IV Update Flag=1的Secure Network Beacon,则进入IV更新状态,此时IV值加1。
⑦ 在IV更新状态下,发出的Secure Network Beacon消息和Friend Update消息里面的IV Update Flag都需要设置为1,并且消息发送使用当前IV值减1,接收消息使用当前IV值减1和当前IV值
⑧ 在IV更新状态下至少96h,最多144h后,节点会从IV更新状态转换成正常状态,此时节点发送消息使用当前IV值,接收消息使用当前IV值和当前IV值减1,并且本地的Sequence Number设置为0x000000,此时向外广播的Secure Network Beacon,设置其IV Update Flag=0。(Secure Network Beacon是一直都有的,不同的设备发送的周期不同,保证整体上平均每个节点10s都能收到一次)
⑨ 在IV更新状态下,收到IV Update Flag=0的Secure Network Beacon,则转换为正常状态。
⑩ 在IV更新状态下,节点需要等待分段消息处理完毕,才能转换成正常状态,这样保证分段消息中的SeqAuth值是不变的。
总之:
IV Update是用来保证Sequence Number不会溢出设置的机制,因此更新过程中只要保证任何状态下都能收到对端的消息就行,能更新就更新,反正用不完,但又不能无限制的发起IV Update,所以就有了96h的限制。节点通过配网者加入网络时,此时若网络正处于IV更新状态下,则节点需要在96h内完成IV更新的操作转变为正常状态;若网络处于正常状态下,则节点在96h后才能响应网络中的IV更新。由于96h的时间限制,所以通过IV Update test mode可以移除96h的限制来对IV更新的功能进行测试。
IV Index Recovery procedure:
用来恢复本地IV值小于当前网络IV值减1且大于等于当前网络IV值减42的设备IV值,直接赋值为当前Secure Network Beacon中的IV Index值和IV Update Flag里的状态,并且维持96h不变。
在一个节点内IV Update和Recovery在192h内不能处理超过两次

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值