ble mesh-provisioning组网流程详解(1)
组网过程(provisioning)是ble mesh 核心流程,先从宏观上了解整个组网过程,再深入到协议的算法,个人认为更加容易接受一些。
请尊重原创,引用请标明出处https://editor.csdn.net/md/?articleId=104375184
组网流程图![](/assets/blank.gif)
总结为五个步骤:
- beaconing 信标
- 邀请入网,交换设备能力信息(support feature,io cap)
- 交换public key
- 加密,
- 分发组网数据
初步印象,整个过程跟ble smp 流程非常相似。
Beaconning
一个全新的设备,没有加入过任何网络
如果需要加入到mesh 网络,需要向porvisioner 发送ADV
要告诉周围的设备,希望加入mesh 网络,并且现存网络中的设备处于scan 模式,能够收听到这个讯息,注意两点
- provisioner 需要处于scan 模式
- new device 发送Unprovisioned Device beacon
Note:如果一个设备以及配对过,有加入到网络,需要发送匿名广播,或者私有地址广播,区别于Unprovisioned Device beacon
Invitation![](/assets/blank.gif)
provisioner 接收到beacon 之后,会邀请该设备入网,并且会交换一些必要的设备信息,为后续步骤做准备。
这个过程中有一些特殊的数据帧格式需要特别留意:
Provisioning Invite PDU
an Attention Duration field, used to determine how long the primary element of the device identifies itself using the Attention Timer,
告诉新设备,我会等你多久
Provisioning Capabilities PDU
- the number of elements the device supports,
- the set of security algorithms supported,
- the availability of its public key using an OOB technology,
- the ability for this device to output a value to the user,
- the ability for this device to allow a value to be input by the
user, - and if the device has a block of OOB data that can be used for
authentication
*这些信息,决定后后面加密采用的哪种方式,加密的参数,用户交互的方式等等,
如果熟悉ble smp 过程,这个步骤异常熟悉
Exchange public keys
这步根据provisioner 是否有新设备的public key,分为有两种可能
另外涉及到的加密方式又有三种可能
所有交换和加密总共有4种可能实现的方法
provisioner 根据信息,会决定用4种方法中哪一种方法,这些信息携带在
Provisioning Start PDU
new device 收到之后,会设置Attention Timer =0,流程正式开始
情况一: 不支持OOB,
两端设备没有其他途径获得public key,所以需要在加密计算之前,交换public
情况二:支持OOB
在计算之前,两个设备通过wifi或者其他非蓝牙的方式,获得了对端设备的public key,只需要把自己的key 告诉新设备,然后开始加密计算
ECDHSecret = P-256(private key, peer public key)
交换public key 之后,会用上述算法,计算出宇哥ECDH值,并且删除产生的public-priviate key
这一步跟smp 过程exchange public key 一样
Authentication
如果设备输出OOB支持,provisioner 用户需要输入观察到的数字
obb 能力大概分为下面几类:
- Blink, Beep, or Vibrate
- Output Numeric
- Alphanumeric,
根据设备支持能力,加密分为三种情况
Output OOB, Input OOB, or Static OOB
情况一:Output OOB
Authentication Method 0x02
加密过程中需要的参数:
ConfirmationInputs = ProvisioningInvitePDUValue || ProvisioningCapabilitiesPDUValue ||
ProvisioningStartPDUValue || PublicKeyProvisioner || PublicKeyDevice
情况二:Input OOB
Authentication Method 0x03
新设备具备输入能力, 获取到provisioner 设备显示的随机数字
新设备需要输入该数字。
情况三:static OOB
该设备不具备输入输出能力,使用这种方式。
如果无法获得到oob数据,则全部设置为0,类似ble smp justwork模式
总结
三个不同情况,都会经过下面两个步骤:
provisioning confirmation
provisioning random
涉及到算法如下:
ConfirmationProvisioner = AES-CMACConfirmationKey_{ConfirmationKey}ConfirmationKey(RandomProvisioner || AuthValue)
ConfirmationDevice = AES-CMACConfirmationKey_{ConfirmationKey}ConfirmationKey (RandomDevice || AuthValue)
ConfirmationKey = k1(ECDHSecret, ConfirmationSalt, “prck”)
ConfirmationSalt = s1(ConfirmationInputs)
ConfirmationInputs = ProvisioningInvitePDUValue || ProvisioningCapabilitiesPDUValue ||
ProvisioningStartPDUValue || PublicKeyProvisioner || PublicKeyDevice
所计算的这些参数,都是为最终计算provision data做准备。
两端设备都会使用相同且一致的参数计算,计算结果最后会校验。
校验通过后,加密过程结束,计入到下一步
Distribution of provision data
Provisioner and device shall use the calculated DiffieHellman shared secret ECDHSecret .
根据上一步参数,会完成DHKey check。
最终生成的Provisioning Data PDU 包含如下信息
Field | size(octotes) | Notes |
---|---|---|
Network Key | 16 | NetKey |
Key Index | 2 | Index of NetKey |
Flag | 1 | Flags bitmask |
IV Index | 4 | Current value of the IV index |
Unicast Address | 2 | Unicast address of the primary element |
这个过程会产生一个session key,使用到如下算法
ProvisioningSalt = s1(ConfirmationSalt || RandomProvisioner || RandomDevice)
SessionKey = k1(ECDHSecret, ProvisioningSalt, “prsk”)
仅使用一次的session key:
SessionNonce = k1(ECDHSecret, ProvisioningSalt, “prsn”)
分发过程中,provisioning data 使用如下算法加密:
Provisioning Data = Network Key || Key Index || Flags || IV Index || Unicast Address Encrypted Provisioning Data, Provisioning Data MIC = AES-CCM (SessionKey, SessionNonce,Provisioning Data)
加密过程如下:
ble mesh-provisioning组网流程详解(1)相关推荐
- 【BLE MESH】PB-ADV入网详解
设备在一个mesh网络中通讯,需要获取该mesh网络的net key /dev key/app key等密钥,才能加解密mesh数据包,入网的目的其实就是为了获取这些密钥.MESH协议规定有两种入网方 ...
- iOS APP上架流程详解
iOS APP上架流程详解 青葱烈马 2016.04.28 前言:作为一名 iOS 开发工程师, APP 的上架是必备技能. iOS 上架的流程主要可以简单总结为: 一个包,两个网址,三个证书, 一 ...
- IOS开发环境更换后重新制作Provisioning Profile证书详解
IOS开发环境更换后重新制作Provisioning Profile证书详解 新换了台Macbook,又折腾了一遍Provisioning Profile证书,苹果的证书繁锁复杂,每次制作都相当麻烦, ...
- UE发起的PDU Session Establishment流程详解(1)
相关文章会在公众号同步更新.公众号:5G通信大家学 持续更新的相关5G内容都是直接根据3GPP整理,保证更新内容的准确性,避免通过二手,甚至多手的资料,以讹传讹误导网友. 在介绍完流程详解后,会整理专 ...
- ZigBee组网原理详解
ZigBee组网原理详解 https://blog.csdn.net/u012912039/article/details/52250253 1.组网概述 组建一个完整的zigbee网状网络包括两个步 ...
- 跨境电商三单对碰三单申报流程详解
跨境电商三单对碰三单申报流程详解 概要:三单申报是指"电子订单.电子运单.支付凭证". 1.电子订单: 适合申报企业类型"电商企业.电商交易平台.电商境内代理企业&quo ...
- Android事件流程详解
Android事件流程详解 网络上有不少博客讲述了android的事件分发机制和处理流程机制,但是看过千遍,总还是觉得有些迷迷糊糊,因此特地抽出一天事件来亲测下,向像我一样的广大入门程序员详细讲述an ...
- 基于spark mllib_Spark高级分析指南 | 机器学习和分析流程详解(下)
- 点击上方"中国统计网"订阅我吧!- 我们在Spark高级分析指南 | 机器学习和分析流程详解(上)快速介绍了一下不同的高级分析应用和用力,从推荐到回归.但这只是实际高级分析过程 ...
- View的绘制-draw流程详解
目录 作用 根据 measure 测量出的宽高,layout 布局的位置,渲染整个 View 树,将界面呈现出来. 具体分析 以下源码基于版本27 DecorView 的draw 流程 在<Vi ...
最新文章
- goland os.Open 路径错误
- 2013-11-5 深圳尚游网络公司 - 服务器开发工程师
- Windows应用程序启动命令汇总
- 什么是端到端训练测试_为什么端到端测试对您的团队很重要
- 【翻译】在Ext JS应用程序中构建可维护的控制器
- Composer + thinkphp5.1安装与使用
- SQL2008 SP3下载
- python二进制转十进制编程_怎么用python二进制转换十进制
- 用shell脚本在consul注册exporter服务
- 软件工程 实践者的研究方法 第三章答案
- JUST技术:基于HMM的实时地图匹配
- Mocking Void Methods with Mockito
- LoadLibraryEx(DONT_RESOLVE_DLL_REFERENCES)的缺陷
- 年终回顾 | 小米技术最受欢迎的技术文章TOP20
- HDU 1998奇数阶魔方
- 小程序和html5开发的差异
- MULTISIM仿真3 示波器
- SRS4.0源码分析-RTMP入口
- 《有效成交量分析法》(威廉•帕斯卡尔)一、有效成交量概念的提出
- 阿里云新用户活动:云服务器ECS 新购、升级报价出炉了!
热门文章
- 在目标跟踪时出现AttributeError: module ‘cv2‘ has no attribute ‘legacy‘的问题解决方法
- 控制台的五子连珠游戏
- 088:vue+openlayers实时显示单个卫星的位置及轨迹 (示例代码)
- 计算机系统结构pdf张晨曦刘依,第1章计算机系统结构的基本概念张晨曦刘依www.Arch365.ppt...
- 沙盒冒险TerraTech中文
- UI设计教程:关于版式设计
- ROS订阅激光点云数据并画直线
- 计量实证模型-SFA双边随机前沿分界模型代码合集分享,亲测有效
- 机器学习小试(8)使用TensorFlow跑通一个通用增量学习流程-增量学习
- 博士win7风格包_异常可爱,民间团队与暴雪合作推出《星际争霸》卡通材质包...