设备在一个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入网。

流程

  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 成功入网,并获得被分发的密钥;其余三种认证信息交换方式是安全的,可以防止中间人攻击。

【BLE MESH】PB-ADV入网详解相关推荐

  1. 【BLE】OTA基础知识详解

    [BLE]OTA基础知识详解 一. 概念 1. 缩写 BIM Boot Image Manager , the software bootloader CRC cyclic redundancy ch ...

  2. Mesh减面算法详解

    本篇文章所讲述如何实现mesh减面工具. 思想由作者创建. 目录 1.Unity Mesh对象里的数据构成 2.智能减面详解 Unity Mesh对象里的数据构成   这里主要介绍相关的数据,如下图. ...

  3. 蓝牙Sig Mesh 概念入门⑤——Mesh通信消息格式详解

    文章目录 一.Access Layer 二.Transport layer 三.Network layer 3.1 Address 3.2 Network PDU 3.3 Network transm ...

  4. android 蓝牙耗电量,安卓Android BLE低功耗蓝牙接受数据详解 只需100行代码轻松搞定...

    做了一个安卓手机通过蓝牙获取电子秤的重量的Demo,在此写下以供大家参考和讨论. 先上代码,着急用的可以迅速参考,后面再写说明 我跳过了扫描过程,直接根据蓝牙设备地址进行连接,可以运行官方Demo来获 ...

  5. 【IoT】TI BLE CC2541 串口控制蓝牙详解

    一.简介 本文以SimpleBLECentral工程为例,介绍串口控制蓝牙. 过程: 扫描从机 - 根据从机号连接指定从机 - 获取RSSI值(信号强度) - 向char1写入特征值 - 断开连接 二 ...

  6. Android BLE蓝牙4.0开发详解

    这篇博客主要讲解 蓝牙 BLE 的用法.在讲解之前先讲一些概念性的东西,对于之前没接触过蓝牙开发,现在手上又有个蓝牙BLE项目需要做的人,先看下这些概念还是很重要的.因为我之前就是这样,之前没有接触过 ...

  7. (五)深入理解蓝牙BLE之“Beacon包格式详解”

    目录 链路层包格式: beacon格式: 自定义beacon帧格式: 各大公司申请的UUID:

  8. iOS BLE蓝牙开发数据传输协议详解 常用算法(AES加密 HMAC_hash PRF)

    前言 这段时间参与了一款与蓝牙外设交互的项目, 以前没有涉及过数据传输方面的开发, 踩了不少坑, 同时也学到了很多东西. 此时, 项目也即将进入尾声, 有时间把这些记录一二. 本人才疏学浅, 如有错误 ...

  9. Android 蓝牙BLE开发详解

    Android 蓝牙BLE开发详解 由于年初接手了个有关蓝牙BLE的项目,开始了对蓝牙ble的学习,经过长时间的慢慢学习(学得太慢,太拖了),终于了解了该怎么写蓝牙BLE,现在就给大家分享一下. 一. ...

最新文章

  1. 高性能和可扩展的React-Redux
  2. PHP版Leetcode题解开始随缘更新
  3. Dev-C++ 调试方法简明图文教程
  4. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》
  5. pytorch基础知识整理(二)数据加载
  6. 【机器视觉】 dev_set_colored算子
  7. css3波浪纹路_使用CSS3实现的波浪分隔线
  8. markdown 常用语法总结 - 个人版
  9. 2021新茶饮研究报告
  10. [cdq分治][树状数组] Bzoj P3262 陌上花开
  11. delphi 获取驱动盘的卷标 号
  12. java list stream 去除 null_Stream流的这些操作,你得知道,对你工作有很大帮助
  13. 虎牙直播源解析【可选清晰度】
  14. 网页版微博HTML解析和提取,爬虫聚焦——以新浪微博为例
  15. 联想电脑BIOS失败教程
  16. python3 词频统计计数分析+可视化词云 jieba+wordcloud 数据分析
  17. 1260Completed String
  18. mt管理器java_MT管理器
  19. 安装 truffle (CentOS7 与 Windows)
  20. android uefi 编译报错,【Android SDM660开机流程】- UEFI XBL 代码流程分析

热门文章

  1. 在线人数统计和总访问量统计
  2. 如何使用python在一个图片内显示多个函数图像及其数学公式
  3. EAN13条形码绘制(Delphi版)
  4. RK3588 烧写固件
  5. clickhouse连接Tableau
  6. 计算机视觉注意力网络(三)——CBAM [ECCV 2018]
  7. [日常技能]手机投屏到电视的5种方法
  8. word2003,使用修订模式
  9. imagin.vmem取证
  10. 基于Spring Boot的校园志愿者服务网站