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

相关文章

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Python3.6连接MySQL的详细步骤

《Python3.6连接MySQL的详细步骤》在现代Web开发和数据处理中,Python与数据库的交互是必不可少的一部分,MySQL作为最流行的开源关系型数据库管理系统之一,与Python的结合可以实... 目录环境准备安装python 3.6安装mysql安装pymysql库连接到MySQL建立连接执行S

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为