蓝牙Mesh设备配网过程及抓包分析

news2024/11/16 18:06:46

配网过程

    • 说明
      • Mesh消息类型
      • 配网过程
    • 信标阶段(Beaconing)
      • Unprovisioned Device beacon
      • Link Open/Link ACK/Link Close
        • Link Open
        • Link ACK
        • Link Close
    • 邀请阶段(Invitation)
      • Provisioning Invite
      • Provisioning Capabilities
    • 交换公钥阶段(Exchanging public keys)
      • Provisioning Start
      • Provisioning Public Key
    • 身份认证阶段(Authentication)
      • Provisioning Confirmation
      • Provisioning Random
    • 分发配网数据阶段(Distribution of provisioning data)
      • Provisioning Data
      • Provisioning Complete
      • Provisioning Failed
    • 其他
      • Secure Network beacon

说明

使用的例程目录:nrf5sdkformeshv500src\examples\light_switch\client
抓包使用的软件:Wireshark
抓包方法:使用Nordic的nRF52840 Dongle配合Wireshark对蓝牙设备抓包(BLE)

Mesh消息类型

在这里插入图片描述
在这里插入图片描述

配网过程

配网过程主要分为五个阶段:

  1. 信标阶段
  2. 邀请阶段
  3. 交换公钥阶段
  4. 身份认证阶段
  5. 分发配网数据阶段

信标阶段(Beaconing)

信标阶段就是让配网器发现并选择周边未配网设备,然后建立连接的过程。
支持PB-ADV的未配网设备会持续一定时间以某个频率向外广播未配网设备信标,以让周边的配网器能够发现这个未配网设备,未配网设备信标中包含这个设备的UUID。配网器收到未配网设备的信标之后,会和未配网设备建立一条链接,然后进行配网。蓝牙mesh规范中规定PB-ADV和PB-GATT都可以承载链接,比如可以直接使用Nordic官方的mesh app配网,这个时候这个链接就是PB-GATT承载的。
在这里插入图片描述

Unprovisioned Device beacon

由未入网设备发起的信标,配网器收到信标后,可以与该设备进行配网操作。格式定义:
在这里插入图片描述
Beacon Data部分字段结构:
在这里插入图片描述
字段定义:
在这里插入图片描述
在这里插入图片描述
抓包结果:
在这里插入图片描述
广播地址:广播地址使用的是MCU的FICR寄存器的DEVICEADDR[0]和DEVICEADDR[1]的低16位,从MCU手册中获取信息如下:
在这里插入图片描述
对应例程advertiser.c中的advertiser_address_default_get()函数:
在这里插入图片描述
UUID:UUID使用的是MCU的FICR寄存器的DEVICEID[n]和DEVICEADDR[n](n为0或1),同时需要修改版本和变体位。
在这里插入图片描述
对应例程nrf_mesh_configure.c中的nrf_mesh_configure_device_uuid_reset()函数:
在这里插入图片描述
通过观察可以发现,设备发送未配网信标的时间间隔为2s,这个参数是由NRF_MESH_PROV_BEARER_ADV_UNPROV_BEACON_INTERVAL_MS宏定义决定的,位于nrf_mesh_config_prov.h中,并在prov_bearer_adv.c的send_unprov_beacon()函数中调用。
在这里插入图片描述
在这里插入图片描述

Link Open/Link ACK/Link Close

配网承载控制PDU用于管理承载上的会话,因为承载本身没有会话管理功能。数据格式:
在这里插入图片描述
在这里插入图片描述

其中承载操作码如下:
在这里插入图片描述

Link Open

Link Open消息如下:BearerOpcode为0x00,GPCF为0b11,Device UUID为要选择的未配网设备信标中的UUID。
在这里插入图片描述

Link ACK

Link ACK消息如下:无参数
在这里插入图片描述

Link Close

Link Close消息如下:Reason字段表示链接关闭的原因。
在这里插入图片描述
Reason字段可能的值:
在这里插入图片描述

邀请阶段(Invitation)

邀请阶段主要是交互诸如设备能力等信息,这些信息用于后续的配网操作。
在这里插入图片描述

Provisioning Invite

配网邀请(Provisioning Invite)由配网器发给未配网设备,字段如下:
在这里插入图片描述
提示时间(Attention Duration)长度为1字节,0表示关闭,非0表示剩余的时间,单位为秒。对于不支持提示时间的设备,提示时间应该设置为0,如果一个元素的提示时间为非0值,则提示时间状态为打开,并按秒递减至0。就是待配网设备可以用这个参数的时间通过LED,蜂鸣器这种的来指示状态。
在这里插入图片描述
配网器发起邀请PDU,提示时间为5s:
在这里插入图片描述

Provisioning Capabilities

未配网设备收到消息后需要响应配网能力。配网能力(Provisioning Capabilities)由未配网设备发送给配网器,字段如下:
在这里插入图片描述
在这里插入图片描述
Number of Elements:表示设备含有的元素个数。
在这里插入图片描述
例程中宏定义位于nrf_mesh_config_app.h中。
在这里插入图片描述
Algorithm:配网算法,目前只支持ECDH(椭圆曲线迪菲-赫尔曼秘钥交换)。
在这里插入图片描述
Public Key Type:设备的公钥类型,是否支持OOB。
在这里插入图片描述
Static OOB Type:设备是否支持静态OOB。
在这里插入图片描述
Output OOB Size:输出式OOB的最大信息长度。
在这里插入图片描述
Output OOB Action:输出式OOB的输出动作类型。
在这里插入图片描述
Input OOB Size:输入式OOB的最大信息长度。
在这里插入图片描述
Input OOB Action:输入式OOB的输入动作类型。
在这里插入图片描述
在这里插入图片描述

待配网设备收到配网邀请后在例程中prov_provisionee_pkt_in()函数中处理,如果处理成功会通过send_capabilities()函数来响应配网能力。
在这里插入图片描述
未配网设备响应配网能力,3个元素,支持静态OOB:
在这里插入图片描述

交换公钥阶段(Exchanging public keys)

配网器与未配网设备配网时,需要发布网络密钥与地址,这些信息与mesh网络的安全性有关。因此要求配网双方进行身份验证。蓝牙mesh使用非对称密钥算法为著名的ECDH算法,可以在仅交换公钥的情况下协商出外部无法获知的密钥。

如果不使用OOB公钥,设备双方应该交换公钥。
在这里插入图片描述
否则,如果公钥可以通过OOB机制(双方通过二维码、NFC等方式)获得,则提供方应生成新的密钥对,生成的密钥对的公钥应从提供方传输到设备,并使用适当的OOB技术从设备读取静态公钥。
在这里插入图片描述

Provisioning Start

配网开始(Provisioning Start)由配网器发送给未配网设备,告知未配网设备交换公钥流程开始,同时从前面配网能力(Provisioning Capabilities)消息中选择具体方式。数据格式如下:
在这里插入图片描述
Algorithm:配网算法模式,目前只支持ECDH(椭圆曲线迪菲-赫尔曼秘钥交换)。
在这里插入图片描述
Public Key:设备端是否使用OOB公钥。
在这里插入图片描述
Authentication Method:身份认证模式选择。
在这里插入图片描述
Authentication Action:OOB模式下的认证行为。
在这里插入图片描述
Authentication Size:OOB模式下的认证长度。
在这里插入图片描述
配网器发起配网开始PDU,没有OOB公钥,使用静态OOB认证:
在这里插入图片描述
在例程中未配网设备收到Provisioning Start消息后,在prov_provisionee_pkt_in()函数中处理:
在这里插入图片描述

Provisioning Public Key

配网双方交换公钥后需要验证收到的公钥的有效性,如果验证为无效的公钥,则退出配网流程。
在这里插入图片描述
配网器交换公钥PDU:
在这里插入图片描述
在例程中未配网设备收到Provisioning Public Key消息后,在prov_provisionee_pkt_in()函数中处理,switch分支为PROV_PDU_TYPE_PUBLIC_KEY,如果不使用OOB公钥,则未配网设备发送自己的公钥。
在这里插入图片描述

未配网设备交换公钥:
在这里插入图片描述
当双方公钥验证结束后,进入身份认证阶段。

身份认证阶段(Authentication)

在蓝牙mesh规范中,身份认证过程包含了设备端和配网器的认证,两者均会和对方交换一个Confirmation Value,以此生成此Confirmation Value的Random Value。Confirmation Value的计算使用了ECDH密钥、配网交互数据包及OOB认证消息。当一方收到完整的Confirmation Value和Random Value,会根据ECDH密钥、配网交互数据包及OOB认证消息对Random Value重新计算,然后生成一个Confirmation Value,与收到的Confirmation Value比较,如果相同则认证成功,失败则退出配网。两者均验证成功,则整个认证流程结束。

根据配网器与未配网设备的输入输出能力,蓝牙mesh规范中定义了三种认证方式:
①输出式OOB认证
在这里插入图片描述
②输入式OOB认证
在这里插入图片描述
③静态OOB或无OOB认证
在这里插入图片描述
这三种方式命名我的理解是都相对于未配网设备的来说的。
输出式OOB认证要求未配网设备能够有显示随机数的能力,比如通过LED闪烁,或者屏幕显示;同时配网器要有比如按键这种的来输入识别到的随机数。
输入式OOB认证要求配网器能够有显示随机数的能力,比如通过LED闪烁,或者屏幕显示;同时未配网设备要有比如按键这种的来输入识别到的随机数。
静态OOB认证双方交换Confirmation Value和Random Value,对于没有有效的输入输出方式的设备来说,是比较安全友好的认证方式;无OOB认证比较危险,无法得知是否存在中间人,使整个mesh网络遭受攻击。
输出式OOB认证和输入式OOB认证就是我们之前连接蓝牙的时候根据屏幕上显示的随机数输入,然后进行蓝牙配对。

Provisioning Confirmation

配网确认值(Provisioning Confirmation)消息PDU由配网器或者未配网设备发给对端设备。数据格式:
在这里插入图片描述
配网器发送配网确认值PDU:
在这里插入图片描述
在例程中未配网设备收到Provisioning Confirmation消息后,在prov_provisionee_pkt_in()函数中处理,switch分支为PROV_PDU_TYPE_CONFIRMATION,未配网设备发送自己的确认值。
在这里插入图片描述
待配网设备发送配网确认值PDU:
在这里插入图片描述

Provisioning Random

配网随机数(Provisioning Random)消息PDU由配网器或者未配网设备发给对端设备。数据格式:
在这里插入图片描述
配网器发送随机数PDU:
在这里插入图片描述
在例程中未配网设备收到Provisioning Random消息后,在prov_provisionee_pkt_in()函数中处理,switch分支为PROV_PDU_TYPE_RANDOM,未配网设备发送自己的随机数。
在这里插入图片描述
待配网设备发送随机数PDU:
在这里插入图片描述

分发配网数据阶段(Distribution of provisioning data)

在配网过程中,最后也是最重要的一个阶段是分发配网数据。在此阶段中,配网器负责生成并分发配网数据到未配网设备。配网数据包括如’'Network Key(网络密钥)"、"Unicast Address(单播地址)"等重要数据项。
为了安全的分发配网数据,配网器需要使用AES-CCM算法来加密配网数据,此加密算法涉及两个加密密钥参数:Session Key和Session Nonce,这两个参数均由ECDH派生。
在这里插入图片描述

Provisioning Data

分发配网数据(Provisioning Data)PDU格式如下:
在这里插入图片描述
Encrypted Provisioning Data:加密配网数据字段如下:
在这里插入图片描述
在这里插入图片描述
配网器分发配网数据:
在这里插入图片描述
在例程中未配网设备收到Provisioning Data消息后,在prov_provisionee_pkt_in()函数中处理,switch分支为PROV_PDU_TYPE_DATA。
在这里插入图片描述

Provisioning Complete

配网完成(Provisioning Complete)PDU由节点(接收到配网数据后,未配网设备变成mesh网络中的节点)发送给配网器,无参数,在例程中switch分支为PROV_PDU_TYPE_DATA中处理完成后发送:
在这里插入图片描述

Provisioning Failed

配网失败(Provisioning Failed)PDU由未配网设备发送给配网器。数据结构如下:
在这里插入图片描述
错误码一共9种,禁止配网、无效PDU、无效格式、非预期PDU、确认失败、资源不足、解密错误、非预期的错误和无法非配地址。错误码对应值如下:
在这里插入图片描述

其他

Secure Network beacon

网络安全信标(Secure Network beacon)用于让mesh节点明确子网及自身的安全状态,在IV Index Update以及Key Refresh过程中被使用。数据格式:
在这里插入图片描述
字段说明:
在这里插入图片描述
Flags字段定义:
在这里插入图片描述
子网中节点在收到网络安全信标之后,应该首先对其鉴权,鉴权完成后,数据包被接收。两个连续Beacon的发送间隔被称为Beacon Interval,在具体实现中,为了防止mesh网络中因含有过多的Beacon而过载,在设置Beacon Interval应该有合理的退避过程。理想状态是,一个子网节点大概每10s收到一个Beacon。

对于每个子网,应该分别设定Beacon Interval。节点应该持续记录一段时间(Observation Period)内的Beacon数量,然后按照下面的公式来计算Beacon Interval。

Beacon Interval = Observation Period * (Observed Number of Beacons + 1) / Expected Number of Beacons

其中Observation Period应该是常规Beacon Interval的两倍,Observed Number of Beacons是在Observation Period内记录到的Beacon数量,Expected Number of Beacons应该是Observation Period除以10s。

如果计算出来的结果小于10s,则将Beacon Interval设置为10s,如果计算出来的结果大于600s,则将Beacon Interval设置为600s。

网络安全信标抓包:
在这里插入图片描述
网络安全信标间隔Beacon Interval:
在这里插入图片描述
例程中默认的网络信标间隔为10s,宏定义是NRF_MESH_BEACON_SECURE_NET_BCAST_INTERVAL_SECONDS,位于nrf_mesh_define.h。
在这里插入图片描述
Beacon Interval更新需要的相关参数及计算位于net_beacon.c中:
在这里插入图片描述
Beacon Interval更新函数位于net_beacon.c中:
在这里插入图片描述
网络安全信标初始化函数也位于net_beacon.c中:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/906867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle数据库经纬度坐标查询优化与结果错误原因分析、SQL中WKT超长文本字符串处理

文章目录 一、Oracle几何空间数据对象和其他数据库的差异二、Oracle查询一个经纬度坐标是否在边界内部2.1 查询条件2.2 查询结果错误,似乎是仅做了MBR匹配2.3 错误原因2.4 解决办法 三、SQL中WKT超长文本在Oracle中如何编写3.1 Oracle中执行含超长文本的SQL报错3.2 …

健身耳机哪个牌子好?推荐几款最适合健身运动用的耳机牌子

对于健身爱好者来说,选择一款适合健身运动的耳机是至关重要的,无论你是跑步、举重还是瑜伽,有适合自己的耳机戴着听歌,能够让你更加投入、更加享受健身的过程。可现在如今的耳机品牌琳琅满目,在选择上自然是要花上不少…

搭建Everything+cpolar在线资料库,实现随时随地访问

Everythingcpolar搭建在线资料库,实现随时随地访问 文章目录 Everythingcpolar搭建在线资料库,实现随时随地访问前言1.软件安装完成后,打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前…

山西电力市场日前价格预测【2023-08-22】

日前价格预测 预测明日(2023-08-22)山西电力市场全天平均日前电价为313.08元/MWh。其中,最高日前电价为354.58元/MWh,预计出现在18: 45。最低日前电价为271.10元/MWh,预计出现在12: 30。 价差方向预测 1: 实…

CrossOver2023虚拟机工具最新版本功能介绍

想要在Mac OS中运行Windows程序,除了使用虚拟机外,使用CrossOver在Mac OS系统中运行Windows程序是非常不错的选择。CrossOver基于Wine技术,可以在Mac OS上运行许多Windows应用程序,而无需安装整个Windows操作系统。 本次发布的Cr…

Paraverse平行云入选启元计划元宇宙TOP20榜单

近日,2023全球数字经济大会互联网3.0峰会上,由中关村大数据产业联盟、中国科协科技传播中心、北京信息化协会共同发起的启元计划发布其成果,同时公布启元计划TOP20以及TOP50企业入选名单。凭借技术与生态优势,「Paraverse平行云」…

docker 05(dockerfile)

一、docker镜像原理 镜像可以复用 二、容器转镜像 将容器保存为镜像[参考] docker commit -a -m 现有容器ID 保存后的名称:版本号 -a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; -p :…

常用字符串匹配算法

一、BF匹配 BF算法中的BF是Brute Force的缩写,中文叫作暴力匹配算法,也叫朴素匹配算法。 BF算法的时间复杂度很高,是O(nm),但在实际的开发中,它却是一个比较常用的字符串匹配算法。 第一,实际的软件开发中…

网络安全(黑客)自学笔记建议

前言 1.不要试图以编程为基础的学习开始学习 我在之前的回答中,我都一再强调不要以编程为基础再开始学习网络安全,一般来说,学习编程不但学习周期长,而且实际向安全过渡后可用到的关键知识并不多 一般人如果想要把编程学好再开…

安防视频监控平台EasyCVR视频集中存储平台接入RTSP设备出现离线情况的问题解决方案

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

Web Worker的使用

Web Worker 前言一、Web Worker是什么?二、使用步骤2.1 创建 Web Worker2.2 监听消息2.3 发送消息 三、优点与缺点3.1 优点3.2 缺点 总结 前言 JavaScript采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一…

【leetcode 力扣刷题】 两数/三数/四数之和 哈希表和双指针解题

两数/三数/四数之和 题目合集 哈希表求解1. 两数之和454. 四数相加Ⅱ 双指针求解15.三数之和18. 四数之和 这个博客是关于:找出数组中几个元素,使其之和等于题意给出的target 这一类题目的,但是各个题之间又有些差异,使得需要用不…

lwIP更新记10:IP 冲突检测

lwip-2.2.0-rc1 版本于 2023 年 6 月 29 日发布,带来了我期盼已久的 IPv4 冲突检测 功能。 lwip-2.2.0-rc1 版本重新回归了 master 分支(主分支),不再使用单独的稳定分支。 master 分支 是一个 Git(版本控制程序&…

C#8.0本质论第四章--操作符和控制流程

C#8.0本质论第四章–操作符和控制流程 4.1操作符 有些操作符以符号的形式出现,例如、-、?.或者??等,而另一些操作符则为关键词,例如default和is。 4.1.1一元正负操作符 一元正操作符()对值几乎没有影响,它在C#中是多余的。…

python 连接Redis 数据库

pip install redis python代码 import redis# 连接数据库 r redis.Redis(host192.168.56.15, port6379, db0)# 存储数据 #r.set(key, value) r.set(name, zaraNet)# 获取数据 value r.get(name) print(value)# 关闭连接(可选) r.close()

AP9196 DC-DC 升压 升降压 恒流电源管理芯 LED电源驱动IC

产品说明 AP9196 是一系列外围电路简洁的宽调光比升压调光恒流驱动器,适用于 3-40V 输入电压范围的 LED照明领域。AP9196 采用我司专利算法,可以实现高精度的恒流效果,输出电流恒流精度≤3%,电压工作范围为5-40V&…

Redis 缓存满了怎么办?

引言 Redis 缓存使用内存来保存数据,随着需要缓存的数据量越来越大,有限的缓存空间不可避免地会被写满。此时,应该怎么办?本篇文章接下来就来聊聊缓存满了之后的数据淘汰机制。 值得注意的是,在 Redis 中 过期策略 和…

【rar密码】rar压缩包密码列表

之前给大家介绍过WinRAR自动加密的设置方法,今天再介绍一种RAR压缩包加密方法:整理密码。 什么是整理密码: 在加密rar文件的时候,点击下拉框选择密码,不用输入密码 设置方法: 前面的操作步骤和设置自动…

正中优配:尾盘拉升的股票第二天的走势?

尾盘拉升是指买卖日快结束时股票价格呈现上涨的状况。关于许多投资者来说,这一般是好事情,因为它可认为他们带来更高的收益。但是,人们常常会问尾盘拉升的股票第二天的走势怎么。本文将从多个角度进行剖析。 首要,咱们需求认识到这…

这所211太好考了!263分上岸!平均分300分!

一、学校及专业介绍 宁夏大学(Ningxia University,简称:宁大),是中国教育部与宁夏回族自治区人民政府合建高校,位列国家“双一流”“211工程”重点建设高校,国家“中西部高校综合实力提升工程”…