组网过程(provisioning)是ble mesh 核心流程,先从宏观上了解整个组网过程,再深入到协议的算法,个人认为更加容易接受一些。

请尊重原创,引用请标明出处https://editor.csdn.net/md/?articleId=104375184

组网流程图

总结为五个步骤:

  1. beaconing 信标
  2. 邀请入网,交换设备能力信息(support feature,io cap)
  3. 交换public key
  4. 加密,
  5. 分发组网数据

初步印象,整个过程跟ble smp 流程非常相似。

Beaconning

一个全新的设备,没有加入过任何网络
如果需要加入到mesh 网络,需要向porvisioner 发送ADV

要告诉周围的设备,希望加入mesh 网络,并且现存网络中的设备处于scan 模式,能够收听到这个讯息,注意两点

  1. provisioner 需要处于scan 模式
  2. new device 发送Unprovisioned Device beacon

Note:如果一个设备以及配对过,有加入到网络,需要发送匿名广播,或者私有地址广播,区别于Unprovisioned Device beacon

Invitation

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

  1. the number of elements the device supports,
  2. the set of security algorithms supported,
  3. the availability of its public key using an OOB technology,
  4. the ability for this device to output a value to the user,
  5. the ability for this device to allow a value to be input by the
    user,
  6. 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 能力大概分为下面几类:

  1. Blink, Beep, or Vibrate
  2. Output Numeric
  3. 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)相关推荐

  1. 【BLE MESH】PB-ADV入网详解

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

  2. iOS APP上架流程详解

    iOS APP上架流程详解 青葱烈马 2016.04.28  前言:作为一名 iOS 开发工程师, APP 的上架是必备技能. iOS 上架的流程主要可以简单总结为: 一个包,两个网址,三个证书, 一 ...

  3. IOS开发环境更换后重新制作Provisioning Profile证书详解

    IOS开发环境更换后重新制作Provisioning Profile证书详解 新换了台Macbook,又折腾了一遍Provisioning Profile证书,苹果的证书繁锁复杂,每次制作都相当麻烦, ...

  4. UE发起的PDU Session Establishment流程详解(1)

    相关文章会在公众号同步更新.公众号:5G通信大家学 持续更新的相关5G内容都是直接根据3GPP整理,保证更新内容的准确性,避免通过二手,甚至多手的资料,以讹传讹误导网友. 在介绍完流程详解后,会整理专 ...

  5. ZigBee组网原理详解

    ZigBee组网原理详解 https://blog.csdn.net/u012912039/article/details/52250253 1.组网概述 组建一个完整的zigbee网状网络包括两个步 ...

  6. 跨境电商三单对碰三单申报流程详解

    跨境电商三单对碰三单申报流程详解 概要:三单申报是指"电子订单.电子运单.支付凭证". 1.电子订单: 适合申报企业类型"电商企业.电商交易平台.电商境内代理企业&quo ...

  7. Android事件流程详解

    Android事件流程详解 网络上有不少博客讲述了android的事件分发机制和处理流程机制,但是看过千遍,总还是觉得有些迷迷糊糊,因此特地抽出一天事件来亲测下,向像我一样的广大入门程序员详细讲述an ...

  8. 基于spark mllib_Spark高级分析指南 | 机器学习和分析流程详解(下)

    - 点击上方"中国统计网"订阅我吧!- 我们在Spark高级分析指南 | 机器学习和分析流程详解(上)快速介绍了一下不同的高级分析应用和用力,从推荐到回归.但这只是实际高级分析过程 ...

  9. View的绘制-draw流程详解

    目录 作用 根据 measure 测量出的宽高,layout 布局的位置,渲染整个 View 树,将界面呈现出来. 具体分析 以下源码基于版本27 DecorView 的draw 流程 在<Vi ...

最新文章

  1. goland os.Open 路径错误
  2. 2013-11-5 深圳尚游网络公司 - 服务器开发工程师
  3. Windows应用程序启动命令汇总
  4. 什么是端到端训练测试_为什么端到端测试对您的团队很重要
  5. 【翻译】在Ext JS应用程序中构建可维护的控制器
  6. Composer + thinkphp5.1安装与使用
  7. SQL2008 SP3下载
  8. python二进制转十进制编程_怎么用python二进制转换十进制
  9. 用shell脚本在consul注册exporter服务
  10. 软件工程 实践者的研究方法 第三章答案
  11. JUST技术:基于HMM的实时地图匹配
  12. Mocking Void Methods with Mockito
  13. LoadLibraryEx(DONT_RESOLVE_DLL_REFERENCES)的缺陷
  14. 年终回顾 | 小米技术最受欢迎的技术文章TOP20
  15. HDU 1998奇数阶魔方
  16. 小程序和html5开发的差异
  17. MULTISIM仿真3 示波器
  18. SRS4.0源码分析-RTMP入口
  19. 《有效成交量分析法》(威廉•帕斯卡尔)一、有效成交量概念的提出
  20. 阿里云新用户活动:云服务器ECS 新购、升级报价出炉了!

热门文章

  1. 在目标跟踪时出现AttributeError: module ‘cv2‘ has no attribute ‘legacy‘的问题解决方法
  2. 控制台的五子连珠游戏
  3. 088:vue+openlayers实时显示单个卫星的位置及轨迹 (示例代码)
  4. 计算机系统结构pdf张晨曦刘依,第1章计算机系统结构的基本概念张晨曦刘依www.Arch365.ppt...
  5. 沙盒冒险TerraTech中文
  6. UI设计教程:关于版式设计
  7. ROS订阅激光点云数据并画直线
  8. 计量实证模型-SFA双边随机前沿分界模型代码合集分享,亲测有效
  9. 机器学习小试(8)使用TensorFlow跑通一个通用增量学习流程-增量学习
  10. 博士win7风格包_异常可爱,民间团队与暴雪合作推出《星际争霸》卡通材质包...