蓝牙低能耗安全连接 – 数值比较

news2024/11/19 2:31:42

除了 LE Legacy 配对之外,LE Secure Connections 是另一种配对选项。 LE 安全连接是蓝牙 v4.2 中引入的增强安全功能。它使用符合联邦信息处理标准 (FIPS) 的算法(称为椭圆曲线 Diffie Hellman (ECDH))来生成密钥。对于 LE 安全连接,它支持四种关联模型:

  •  正常工作
  • 数值比较(仅适用于 LE 安全连接)
  •  密钥输入
  •  带外 (OOB)

数字比较仅适用于 LE 安全连接,不适用于传统配对。所以这是一个较新的关联模型,今天我们将深入了解它。

1. 第 1 阶段 – 配对特征交换

我在第 1 部分中谈到了配对功能交换,但我想在这里回顾一下。表 1 是配对请求/响应数据包定义。在“AuthReq”字段中,有一位名为“SC”。如果设备支持 LE 安全连接配对,则 SC 字段应设置为 1,否则应设置为 0。如果两个设备都支持 LE 安全连接配对,则应使用 LE 安全连接配对,否则应使用 LE Legacy应使用配对。

表 1 配对请求/响应

*位顺序为 LSB 到 MSB。

因此,如果两个设备想要通过 LE 安全连接进行配对,则必须将“SC”设置为 1,以指示对等设备“我有安全连接的能力”。

2. 第 2 阶段 – 密钥生成方法选择

配对特征交换后,发起者和响应者应确定将使用哪种密钥生成方法。以下是密钥生成方法的 C 语法编码示例:

 

表 2 列出了用于数字比较的发起和响应设备的 IO 能力。当发起设备和响应设备都具有显示和是/否 I/O 功能,或显示和键盘 I/O 功能时,将使用数字比较关联模型。

表 2 用于数值比较的 IO 功能映射

* – 表示它适用于除数字比较之外的其他密钥生成方法。

3. 第 2 阶段 – 身份验证

密钥生成后,配对将进入第 2 阶段,即身份验证。目的是防止中间人 (MITM) 攻击并生成用于加密连接链路的密钥。

在公钥交换中,每个设备都会生成自己的椭圆曲线 Diffie-Hellman (ECDH) 公私密钥对。公钥-私钥对包含私钥和公钥。

  • SKa,发起设备的私钥
  • PKa,发起设备的公钥
  • SKb,响应设备的私钥
  • PKb,响应设备的公钥

图1、Numeric Comparison的认证流程

配对是通过发起设备将其 PKa 发送到响应设备来启动的。响应设备用它自己的 PKb 进行回复。交换公钥后,设备就可以开始计算 Diffie-Hellman 密钥;您可以看到它从图 1 中的 1b 末尾开始。

之后,每个设备都会选择一个随机的 128 位随机数。该值用于防止重放攻击。

  • Na,发起设备的 128 位随机数。
  • Nb,响应设备的 128 位随机数。

随后,响应设备计算承诺 Cb,该承诺是使用 Nb、PKa、PKb 和 0 计算得出的。如步骤 3、图 1 所示。

步骤 4,响应设备在接收发起设备的 Na 之前必须共享 Cb。

步骤 5,发起设备必须在接收响应设备的 Nb 之前共享其 Na。

步骤6,发起设备在收到响应设备的Nb后必须检查来自响应设备的Cb。

此时,发起或响应设备已经知道对等设备的公钥和随机数。发起设备可以确认来自响应设备的承诺(Cb)。此时的失败表明存在攻击者或其他传输错误,并应导致配对过程中止(步骤 6.a)。

假设承诺检查成功,两个设备各自计算 6 位确认值,并在各自的设备上向用户显示。用户应检查这些 6 位值是否匹配并确认是否匹配。如果不匹配,则配对中止。

4. 第 3 阶段 – 长期密钥,LTK

当认证成功后,两台设备开始计算LTK,用于链路加密。这是配对和重新连接难题的最后一部分:在不同的关联模型中,验证对等设备并防止中间人 (MITM) 攻击。由于 LTK 计算对于任何 LE 安全连接关联模型都很常见,因此我将在下一篇博文中更详细地讨论它。

 5. 结论

根据用户体验和便利性,与第 3 部分“密钥输入、数字比较”相比,只需要 YES 和 NO 两个按钮来指示这两个设备之间的 6 位确认值是否匹配,而不需要数字键盘用于密钥输入,从“0”到“9”,因此这是简化硬件 I/O 功能的改进。同时,由于数字比较仅适用于 LE 安全连接,因此它可以针对窃听和 MITM 等威胁提供增强的保护。所以,如果您开始开发一款对隐私敏感并且需要蓝牙 LE 链路高度保护的产品,那么这里是您不错的选择。

6. 报文说明

Pairing DHKey Check的作用:

 

"Pairing DHKey Check"是在生成Diffie-Hellman密钥交换(DHKey)过程完成后执行的一步,目的是验证双方设备在此次密钥交换过程中生成的密钥是否一致。Diffie-Hellman密钥交换是一个开放密钥交换的方法,允许双方在没有共享秘密的情况下建立一个共享密钥。

 

在蓝牙4.2及以上版本中引入的LE Secure Connections配对过程,使用的是ECDH(Elliptic Curve Diffie-Hellman)密钥交换,提供了比之前标准更高的安全级别。

 

通过DHKey Check ECDH过程生成的密钥将用于加密通信,因此这个检查步骤确保了没有中间人(Man in the Middle, MitM)攻击。如果检查失败,表明密钥交换过程可能被干扰,配对过程将被终止。

 

DHKey Check的工作原理:

 
  1. 生成确认值:在最初的密钥交换步骤后,设备A和设备B各自使用自己的私钥和对方的公钥来创建一个DHKey。然后,它们各自使用该DHKey和一些随机数(RAND)来生成一个确认值(DHKey Check Value)。

  2. 交换确认值:设备A和设备B将各自生成的确认值发送给对方。

  3. 验证确认值:接收到对方确认值的设备将进行验证,看是否和自己计算的值匹配。这个过程确保双方都有一样的DHKey。

  4. 确认结果:如果确认值匹配,则认为密钥交换是安全的,配对过程继续;如果不匹配,则配对过程失败,并且设备需要重新启动配对过程或终止连接

最后,进行IRK交换,对应报文Opcode: Identity Information (0x08)

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

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

相关文章

MMSeg搭建模型的坑

Input type(torch.suda.FloatTensor) and weight type (torch.FloatTensor) should be same 自己搭建模型的时候,经常会遇到二者不匹配,以这种情况为例,是因为部分模型没有加载到CUDA上面造成的。 注意搭建模型的时候,所有层都应…

汽车企业安全上网解决方案

需求背景 成立于1866年的某老牌汽车服务独立运营商,目前已经是全球最大的独立汽车服务网络之一,拥有95年的历史,在全球150多个国家拥有17,000多个维修站,始终致力于为每一位车主提供高品质,可信赖的的专业汽车保养和维…

win10加入域环境

win10加入域环境 导航 文章目录 win10加入域环境导航一、关闭防火墙二、使客户端的电脑指向于域控服务器三、检验是否加入了域 一、关闭防火墙 在进行加入域服务之前,我们需要先关闭防火墙(为了不必要的麻烦) 按 winr调出运行窗口,输入 control打开控制面板 点击系统和安全点…

42. UE5 RPG 实现火球术伤害

上一篇,我们解决了火球术于物体碰撞的问题,现在火球术能够正确的和攻击目标产生碰撞。接下来,我们要实现火球术的伤害功能,在火球术击中目标后,给目标造成伤害。 实现伤害功能的思路是给技能一个GameplayEffect&#x…

JAVA毕业设计136—基于Java+Springboot+Vue的房屋租赁管理系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的房屋租赁管理系统(源代码数据库)136 一、系统介绍 本项目前后端分离,分为管理员、用户、工作人员、房东四种角色 1、用户/房东: …

正态性检验

t检验、方差分析(ANOVA)等参数检验都有一个共同的前提条件:样本数据必须服从正态分布,即样本数据必须来源于一个正态分布的总体,若样本数据不服从正态分布,就不能用以上参数检验对数据进行分析,…

OpenCV鼠标绘制线段

鼠标绘制线段 // 鼠标回调函数 void draw_circle(int event, int x, int y, int flags, void* param) {cv::Mat* img (cv::Mat*)param;if (event cv::EVENT_LBUTTONDBLCLK){cv::circle(*img, cv::Point(x, y), 100, cv::Scalar(0, 0, 255), -1);} }// 鼠标回调函数 void dra…

.NET 个人博客-添加RSS订阅功能

个人博客-添加RSS订阅功能 前言 个人博客系列已经完成了 留言板文章归档推荐文章优化推荐文章排序 博客地址 然后博客开源的原作者也是百忙之中添加了一个名为RSS订阅的功能,那么我就来简述一下这个功能是干嘛的,然后照葫芦画瓢实现一下。 RSS简述…

SpringBoot+RabbitMQ实现MQTT协议通讯

一、简介 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件 。此…

阿斯达年代记游戏下载教程 阿斯达年代记下载教程

《阿斯达年代记:三强争霸》作为一款气势恢宏的MMORPG大作,是Netmarble与STUDIO DRAGON强强联合的巅峰创作,定于4月24日迎来全球玩家热切期待的公测。游戏剧情围绕阿斯达大陆的王权争夺战展开,三大派系——阿斯达联邦、亚高联盟及边…

浅谈菊风实时音视频 (RTC)与实时操作系统 (RTOS) 在智能硬件领域应用

近年来,菊风通过实时音视频赋能智能手表、智能门禁、智能门锁/门铃、智能眼镜等数十种智能硬件,与一众合作伙伴共同探索在IoT智能硬件领域的不同场景应用,积累了丰富的实践经验。在智能硬件中,RTOS因其轻量化的系统内核&#xff0…

使用Mybatis映射时间 DateTime ==> LocalDateTime

首先查看,数据库字段: 书写映射实体类对象VO: Data public class OrderListVO implements Serializable {private Integer orderId;private String memberName;private String orderNumber;private BigDecimal orderPrice;private String l…

element-ui upload 组件 手动多次出发 submit

element 上传组件 upload 上传成功以后,想重新 调用 submit()函数,发现是不可以进行多次触发的,。 直接上解决方法,在上传成功后的钩子函数里添加:fileList[0l.status ready fileList是文件列表,status是单文件的状态改成ready就…

全栈从0到1 3D旅游地图标记和轨迹生成

功能演示 演示视频 体验地址 Vercel App 开发技术栈: NextJs(前端框架)React(前端框架)TailwindCSS (CSS样式)echart echart gl (地图生成)shadui(UI组件…

机器视觉系统-工业光源什么是无影光

光路描述:通过结构或漫射板改变光路,最终发光角度包含了高角度 和低角度。 效果分析:兼具了高角度光和低角度光的效果,使被测物得到了多角度的照射,表面纹理、皱褶被弱化, 图像上整体均匀。 主要应用&#…

linux 上 jps 列出一堆 jar,如何快速定位 jar 文件启动位置?

例如,在 /data下有一个 xxx.jar ,如果是通过 "java -jar /data/xxx.jar" 方式启动,则 jps会列出的名字中带 xxx.jar,这时再 "ps -ef | grep xxx.jar" 就会列出 更详细的信息,例如 "java -ja…

Spring Kafka——基于 Spring Kafka 实现动态管理 Kafka 连接和 topic 的监听

文章目录 使用 Spring Kafka 动态管理 Kafka 连接和主题监听1. 前言2. 简单的消费程序配置3. Spring Kafka 主要的相关类的说明4. KafkaListener 注解的加载执行流程解析5. 动态监听消费订阅的设计与实现 使用 Spring Kafka 动态管理 Kafka 连接和主题监听 文章内容较长&#x…

Windows电脑中护眼(夜间)模式的开启异常

我的电脑是联想小新16pro,Windows11版本。之前一直可以正常使用夜间模式,但是经过一次电脑的版本更新之后,我重启电脑发现我的夜间模式不能使用了。明明显示开启状态,但是却不能使用,电脑还是无法显示夜间模式。 询问…

59、回溯-括号生成

思路: 括号是成对出现,首先左括号可以放n个,右括号也可以放n个。如果当前左括号放了3了,右括号放了4个,错了,如果左括号放了5个,右括号放了4个。可以,继续放右括号即可。所以可以设…

每日一题:跳跃游戏II

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…