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

2024-04-26 09:44

本文主要是介绍蓝牙低能耗安全连接 – 数值比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

除了 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.chinasem.cn/article/937239

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

java如何通过Kerberos认证方式连接hive

《java如何通过Kerberos认证方式连接hive》该文主要介绍了如何在数据源管理功能中适配不同数据源(如MySQL、PostgreSQL和Hive),特别是如何在SpringBoot3框架下通过... 目录Java实现Kerberos认证主要方法依赖示例续期连接hive遇到的问题分析解决方式扩展思考总

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

oracle如何连接登陆SYS账号

《oracle如何连接登陆SYS账号》在Navicat12中连接Oracle11g的SYS用户时,如果设置了新密码但连接失败,可能是因为需要以SYSDBA或SYSOPER角色连接,解决方法是确保在连接... 目录oracle连接登陆NmOtMSYS账号工具问题解决SYS用户总结oracle连接登陆SYS账号

对postgresql日期和时间的比较

《对postgresql日期和时间的比较》文章介绍了在数据库中处理日期和时间类型时的一些注意事项,包括如何将字符串转换为日期或时间类型,以及在比较时自动转换的情况,作者建议在使用数据库时,根据具体情况... 目录PostgreSQL日期和时间比较DB里保存到时分秒,需要和年月日比较db里存储date或者ti

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可