Mesh Profile (3.8)mesh安全性

(翻译自《mesh Profile v1.0》3.8 Mesh security)

安全工具箱

加密功能

CMAC功能

CCM功能

s1 SALT生成功能

k1导出功能(如何理解derivation?

k2网络秘钥导出功能

k3导出功能

k4导出功能

序列号

序列号,是一个包含在网络层PDU SEQ字段中的24bit值。主要用于避免重放攻击(replay attacks)。

相同节点中的元素可以共享也可以不共享序列号。

对于mesh网络安全很重要的是,在每一条消息的源(every message source,根据包含在SRC字段中的源地址区分)的网络层PDU中包含一个不同的序列号

一个元素通过使用一个24bit的序列号可以在重复一个nonce之前传输16777216(2的24次方+1)条消息。

如果一个元素平均每5s钟传输一条消息,那么在重复nonce之前可以传输2.6年。

每一个元素对其生成的网络层PDU应该严格的增加序列号

在序列号达到最大值之前,元素应该通过IV更新过程更新IV索引。这也保证了序列号永远不会重复(wrap around 环绕)

IV索引

初始化向量索引是一个32bit的值。并且他是网络中一个共享的资源。(网络中所有的节点共享相同的IV索引,并且将该IV索引用于他们所拥有的子网中。)

IV索引从0x000000开始。通过IV更新过程完成增加。

IV索引增加的时间不必精确。因为IV索引的最低有效位在每一条网络层PDU中交流。

IV索引是一个32bit的值,所以一个mesh网络可以在发生重复之前,工作接近5万亿(trillion)年。

IV索引通过安全网络beacon(Secure Netwok Beacon)在一个网络中实现共享。

一个子网中收到IV更新后处理并且在子网中传播。

IV索引更新的传播通过设备在特定的子网中使用更新后的IV索引传输安全网络beacon完成。

如果一个主子网中的一个设备收到了该主子网中的更新,该设备应该传播该更新到其他的子网

如果一个主子网中的一个设备收到了其他子网中的更新消息,那么该更新消息应该被忽略。(即从主子网开始发起了IV索引更新)

如果一个设备从mesh网络中离开了一段时间。它可以扫描安全网络beacon或者使用IV索引恢复过程,从而自主的设置IV索引值。

Nonce(一个只被使用一次的任意或唯一的随机数)

nonce是一个13octec的值。对于每一条新的消息的加密都是唯一的。网络中使用了四种不同的nonce。nonce的类型由第一个octet决定。

0x00  网络nonce  用于网络层认证和加密的秘钥

0x01  应用nonce  用于高传输层认证和加密的应用秘钥

0x02  设备nonce  用于高传输层认证和加密的设备秘钥

0x04  代理nonce  用于代理认证和加密的秘钥

注意:TTL在网络nonce中使用而不是在应用nonce和设备nonce或者代理nonce中。这意味着当一个消息被中继进而TTL被减小时,应用和设备nonce并不发生改变,而网络nonce需要改变,从而允许TTL值的认证(?TTL值也需要被认证吗)

注意:DST在应用nonce和设备是nonce中使用而不再网络nonce中。这意味着应用或者设备消息的目的地需要被认证,而网络层目的地址被加密(?nonce是怎么使用,和认证是什么关系,和加密时什么关系?)。

秘钥

mesh规范中定义了个类型的秘钥:应用秘钥和网络秘钥。应用秘钥用于高传输层的安全通信,网络秘钥用于网络层的安全通信。

两种类型的秘钥在各个节点间共享。

还存在一种设备秘钥,它是一种特殊的应用秘钥。每个节点的设备秘钥是唯一的。只有该节点和配置客户端知道该节点的设备秘钥。设备秘钥用于节点和配置客户端之间的安全通信。

应用秘钥被绑定到网络秘钥上。这意味着应用秘钥只在它绑定的网络秘钥的上下文环境中使用。一个应用秘钥只能被绑定到一个网络秘钥上。

一个设备秘钥被绑定到全部的网络秘钥上。

下图阐述了应用秘钥绑定的实例。

设备秘钥

设备秘钥是一个访问层的秘钥,只有节点自己和配置客户端知道。

设备秘钥应该被绑定到节点知道的每一个网络秘钥上。这种绑定不能被改变。

设备秘钥由ProvisionSalt和ECDHSecret通过K1方法得到。

其中ProvisionSalt是一个公有值,ECDHSecret和DevKey是私有值。

应用秘钥

应用秘钥通过随机数生成器产生。

应用秘钥标识(AID)用于表示应用秘钥,通过对应用秘钥做K4方法得到。

网络秘钥

网络秘钥通过一个随机数生成器产生。(蓝牙核心定义的PartH,Volume2中涉及)

网络秘钥存在一种分层。如下图:

NID,加密秘钥和私有秘钥

每一个网络层PDU使用有NID,加密秘钥和私有秘钥组成的安全材料实现安全加密。

NID是一个7bit的值,标识了网络层PDU使用的安全材料。

注意:对于每一个NID最多有2121个可以使用的秘钥;因此,NID只能提供一个安全材料已经在网络层PDU被使用的指示。

主安全材料(相对于朋友安全材料而定义)由NID,加密秘钥和私有秘钥由安全凭证作为输入,通过K2函数得到。

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

朋友关系中的安全材料通过朋友关系的安全凭证得到:

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

其中,

LPNAddress是建立朋友关系时朋友请求消息(Friend Request message)的源地址。

FriendAddress是建立朋友关系时朋友提供消息(Friend Offer message)的源地址。

LPNCounter是建立朋友关系时朋友请求消息中LPNCounter字段的值。

FriendCounter是建立朋友关系时朋友提供消息中FriendCounter字段的值。

对于在低功耗节点和朋友节点之间传输的网络层PDU需要用到朋友安全材料。

对于其他的网络层PDU,用主(master)安全材料。(这里主安全材料相对于朋友安全材料)

网络ID

网络ID有网络秘钥通过K3方法得到。每个网络秘钥生成一个网络ID。

这个网络ID是公有的信息。

标识秘钥(IdentityKey)

标识秘钥由网络秘钥得到。每个网络秘钥生成一个标识秘钥。

salt = s1("nkik")

P = "id 128" || 0x01

IdentityKey = k1(NetKey, salt, p)

Beacon秘钥

Beacon秘钥由网络秘钥得到。每一个网络秘钥生成一个Beacon秘钥。

salt = s1("nkbk")

P = "id128" || 0x01    // id128应该如何理解?

BeaconKey = k1(Netkey, salt, P)

全局秘钥索引

网络和应用秘钥组着在mesh网络中的两个列表中,通过配置客户端维护。

每一个列表是一个共享的mesh网络资源。并且每个列表最大容纳4096个秘钥。

秘钥通过全局的秘钥索引完成引用:网络秘钥索引和应用秘钥索引。

秘钥索引是一个12bit的值,从0x000到0xFFF。

索引是0x000的网络秘钥被称为主网络秘钥(Primary NetKey)

消息安全性

消息重放(replay)保护

消息处理流

原文地址:https://www.cnblogs.com/minnowbin/p/9823504.html

时间: 2024-10-11 01:24:55

Mesh Profile (3.8)mesh安全性的相关文章

Mesh Profile (3.6)高传输层

(翻译自<MeshProfile v1.0>3.6 Uppper Transport Layer) 综述 高传输层包含了来自访问层的访问数据或者来自高传输层内部的控制消息.并完成将消息传输给对侧高传输层的工作. 对于来自访问层的消息,会使用一个应用秘钥完成加密和认证.这允许了在高传输层的接收过程中完成对接收到的消息的认证. 传输控制消息有高传输层内部生成,并且只在网络层完成加密和认证. 高传输层访问PDU 当网络层PDU中的CTL字段为0时,高传输层PDU中包含一个访问数据.这个PDU被认为是

Mesh Profile (3.5)低传输层

(翻译自<MeshProfile v1.0>3.5 Lower Transport Layer) 综述 低传输层利用来自高传输层的PDU组成自身的消息,并且将这些消息发送给对侧的低传输层.这些高传输层PDU的大小可能适合一个单独的地传输层PDU,也可能被分片为多个低传输层PDU.当接收到消息时,低传输层处理低传输层PDU,可能需要将多个PDUs重组为高传输层PDU,一旦重组完成便将他们递交给高传输层. 低传输层PDU 低传输层PDU用于将高传输层PDU发送给其他节点. 低传输层PDU第一个oc

Geodesic-based robust blind watermarking method for three-dimensional mesh animation by using mesh segmentation and vertex trajectory

之前因为考试,中断了实验室的工作,现在结束考试了,不能再荒废了. 最近看了一篇关于序列水印的文章,大体思想是:对于一个网格序列,首先对第一帧进行处理,在第一帧上,用网格分割算法(SDF)将网格分割成几个有意义的区域.在每个区域中,计算区域中的点到区域边界的测地线距离,根据测地线距离再将区域里的点分到不同的集合中,然后使集合中测地线距离的平均值保持在规定的范围内,从而嵌入水印. 下面介绍具体做法. 水印序列:+1.-1序列,由伪随机函数生成 网格分割算法:Shape Diameter Functi

游戏框架其九:网和着色器( Mesh and Shader )

网的重要作用可以导入3DMAX等创建的模型,到游戏中:着色器可以实现特定绚丽的效果.它们的实现如下 1. 网 Mesh的实现: #pragma once //======================================================================== // File: Mesh.h - classes to render meshes in D3D9 and D3D11 // 主要是导入3DMAX等软件生成的模型文件 基于Windows Dir

Wi-Fi Mesh网络技术

Wi-Fi在很早的时候就引入了mesh技术,并且最近得到了越来越多的关注.谷歌.Eero.Linksys.Netgear以及几乎所有以家庭和小型办公室为目标的网络品牌都提供了mesh网格系统.但是也有针对企业级市场的Wi-Fi mesh解决方案,无线技术的进步提高了部署企业mesh网络的可行性,特别是那些有线部署施工难度大的应用场景中. Wi-Fi mesh网络背后的理念是,并非所有接入点(AP)都必须接入有线基础设施,因为每一个mesh节点都可以是一个中继器,可以让附近的 mesh AP连接网

Service Mesh体验

前言# 计算机软件技术发展到现在,软件架构的演进无不朝着让开发者能够更加轻松快捷地构建大型复杂应用的方向发展.容器技术最初是为了解决运行环境的不一致问题而产生的,随着不断地发展,围绕容器技术衍生出来越来越多的新方向. 最近几年,云计算领域不断地出现很多新的软件架构模式,其中有一些很热门的概念名词如:云原生.函数计算.Serverless.Service Mesh 等等,而本文将初窥一下 Service Mesh 的面纱.下面结合自己的理解尽量以通俗的话进行叙述. 背景和定义# 微服务及服务治理#

企业应用架构演化探讨:从微服务到Service Mesh

作者:李宁 来源:博云技术社区 / 博云研究院 当下微服务的实践方案中,Spring Cloud,Dubbo作为主流的落地方案,在企业应用架构中发挥越来越重要的作用.本文探讨企业应用架构如何从微服务架构向Service Mesh架构演化,并形成落地方案.需要特别说明:本文讨论的架构目前适用于普通的企业级应用,其他行业(例如互联网)需要进一步扩展. 在讨论之前,我们需要明确一个事实:企业应用一定是围绕业务进行的. 无论采用什么的架构落地,都是为了更好的为应用业务进行服务.从企业应用的特性考虑,主要

Unreal Cook Book:神奇的Spline Mesh

啥是Spline Mesh 虚幻4引擎和Unity3D一个主要的不同就是:虚幻4引擎提供了非常非常多的各种功能.这是因为EPIC也开发游戏,而且是很成功的大作.他们会把游戏项目中一些验证过.可被其他开发者重用的功能整合到引擎层.所以虚幻4引擎要学习的东西非常多,但是如果你掌握的越多,做起项目来很可能就约轻松.:) 本文就介绍虚幻4引擎中的一个很好玩的组件:Spline和Spline Mesh.Spline就是一个曲线,你可以在编辑器中添加控制点,移动控制点,设置控制点的切线等:而Spline M

untiy绘制网格mesh

关于绘制网格, 雨松前辈 已经解释的非常的到位,这里我只是搬运工,实在是感觉自己去描述的话不会有雨松大神描述的清楚,该文章循序渐进,一步步引导读者去理解unirty 绘图机制,真的是没有比这个再好得了,下面是文章原文: 首先创建Unity工程,接着创建一个空的游戏对象,然后给该游戏对象绑定Mesh Filter组件 与 Mesh Renderer组件. Mesh Filter组件:表示网格面,这个网格面是由我们使用代码将所有三角形拼接起来生成的面. Mesh Renderer组件:表示表示网格的