设备在一个mesh网络中通讯,需要获取该mesh网络的net key /dev key/app key等密钥,才能加解密mesh数据包,入网的目的其实就是为了获取这些密钥。MESH协议规定有两种入网方式

  • PB-ADV
  • PB-GATT

这两种入网方式只是承载层不一样,一个是通过BLE GATT层承载,一个是通过广播承载。但是其入网的流程是一致的。一般来讲更推荐使用PB-ADV方式入网,因为mesh协议的数据传输层也是adv,但是对于一些像手机、平板电脑等设备,其是不支持adv通道的ble mesh的,所以通常使用PB-GATT入网。

流程

ble mesh组网 mesh组网怎么连接_身份认证

  1. 邀请入网:要入网的设备会对外广播Mesh Beacon 报文,声明自己是未入网设备,可被启动配网设备Provisioner 发现。启动配网设备Provisioner 发现周围的Mesh Beacon 广播报文后,可以向其发送启动配网邀请报文(启动配网过程可以理解为入网过程),要入网的设备接收到Provisioning Invite 报文后回复一个包含自己支持的启动配网功能的报文Provisioning Capabilities(包括本设备支持的元素数量、支持的一组安全算法、是否支持OOB方式交换公钥、Input/Output 能力等信息);
  2. 创建安全通道:启动配网设备Provisioner 和待入网设备New Device 之间通过BLE 或OOB 方式交换公共密钥,双方通过ECDH 椭圆曲线密钥协商算法生成共享密钥,并通过共享密钥加密后续的通信报文,相当于设备双方创建了一个安全通信链路;
  3. 身份认证:为了防止攻击者伪装成New Device 入网获得NetKey 和AppKey,需要对入网的New Device 进行身份验证。TLS 是通过可信的第三方签名证书来验证通信对端的身份,BLE 作为近场通信协议,可以让配网的人参与验证入网设备的身份。根据待入网设备Input/Output 能力的不同,有Output OOB、Input OOB、Static OOB、No OOB 四种认证信息交换方法,比如New Device 是一个灯 - 用户观察其闪烁次数并输入Provisioner,再比如New Device 是一个开关 - 用户在一定时间内按压Provisioner 显示的次数,再比如New Device 是一个传感器 - 用户让Provisioner 获取该传感器指定的一个静态数值等(No OOB 相当于静态数值为0,这种方式容易被攻击者的伪装设备入网,不够安全,因此较少使用)。无论采用上述哪种认证信息交换方式,都需要根据双方获得的认证信息计算并生成确认值,当双方都通过确认值核对后(也即认证信息核对过程),New Device 通过身份认证,就可以分发密钥了,否则中止启动配网过程;
  4. 分发密钥:Provisioner 与New Device 之间创建安全通信链路,且Provisioner 完成对New Device 的身份验证后,就可以向其分发MESH 网络需要的启动配网信息了,比如为New Device 每个元素分配的Unicast Address、接收并处理消息报文的NetKey / Appkey / Key Index / IV Index、验证后续配置者身份的DevKey(后续Provisioner 凭借DevKey 修改该device 的配置信息,若无对应的DevKey 则无法修改该设备配置)等。

经过上述启动配网过程,入网设备被分发NetKey、Appkey、DevKey 等密钥,只要保证入网设备的身份没问题,密钥分发过程就是安全的。在上述身份认证环节,No OOB 认证信息交换方式是不安全的,可能会让攻击者伪装的New Device 成功入网,并获得被分发的密钥;其余三种认证信息交换方式是安全的,可以防止中间人攻击。