【BLE MESH】PB-ADV入网详解
设备在一个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入网。
流程
邀请入网:要入网的设备会对外广播Mesh Beacon 报文,声明自己是未入网设备,可被启动配网设备Provisioner 发现。启动配网设备Provisioner 发现周围的Mesh Beacon 广播报文后,可以向其发送启动配网邀请报文(启动配网过程可以理解为入网过程),要入网的设备接收到Provisioning Invite 报文后回复一个包含自己支持的启动配网功能的报文Provisioning Capabilities(包括本设备支持的元素数量、支持的一组安全算法、是否支持OOB方式交换公钥、Input/Output 能力等信息);
创建安全通道:启动配网设备Provisioner 和待入网设备New Device 之间通过BLE 或OOB 方式交换公共密钥,双方通过ECDH 椭圆曲线密钥协商算法生成共享密钥,并通过共享密钥加密后续的通信报文,相当于设备双方创建了一个安全通信链路;
身份认证:为了防止攻击者伪装成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 通过身份认证,就可以分发密钥了,否则中止启动配网过程;
分发密钥: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入网详解相关推荐
- 【BLE】OTA基础知识详解
[BLE]OTA基础知识详解 一. 概念 1. 缩写 BIM Boot Image Manager , the software bootloader CRC cyclic redundancy ch ...
- Mesh减面算法详解
本篇文章所讲述如何实现mesh减面工具. 思想由作者创建. 目录 1.Unity Mesh对象里的数据构成 2.智能减面详解 Unity Mesh对象里的数据构成 这里主要介绍相关的数据,如下图. ...
- 蓝牙Sig Mesh 概念入门⑤——Mesh通信消息格式详解
文章目录 一.Access Layer 二.Transport layer 三.Network layer 3.1 Address 3.2 Network PDU 3.3 Network transm ...
- android 蓝牙耗电量,安卓Android BLE低功耗蓝牙接受数据详解 只需100行代码轻松搞定...
做了一个安卓手机通过蓝牙获取电子秤的重量的Demo,在此写下以供大家参考和讨论. 先上代码,着急用的可以迅速参考,后面再写说明 我跳过了扫描过程,直接根据蓝牙设备地址进行连接,可以运行官方Demo来获 ...
- 【IoT】TI BLE CC2541 串口控制蓝牙详解
一.简介 本文以SimpleBLECentral工程为例,介绍串口控制蓝牙. 过程: 扫描从机 - 根据从机号连接指定从机 - 获取RSSI值(信号强度) - 向char1写入特征值 - 断开连接 二 ...
- Android BLE蓝牙4.0开发详解
这篇博客主要讲解 蓝牙 BLE 的用法.在讲解之前先讲一些概念性的东西,对于之前没接触过蓝牙开发,现在手上又有个蓝牙BLE项目需要做的人,先看下这些概念还是很重要的.因为我之前就是这样,之前没有接触过 ...
- (五)深入理解蓝牙BLE之“Beacon包格式详解”
目录 链路层包格式: beacon格式: 自定义beacon帧格式: 各大公司申请的UUID:
- iOS BLE蓝牙开发数据传输协议详解 常用算法(AES加密 HMAC_hash PRF)
前言 这段时间参与了一款与蓝牙外设交互的项目, 以前没有涉及过数据传输方面的开发, 踩了不少坑, 同时也学到了很多东西. 此时, 项目也即将进入尾声, 有时间把这些记录一二. 本人才疏学浅, 如有错误 ...
- Android 蓝牙BLE开发详解
Android 蓝牙BLE开发详解 由于年初接手了个有关蓝牙BLE的项目,开始了对蓝牙ble的学习,经过长时间的慢慢学习(学得太慢,太拖了),终于了解了该怎么写蓝牙BLE,现在就给大家分享一下. 一. ...
最新文章
- 高性能和可扩展的React-Redux
- PHP版Leetcode题解开始随缘更新
- Dev-C++ 调试方法简明图文教程
- 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》
- pytorch基础知识整理(二)数据加载
- 【机器视觉】 dev_set_colored算子
- css3波浪纹路_使用CSS3实现的波浪分隔线
- markdown 常用语法总结 - 个人版
- 2021新茶饮研究报告
- [cdq分治][树状数组] Bzoj P3262 陌上花开
- delphi 获取驱动盘的卷标 号
- java list stream 去除 null_Stream流的这些操作,你得知道,对你工作有很大帮助
- 虎牙直播源解析【可选清晰度】
- 网页版微博HTML解析和提取,爬虫聚焦——以新浪微博为例
- 联想电脑BIOS失败教程
- python3 词频统计计数分析+可视化词云 jieba+wordcloud 数据分析
- 1260Completed String
- mt管理器java_MT管理器
- 安装 truffle (CentOS7 与 Windows)
- android uefi 编译报错,【Android SDM660开机流程】- UEFI XBL 代码流程分析