LE legacy Pairing过程和后续连接过程简介

2023-10-10 04:30

本文主要是介绍LE legacy Pairing过程和后续连接过程简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LE legacy Pairing过程和后续连接过程简介

 

一、      手机与设备为配对时,进行配对过程:

 

  1. 1.       下面6步是启动配对过程:

 

 

 

  1. 2.       下面5步是启动加密过程:

 

 

 

 

通过上面5步之后,整个链路就被加密了,之后通过STK对数据加密形成密文数据,用于手机和设备之间交换LTK、IRK、SIGN等密钥信息,具体交换哪些密钥,取决于SMP_Pairing Response中的 Initiator Key Distribution和 Responder Key Distribution选项。

 

  1. 3.       下面6步是交换LTK、IRK等信息的过程:

 

 

 

此信息交换过程中,SMP_Pairing Response中的         Initiator Key Distribution和    Responder Key Distribution选项如下图所示:

 

 

 

总结:通过以上过程之后,整个配对过程就完成了,之后再通讯,就是使用LTK作为密钥对数据进行加解密了。

 

二、      手机已经与设备配对,直接连接设备的过程:

 

如果手机已经与设备配对,则连接过程就比较简单了,没有上面的SMP相关的步骤了,只有启动加密过程的5步。大体的思路就是,手机将EDIV和RAND发送给设备,设备使用EDIV和RAND,以及事先存好的种子数据,计算出LTK,而手机端事先已经在配对过程中存储了该LTK,这样,双方都有了该LTK,并且双方也交换了SKD和IV,因此具备了同步加解密数据的能力。流程图如下:

 

 

总结:通过以上过程之后,整个配对过程就完成了,之后再通讯,就是使用LTK作为密钥对数据进行加解密了。

 

三、      密钥简介

  1. 主端的confirm信息由临时密钥TK(全0)、主端随机数、SMP请求命令、SMP请求应答命令、主端地址类型、主端地址、从端地址类型、从端地址计算得来;
  2. 从端的confirm信息由临时密钥TK(全0)、从端随机数、SMP请求命令、SMP请求应答命令、主端地址类型、主端地址、从端地址类型、从端地址计算得来;
  3. 短期密钥STK由临时密钥TK(全0)、主端随机数、从端随机数计算得来;
  4. 每次连接从端产生长期密钥LTK过程比较复杂,如下:

a)         DIV 和 ER 经过一定的运算,得到LTK;

b)         其中ER为128bit的种子数据,由厂商分配,需要存储在设备中;

c)         而DIV由EDIV 、RAND 、DHK三个参数经过一定的计算得来;

d)         其中EDIV和RAND两个参数在每次蓝牙连接时由主端发送给从端的;

e)         DHK由IR经过运算得到;

f)          其中IR为128bit的种子数据,由厂商分配,需要存储在设备中;

所以,只要有ER、IR两个种子数据,以及主端发送的EDIV和RAND,从端就可以恢复长期密钥LTK。其中ER、IR两个种子数据由每个设备保存起来,只有设备自己知道。

而手机端需要保存配对时从端发送过来的LTK、EDIV和RAND三组数据。

当然,从端也可不进行以上麻烦的计算,直接保存LTK即可,这样可以节省计算LTK的时间,但是会耗费一定的flash来存储不同设备的LTK,对于memory不太够用的设备就不太合适。

  1. 会话密钥的产生:使用STK或者LTK作为密钥,使用IV作为初始向量,对分散因子SKD(作为明文数据)进行加密,得到的密文数据则为会话密钥。SKD由SKDm和SKDs产生,IV由IVs和IVm产生。
  2. 明文数据的加解密:使用会话密钥对数据进行加解密。

转载于:https://www.cnblogs.com/unrulife/p/10876795.html

这篇关于LE legacy Pairing过程和后续连接过程简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/177960

相关文章

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

Java Docx4j类库简介及使用示例详解

《JavaDocx4j类库简介及使用示例详解》Docx4j是一个强大而灵活的Java库,非常适合需要自动化生成、处理、转换MicrosoftOffice文档的服务器端或后端应用,本文给大家介绍Jav... 目录1.简介2.安装与依赖3.基础用法示例3.1 创建一个新 DOCX 并添加内容3.2 读取一个已存

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——