当前位置: 首页 > news >正文

FiRa标准——MAC实现(二)

在IEEE 802.15.4z标准中,最关键的就是引入了STS(加扰时间戳序列),实现了安全测距,大大提高了测距应用的安全性能。在FiRa的实现中,其密钥派生功能是非常重要的一个部分,本文首先对FiRa MAC中加密以及信息相关的内容进行简单的介绍,为后续介绍相关源码的实现打好铺垫。关于FiRa标准中的角色、工作的基本原理,参考前一篇介绍MAC内容:FiRa标准——MAC实现(一)。

1. 关于FiRa MAC STS模式

对于FiRa MAC中加密相关内容的实现,首先需要了解FiRa中STS(Scrambled Timestamp Sequence)生成的两种类型:

  • 静态STS(Static STS)
  • 动态STS(Dynamic STS)

对于静态STS模式下,需要确保:

  • 确保在一个测距轮的每个时隙都生成不同的STS来确保可靠的测距;
  • 允许实现低成本和高性能;
  • 保证立即重新同步。

对于动态STS模式,需要保证:

  • 通过确保不以明文形式传输可识别信息来保护用户隐私;
  • 保护通过UWB传输的数据(时间戳、应用有效载荷)的机密性、完整性和真实性;
  • 确保每个时隙都可以生成不同的STS(初始STS,每个时隙增加1);
  • 确保可以检测到重放攻击;
  • 允许受控对象在单个控制消息上同步;
  • 限制开销以优化链路预算;
  • 限制旁路通道攻击的风险。

从两种模式的定义中,我们可以知道,在静态STS中,对于每个测距轮(Ranging Round)的对应时隙编号的STS是相同的,这就允许接收方能够更加快速的实现与控制器的同步;而对于动态STS而言,安全性更高,对于时隙索引一直递增,也就是说,每个测距时隙的STS都不同,这是与静态STS最大的区别。

由于实现的方式不一样,相应的其加密方式也有所不同。

1.1 动态STS密钥生成

动态STS生成模式从上图中可以看到,在实现中涉及到以下一些方法:

  • KDF(Key derivation function),密钥派生函数,基于相应的输入、key生成计算需要的相关密钥内容,涉及生成的内容包括:secDataProtectionKeysecPrivacyKeysecDerivedPayloadKeysecDerivedAuthenticationKeyphyStsIndecInitsecDerivedAuthenticationIV
  • CSPRNG算法,用于生成STS;
  • ECB算法,对于IEEE 802.15.4的Vendor IE需要使用ECB算法进行加密;
  • CCM*(ccm start)算法,对于IEEE 802.15.4数据帧部分,需要使用CCM*算法进行加密处理。

对于STS模式下,我们可以看到,每个时隙phySTSindex、cryptoStsIndex都会增加,被用作每个时隙生成不同STS的种子、以及Vendor IE、Payload加密的参数。其初始值phyStsIndexInit由config digest通过KDF函数之后生成。

Vendor IE使用ECB算法进行加密,在ECB模式下,对密文位的任何修改都会对每个明文产生雪崩效应,因此,可以用于检测修改。
ECB加密使用特定秘钥secPrivacyKey,对于一个完整的会话来说都是一样的,这样,受控对象可以随时用于同步。

IEEE Std 802.15.4z-2020中使用DRBG用于生成STS。cryptoStsIndex被附加到一个32位计数器上,该计数器将在每个时隙的开始时重置,以确保无论之前时隙STS的大小如何,cryptoStsIndex和当前配置的信息都足够生成STS。

对于数据载荷加密使用CCM*算法,无法对其内容进行假设,因此将使用Authenticated Encryption (身份验证加密,AE)。由于AE是基于计数器模式加密的,因此有必要向AE提供一个随机数(nonce)。这个随机数可以在每个加密数据包的前面传输,这将会增加传输开销。因此,cryptoStsIndex将被用作nonce更改的一部分。

1.2 静态STS密钥生成

静态STS生成模式
与动态STS模式相比,整体进行了较大的简化:
1)Vendor IE部分不再进行加密;
2)生成STS的CSPRNG算法使用了初始化中配置的phyVUpper64;
3)cryptoStsIndex进行了简化,在每个测距轮的第一个时隙都会重置为0。

另外,在动态STS模式下还涉及到key rotation等方式来进一步提高加密的安全性。

相关文章:

FiRa标准——MAC实现(二)

在IEEE 802.15.4z标准中,最关键的就是引入了STS(加扰时间戳序列),实现了安全测距,大大提高了测距应用的安全性能。在FiRa的实现中,其密钥派生功能是非常重要的一个部分,本文首先对FiRa MAC中加密…...

oracle中分组函数LISTAGG

前言 Oracle中的 GROUP_CONCAT 函数用于将多行数据合并为一行,并以指定的分隔符分隔各个值。在Oracle中,没有直接的GROUP_CONCAT函数,但可以使用 LISTAGG 函数来实现类似的功能。 如何使用 1、使用SELECT语句选择需要合并的列,…...

深度学习pytorch之hub模块

pytorchhub模块里面有很多模型 https://pytorch.org/hub/ github网址:https://github.com/pytorch/pytorch import torch model torch.hub.load(pytorch/vision:v0.10.0, fcn_resnet50, pretrainedTrue) # or # model torch.hub.load(pytorch/vision:v0.10.0, fc…...

LeetCode 2258. 逃离火灾:BFS

【LetMeFly】2258.逃离火灾 力扣题目链接:https://leetcode.cn/problems/escape-the-spreading-fire/ 给你一个下标从 0 开始大小为 m x n 的二维整数数组 grid ,它表示一个网格图。每个格子为下面 3 个值之一: 0 表示草地。1 表示着火的格…...

C# PaddleInference.PP-HumanSeg 人像分割 替换背景色

效果 项目 VS2022.net4.8OpenCvSharp4Sdcb.PaddleInference 包含4个分割模型 modnet-hrnet_w18 modnet-mobilenetv2 ppmatting-hrnet_w18-human_512 ppmattingv2-stdc1-human_512 代码 using OpenCvSharp; using Sdcb.PaddleInference; using System; using System.Col…...

Java 变量初始化的两种方式和优缺点比较

第一种初始化方式:(优先推荐) String fileRename null; File fileToSave null; 这种方式将变量的作用域限定在循环外部,即在整个代码块中都可以使用这些变量。初始值为null表示变量在开始时没有具体的数值。 这种方式更好的…...

15.三数之和

​题目来源: leetcode题目,网址:15. 三数之和 - 力扣(LeetCode) 解题思路: 1.三重循环暴力遍历,超时原因,三重循环复杂度太高 2.双重循环哈希表,超时原因,哈…...

竞赛选题 深度学习疲劳驾驶检测 opencv python

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 🔥 优…...

PROFINET和UDP、MODBUS-RTU通信速度对比实验

这篇博客我们介绍PROFINET 和MODBUS-RTU通信实验时的数据刷新速度,以及这种速度不同对控制系统带来的挑战都有哪些,在介绍这篇对比实验之前大家可以参考下面的文章链接: S7-1200PLC和SMART PLC的PN智能从站通信 S7-200 SMART 和 S7-1200PLC进行PROFINET IO通信-CSDN博客文…...

CSS3 多媒体查询、网格布局

一、CSS3多媒体查询: CSS3 多媒体查询继承了CSS2多媒体类型的所有思想,取代了查找设备的类型。CSS3根据设置自适应显示。 多媒体查询语法: media not|only mediatype and (expressions) { CSS 代码...; } not: not是用来排除掉某些特定…...

SpringBoot基础(九)-- 配置文件优先级

目录 1. 3种格式的配置文件的优先级 2. 案例演示 小结: 3. 小技巧:自动提示功能消失解决方案...

C++ static关键字

C static关键字 1、概述2、重要概念解释3、分情况案例解释3.1 static在类内使用3.2 static在类外使用案例一:案例二:案例三 1、概述 static关键字分为两种情况: 1.在类内使用 2.在类外使用 2、重要概念解释 (1)翻译…...

Anaconda Powershell Prompt和Anaconda Prompt的区别

先说结论:主要功能应该一样。区别在于powershell支持的命令更多。比如查询路径的命令pwd和列表命令ls。 Anaconda PowerShell Prompt和Anaconda Prompt是Anaconda发行版中两个不同的命令提示符工具。 Anaconda Prompt是Anaconda发布的默认命令提示符工具&#xff0…...

关于tcp发送成功但对端无法接收情况的思考

用到一个http服务,但调用频率很高,每次请求都使用短连接的话,有点浪费。 所以尝试复用http连接,请求的时候在头部添加Connection:Keep-alive,对端支持,但会在一定时常或一定请求次数后关闭该连接…...

01-解码-H264转YUV

整体方案: 采集端:摄像头采集(YUV)->编码(YUV转H264)->RTMP推流 客户端:RTMP拉流->解码(H264转YUV)->YUV显示(SDL2) H264码流转YUV是视频解码部分,具体的代码实现如下。 #include <stdio.h> #include <stdlib.h> #ifdef __cplusplus ext…...

keepalived+Nginx+邮件

实验场景&#xff1a; 我使用keepalived保证nginx的高可用&#xff0c;我想知道什么时候ip发生漂移&#xff0c;可以让ip发生漂移的时候 我的邮箱收到消息. 如果对keepalived不了解&#xff0c;这有详细解释&#xff1a;keepalived与nginx与MySQL-CSDN博客https://blog.csdn.ne…...

CMakeCache.txt有什么用

2023年11月11日&#xff0c;周六上午 CMakeCache.txt 是由 CMake 自动生成的一个缓存文件&#xff0c;用于记录在配置过程中生成的各种变量和选项的值。 在使用 CMake 构建项目时&#xff0c;CMake 会根据 CMakeLists.txt 文件中的配置和命令&#xff0c;解析项目的源代码并生…...

ZYNQ_project:key_breath

[Synth 8-327] inferring latch for variable led_breath_reg ["C:/Users/warrior/Desktop/ZYNQ/pl/key_breath/rtl/led_breath.v":66] 因为在组合逻辑中&#xff0c;用了非阻塞赋值的方式赋值信号。 组合逻辑自己给自己赋值会产生组合回环&#xff0c;输出不稳定。 …...

设计模式 (原则)

在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程序员要尽量根据6条原则来开发程序&#xff0c;从而提高软件开发效率、节约软件开发成本和维护成本 一、开闭原则 对扩展开放&#xff0c;对修改关闭。 案…...

LeetCode 每日一题 2023/11/6-2023/11/12

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 11/6 318. 最大单词长度乘积11/7 2586. 统计范围内的元音字符串数11/8 2609. 最长平衡子字符串11/9 2258. 逃离火灾11/10 2300. 咒语和药水的成功对数11/11 765. 情侣牵手1…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...