FiRa标准——MAC实现(二)

news2024/12/27 16:06:31

在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等方式来进一步提高加密的安全性。

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

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

相关文章

element-plus 循环生成的多个input输入框如何校验

我们知道正常写出来的input输入框如何校验&#xff0c;那循环出来的输入框应该怎么校验咧&#xff0c;这里就教大家如何的去校验通过循环出来的输入框。 首先先看单个的input如何做校验 <template><div><el-form ref"ruleFormRef" :model"ruleF…

面试题:说一下公司常用MySQL分库分表方案

文章目录 一、数据库瓶颈1、IO瓶颈2、CPU瓶颈 二、分库分表1、水平分库2、水平分表3、垂直分库4、垂直分表 三、分库分表工具四、分库分表步骤五、分库分表问题1、非partition key的查询问题2、非partition key跨库跨表分页查询问题3、扩容问题 六、分库分表总结 一、数据库瓶颈…

使用MVS-GaN HEMT紧凑模型促进基于GaN的射频和高电压电路设计

标题&#xff1a;Facilitation of GaN-Based RF- and HV-Circuit Designs Using MVS-GaN HEMT Compact Model 来源&#xff1a;IEEE TRANSACTIONS ON ELECTRON DEVICES&#xff08;19年&#xff09; 摘要—本文阐述了基于物理的紧凑器件模型在研究器件行为细微差异对电路和系统…

Linux中的粘滞位

目录 粘滞位1、作用2、为什么添加粘滞位3、演示粘滞位的使用方法和效果 粘滞位 1、作用 为了多人协作写进行文件创作时&#xff0c;other用户没有办法将文件删除&#xff0c;只有超级管理员、该目录的所有者、该文件的所有者他们可以删除。 2、为什么添加粘滞位 你想在进行…

rabbitmq延迟队列发送与取消

安装延迟插件 根据rabbitmq的版本下载插件版本 # 延迟队列插件下载地址 https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases# 将本地下载好的插件复制到docker里 # docker cp rabbitmq_delayed_message_exchange-3.9.0.ez 容器名:/plugins docker cp r…

数据结构预算法--链表(单链表,双向链表)

1.链表 目录 1.链表 1.1链表的概念及结构 1.2 链表的分类 2.单链表的实现(不带哨兵位&#xff09; 2.1接口函数 2.2函数的实现 3.双向链表的实现&#xff08;带哨兵位&#xff09; 3.1接口函数 3.2函数的实现 1.1链表的概念及结构 概念&#xff1a;链表是一种物理存储结…

基于SSM的学生就业管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

K8S知识点(八)

&#xff08;1&#xff09;实战入门-Label 通过标签实现Pod的区分&#xff0c;说白了就是一种标签选择机制 可以使用命令是否加了标签&#xff1a; 打标签&#xff1a; 更新标签&#xff1a; 筛选标签&#xff1a; 修改配置文件&#xff0c;重新创建一个pod 筛选&#xff1…

手写C++ 实现链表的反转、删除、合并

目录 一、手写List成员方法 1.1 打印链表 1.2 删除链表节点 1.3 链表中倒数第k个节点 1.4 反转链表 1.5 合并两个排序链表 二、完整代码 一、C实现链表成员方法 在上一篇博客《手写链表C》&#xff0c;实现了基本的List类。在面试中&#xff0c;经常被问到List如何反转、…

代码随想录训练营Day2:1.有序数组的平方 2.长度最小的子数组3,螺旋矩阵

本专栏内容为&#xff1a;代码随想录训练营学习专栏&#xff0c;用于记录训练营的学习经验分享与总结。 文档讲解&#xff1a;代码随想录 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓…

基于SSM的超市库存商品管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

dbeaver连接别人的数据库没有表

1.概念 非缺省的数据库&#xff1a; 通常是指在一个数据库管理系统&#xff08;DBMS&#xff09;中&#xff0c;除了系统默认创建的数据库之外的其他用户创建或自定义的数据库。许多数据库系统在安装后会创建一个默认数据库&#xff0c;例如MySQL中的mysql数据库&#xff0c;…

【lib.dll.a.so】Windows和Linux两个系统下的库文件

1.静态库&&动态库 Windows平台下&#xff1a;静态库后缀为.lib&#xff0c;动态库后缀为.dll Linux平台下&#xff1a;静态库格式为lib**.a&#xff0c;动态库格式为lib**.so 谈论两者区别之前&#xff0c;需要对程序编译和运行有一个大致认识&#xff1a; 代码想要…

765. 情侣牵手(困难)

首先不考虑已经正确坐在一起的组合在没有坐在一起的组合中&#xff0c;只有当两对情侣互相配对时只需要一次交换操作就可以使得两对情侣完成匹配&#xff0c;其余情况交换数等于情侣对数可以把所有情侣看成一个大集合&#xff0c;这个大集合是可以拆成若干小集合的&#xff0c;…

QGIS导出Geoserver样式加载

1.在QGIS中加载并设计样式 加载数据之后按F7键即可打开样式编辑器 可以右键图层&#xff0c;点击属性中的符号化&#xff0c;有一个“基于规则”&#xff0c;可以设定规则或者比例尺范围。可以实现一定比例尺缩放可见或不可见的效果。 2.设计完样式之后右键图层导出 选择保…

欧拉角(横滚角、俯仰角、偏航角)、旋转矩阵、四元数的转换与解决万向节死锁

1、概述 物体的位姿&#xff08;位置和方向&#xff09;的描述方法一般使用两个坐标系来表示&#xff0c;一个是世界坐标系或地面坐标系&#xff0c;这里我都叫做地面坐标系吧&#xff0c;属于参考坐标系&#xff1b;另一个是自身的坐标系&#xff0c;以飞机为例来讲述一些常见…

Linux学习教程(第一章 简介)4

第一章 简介 十一、Linux的主要应用领域有哪些? Linux 似乎在我们平时的生活中很少看到,那么它应用在哪些领域呢?其实,在生活中随时随地都有 Linux 为我们服务着。 1、网站服务器 用事实说话!访问国际知名的 Netcraft 网站 http:// www.netcraft.com,在 "Whats …

NLP领域的突破催生大模型范式的形成与发展

当前的大模型领域的发展&#xff0c;只是范式转变的开始&#xff0c;基础大模型才刚刚开始改变人工智能系统在世界上的构建和部署方式。 1、大模型范式 1.1 传统思路&#xff08;2019年以前&#xff09; NLP领域历来专注于为具有挑战性的语言任务定义和设计系统&#xff0c…

OpenCV C++ 图像处理实战 ——《多二维码识别》

OpenCV C++ 图像处理实战 ——《多二维码识别》 一、结果演示二、zxing库配置2.1下载编译三、多二维码识别3.1 Method one3.1.1 源码3.2 Method two3.2.1 源码四、源码测试图像下载总结一、结果演示 </

王道数据结构课后代码题p150 15.设有一棵满二叉树(所有结点值均不同),已知其先序序列为 pre,设计一个算法求其后序序列post。(c语言代码实现)

对一般二叉树&#xff0c;仅根据先序或后序序列&#xff0c;不能确定另一个遍历序列。但对满二叉树&#xff0c;任意一个结点的左、右子树均含有相等的结点数&#xff0c;同时&#xff0c;先序序列的第一个结点作为后序序列的最后个结点。 本题代码如下 void pretopost(char …