[蓝牙 Mesh Zephyr]-[005]-Key

news2024/11/13 11:32:36

[蓝牙 Mesh & Zephyr]-[005]-Key

1. Keys

Mesh Profile specification 定义了 2 种key:application keys (AppKey)和 network keys(NetKey)。AppKeys 用于保护 upper transport layer 的通信安全,NetKeys 用于保护 network layer 的通信安全。两类 key 在节点之间时共享的。有一个特殊的 application key 称为 device key(DevKey),每个节点都是唯一的,只有节点自己和 Configuration Client 知道,用于保护节点和 Configuration Client 之间的通信安全。
每个 Application key 都绑定到 一个 Network key,这意味着 application key 只可以在绑定到的 Network key 上下文使用;一个 device key 隐式绑定到所有 network key。
下面是一个 application keys 绑定到 network keys 的例子:
在这里插入图片描述

2. Application Keys

2.1. Device Key (特殊 App Key)

device key(DevKey)是 一个 access layer key,在节点加入网络时生成,只有节点和一个 Configuration Client 知道。这个 device key 会绑定到节点中所有的 Network key。绑定不可以更改。下图描述了 device key 的派生:
在这里插入图片描述
DevKey 应该派生于 ECDHSecret 和 ProvisioningSalt,如下面公式所示:
DevKey = k1(ECDHSecret, ProvisioningSalt, “prdk”)
ProvisioningSalt 定义在 章节 5.4.2.5,ECDHSecret 定义在 章节 5.4.2.3。

2.2. Application Keys

application key(AppKey)应该使用定义在 Volume 2, Part H, Section 2 of the Core Specification [1]. 的随机数生成器生成。
application key identifier(AID)用于识别 application key,Provisioner 使用 “Config AppKey Add ” 配置到节点上,AID的派生如下图所述:

在这里插入图片描述

3. Network keys

3.1. Network key

network key(NetKey)应该使用在 Volume 2, Part H, Section 2 of the Core Specification [1] 中的定义的随机数生成器生成,网络密钥层次结构如图3.38所示。
在这里插入图片描述
在配网过程中,Provisioner 使用 “Provisioning Data” 将第一个 NetKey 发送到节点上,如果需要将主网的节点添加到一个子网中,可以使用 “Config NetKey Add” 进行添加。

3.2. Encryption Key, and Privacy Key

Encryption Key, and Privacy Key 也是 NetKey,用于加密Network PDU 。
每个 Network PDU 都使用由 NID,Encryption Key 和 Privacy Key 组成的 security material 加密。
NID 是一个 7 bit 的值,用于标识用于加密 Network PDU 的 security material。
注意:每个 NID 最多可以对应 2的121次方个 key,NID 值只能指示用于保护此 Network PDU 的安 security material。
NID,EncryptionKey 和 PrivacyKey 由 k2 函数使用 security credentials 作为输入派生的。
Master security material 派生于 master security credentials:

  • NID || EncryptionKey || PrivacyKey = k2(NetKey, 0x00)

Friendship security material 派生于 friendship security credentials:

  • NID || EncryptionKey || PrivacyKey = k2(NetKey, 0x01 || LPNAddress || FriendAddress || LPNCounter || FriendCounter)

LPNAddress 是一个单播地址,是 Friend Request message 的源地址。
FriendAddress 是一个单播地址,是 Friend Offer message 的源地址。
LPNCounter 是Friend Request message 中的 LPNCounter 字段。
FriendCounter 是 Friend Offer message 中的 FriendCounter 字段。

对于在具有友谊关系的 Low Power node and Friend node 之间发送的 Network PDUs,使用Friendship security material。
对于所有其他 Network PDUs ,使用 Master security material。

3.3. IdentityKey

IdentifyKey 派生于 network key,每个 network key 生成一个 IdentifyKey。

salt = s1(“nkik”) 
P = “id128” || 0x01 
IdentityKey = k1 (NetKey, salt, P) 

用于 Advertising with Node Identity 过程,生成一个 Hash值,如下:
在这里插入图片描述

3.4. BeaconKey

BeaconKey 派生于 network key,每个 network key 生成一个 BeaconKey。

salt = s1(“nkbk”) 
P = “id128” || 0x01 
BeaconKey = k1 (NetKey, salt, P) 

在这里插入图片描述
Beacon Key 用于 Secure Network beacon ,生成一个校验值。

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

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

相关文章

如何手动添加NLTK data

一、问题描述 Python的自然语言处理库NLTK在安装之后需要下载一些data文件才能使用。官方比较推荐的方式是直接运行下载data的代码: import nltk nltk.download(punkt) 但是实际操作之后发现由于网络原因无法下载成功。 除了运行代码之外,官方还推荐…

分布式队列celery学习

说明:本文内容来自《python自动化运维快速入门》学习 一、介绍 Celery是由纯Python编写的,但协议可以用任何语言实现。目前,已有Ruby实现的RCelery、Node.js实现的node-celery及一个PHP客户端,语言互通也可以通过using webhooks…

[附源码]JAVA毕业设计客户台账管理(系统+LW)

[附源码]JAVA毕业设计客户台账管理(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&…

Activiti7工作流(二)

流程定义相关 流程定义查询 查询流程相关信息,包含流程定义,流程部署,流程定义版本 Test public void testDefinitionQuery(){//创建ProcessEngine对象ProcessEngine processEngine ProcessEngines.getDefaultProcessEngine();//获取仓库…

自动识别验证码实现系统自动登录(可扩展实现无人自动化操作,如领取各个平台的优惠券),不依赖第三方可以支持离线识别处理,附源码可直接运行

自动识别验证码实现系统自动登录(可扩展实现无人自动化操作,如领取各个平台的优惠券),不依赖第三方可以支持离线识别处理,附源码可直接运行。 实现过程: 1、只要是图片验证码都支持识别; 2、通过百度API实现验证码识别;(依赖第三方,且需要连接互联网,内网不可用,实…

7-FreeRTOS软件定时器

1- 简介 1.1 软件定时器简述 软件定时器就是允许函数设置一定的等待时间,然后执行。定时器执行的函数被称为定时器的回调函数。定时器从启动到执行回调函数之间的时间称为定时器的周期。定时器的回调函数在定时器的时间到达时执行。 软件定时器要先创建才能使用。…

实战Docker未授权访问提权

1、fofa关键字 port“2375” && body“page not found” 2、docker -H tcp://ip:port 可查看到当前所有的实例 3、docker -H tcp://ip:port pull alpine 4、docker -H tcp://ip:port run -it --privileged alpine bin/sh 5、fdisk -l 查看其分区结构 6、创建一个…

Java安全-CC1

CC1 这里用的是组长的链子和yso好像不太一样&#xff0c;不过大体上都是差不多的。后半条的链子都是一样的&#xff0c;而且这条更短更易理解。yso的CC1过段时间再看一下。 环境 Maven依赖&#xff1a; <dependencies><dependency><groupId>commons-colle…

十四、使用 Vue Router 开发单页应用(3)

本章概要 命名路由命名视图编程式导航传递 prop 到路由组件HTML 5 history 模式 14.5 命名路由 有时通过一个名称来标识路由会更方便&#xff0c;特别是在链接到路由&#xff0c;或者执行导航时。可以在创建 Router 实例时&#xff0c;在routes 选项中为路由设置名称。 修改…

用Unity实现FXAA

用Unity实现FXAAFXAA是现代的常用抗锯齿手段之一&#xff0c;这次我们来在Unity中从零开始实现它。 首先我们来看一个测试场景&#xff0c;我们在Game视角下将scale拉到2x&#xff1a; 可以看到画面的锯齿比较严重&#xff0c;下面我们将一步一步地实现FXAA&#xff0c;消除锯…

BDD - SpecFlow ExternalData Plugin 导入外部测试数据

BDD - SpecFlow ExternalData Plugin 导入外部测试数据引言SpecFlow ExternalData 插件支持的数据源Tags实践创建一个 Class Libary Project添加 NuGet Packages添加测试数据源文件CSV 文件Excel 文件添加 Feature 文件实现 Step Definition执行Scenario 导入测试数据源Scenari…

深入URP之Shader篇4: Depth Only Pass

Depth only pass unlit shader中包含了一个Depth Only Pass&#xff0c;这个pass的代码在Packages\com.unity.render-pipelines.universal\Shaders\DepthOnlyPass.hlsl中。这是一个公共pass&#xff0c;几乎所有的URP shader都会包含这个pass。本篇说一说这个pass的作用以及实…

Ubuntu映射到Windows网络驱动器

将虚拟机Ubuntu映射到Windows网络驱动器中&#xff0c;我们需要Ubuntu的网络和主机网络处于同一网段下&#xff0c;然后使Ubuntu具备共享文件功能&#xff0c;最后在windows下添加网络地址。 将Ubuntu设置和主机同一网段 查看主机网络信息 在虚拟机中 选择编辑-- 虚拟网络编…

Java的字符串String

文章目录什么是字符串String类的声明为什么我们的String是不可变的为什么String类用final修饰String的创建字符串比较相等关于Java中的比较关于字符串不同赋值操作对应的内存分配那对象如何进行比较内容字符串常量池StringTalbe的位置字符串常见的操作拼接操作获得字符串的子串…

事件驱动的微服务、CQRS、SAGA、Axon、Spring Boot

事件驱动的微服务、CQRS、SAGA、Axon、Spring Boot 学习构建分布式事件驱动的微服务、CQRS、事件溯源、SAGA、事务 课程英文名&#xff1a;Event-Driven Microservices, CQRS, SAGA, Axon, Spring Boot 此视频教程共10.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰无…

一个带有楼中楼的评论系统数据库设置思路

前言 有个需求&#xff0c;需要实现百度贴吧那样能评论帖子中某一楼的评论里的评论 分析 说起来有点拗口&#xff0c;其实这个评论系统分为4个部分&#xff1a; 主题&#xff08;楼主发布的帖子&#xff09;直接返回楼主的评论&#xff08;从帖&#xff09;&#xff1a;直接…

(11)点云数据处理学习——Colored point cloud registration(彩色点注册)

1、主要参考 &#xff08;1&#xff09;官网介绍 Colored point cloud registration — Open3D 0.16.0 documentation 2、原理和实现 2.1原理 本教程演示了使用几何形状和颜色进行配准的ICP变体。实现了[Park2017]算法。颜色信息锁定沿切平面的对齐。因此&#xff0c;该算法…

Yocto创建自己的分区(基于STM32MP1)

Yocto创建自己的分区&#xff08;基于STM32MP1&#xff09; 前几章节我们分析了machine class里面几篇关键的class&#xff0c;还有machine conf里面的inc文件&#xff0c;大致的创建分区的流程都比较清晰了&#xff0c;本章节动手实际操作一把&#xff0c;创建一个自己的分区…

Unity中的协程

一、什么是协程 协程(Coroutines) 是一种比线程更加轻量级的存在&#xff0c;也被称为用户态线程一个进程可以拥有多个线程&#xff0c;一个线程可以拥有多个协程协程并不会增加线程&#xff0c;它在线程中运行&#xff0c;通过分时复用的方式运行多个协程&#xff0c;其切换代…

《Spring 5.x源码解析之Spring AOP 注解驱动使用及其实现原理》

《Spring 5.x源码解析之Spring AOP 注解驱动使用及其实现原理》 学好路更宽&#xff0c;钱多少加班。---- mercyblitz 一、前言 大家好&#xff0c;欢迎阅读《Spring 5.x源码解析》系列&#xff0c;本篇作为该系列的第二篇&#xff0c;重点介绍Spring AOP在注解驱动编程模式上的…