CCC数字钥匙设计【BLE】--PE进入流程建立BLE加密连接

news2024/11/20 2:38:47

1、PE进入流程

PE进入的流程大体可以拆解为如下步骤:

1、手机与车端建立BLE加密连接;

2、创建URSK流程;

3、时间同步流程;

4、UWB测距流程;

5、根据各锚点BLE的RSSI及UWB的距离值,通过定位算法进行手机位置的定位;

6、若检测手机在合法区域,则进行迎宾、解锁。

本文档主要描述上面步骤1PE进入过程中与BLE通信相关的流程)的内容。

若BLE pairing和Encryption已经执行完成,之后手机靠近车辆时,将会启动PE进入流程。具体流程如下图。

1.1 步骤1:建立BLE连接

1、 车端BLE模块进行广播,手机进行扫描。

2、 采用RPA地址(resolvable private address)的方式。

3、 建立车端与手机的BLE连接。

1.2 步骤2:启动BLE加密

该步骤的流程如下图,具体可详见BLE5.0规范Vol6 Part D。

1、链路层通过Host的请求进行此操作,可以使用加密启动进程,在进入链接状态后启用数据包的加密。为了使能加密,必须交换两个参数,IVSKD。两者都由两部分组成:master部分和slave部分,通过LL_ENC_REQ 和 LL_ENC_RSP PDUs进行交换。在交换完成以及Host已经通知链路层长期秘钥(LTK)在链接中使用时,加密可以使用三方握手的方式LL_START_ENC_REQ 和 LL_START_ENC_RSP PDUs。具体流程如上图。

2、为了启动加密,master的链路层需要生成初始化向量(IVm) 和会话密钥(SKDm)的master部分。IVm为master的链路层生成的32位的随机数。SKDm为master的链路层生成的64位随机数。

3、master的链路层需要发送LL_ENC_REQ PDU,Rand 和 EDIV字段由Host提供。在master收到LL_ENC_RSP PDU应答后,只期望收到这个进程需要的PDUs。

4、当slave的链路层接收到LL_ENC_REQ PDU,slave的链路层需要生成初始化向量(IVs) 和会话密钥(SKDs)的slave部分。IVs为slave的链路层生成的32位的随机数。SKDs为的slave链路层生成的64位随机数。

5、slave的链路层需要发送LL_ENC_RSP PDU,slave的链路层需要将EDIVRand字段通知给Host。发送完LL_ENC_RSP PDU以后,slave的链路层可以收到对应于slave发送的LL Control PDU的LL_UNKNOWN_RSP PDU。

每个链路层需要按照下面方式合并初始向量部分以及会话密钥部分:

SKD = SKDm || SKDs

IV = IVm || IVs

SKDm 和 SKDs进行组合,SKDm的最低有效字节成为SKD的最低有效字节,SKDs的最高有效字节成为SKD的最高有效字节。

IVm 和 IVs进行组合,IVm的最低有效字节成为IV的最低有效字节,IVs的最高有效字节成为IV的最高有效字节。

6、长期秘钥(LTK)由Host提供给master和slave的链路层,如果Host提供了LTK,slave的链路层需要使用以LTK为秘钥的加密引擎计算sessionKey,并且SKD作为明文输入,sessionKey参数需要设置为加密引擎的数据

7、sessionKey 应用作为所有加密数据包的加密引擎的秘钥。

sessionKey计算出来以后,slave的链路层需要发送LL_START_ENC_REQ PDU,这个数据包不需要加密,并且链路层应设置为接收应答的加密数据包。

8、当master的链路层接收到LL_START_ENC_REQ PDU,需要发送LL_START_ENC_RSP PDU这个PDU是加密的,并且链路层需要设置为接收加密后的应答数据包。

9、当slave的链路层收到LL_START_ENC_RSP PDU后,它需要发送LL_START_ENC_RSP PDU,这个数据包是加密的。

10、当master的链路层收到LL_START_ENC_RSP PDU,则链路已经进行了加密。

这个进程在master端结束于master收到来自slave的LL_START_ENC_RSP PDU。在slave端结束于slave收到来自master的LL_START_ENC_RSP PDU。

1.3 步骤2.5:服务发现流程

结合CCC规范19.2.1.1中的Figure 19-2,在步骤2和步骤3中间应该还有一个服务发现的流程。具体如下。

1.4 步骤3:Device read SPSM and version from vehicle

1、手机发送命令给车端,读取SPSM:

ATT_READ_BY_TYPE_REQ(0x0001,0xFFFF,《UUID_SPSK_DCK_VERSION》)。

2、车端响应数据给手机:

ATT_READ_BY_TYPE_RSP(4+2*n+k*n, handle, SPSMDCK Major VersionDCK Minor Version1 ,3)

在CCC规范19.2.1.7中对SPSM特征有进了相关描述:

1.4.1 SPSM特征说明

SPSM,英文全称为Simplified Protocol/Service Multiplexer

1) 该特征将从车辆返回用于L2CAP信道的SPSM

2) 手机应在连接时,读取车辆的SPSM。

3) 由整车厂选择一个SPSM。

4) 对于基于LE credit的连接,使用动态分配的SPSM值(即在0x0080-0x00FF中,非SIG分配的SPSM值)

5) 在执行PE进入流程和车主配对流程时,手机应该基于BLE连接执行如下过程

a. 通过UUID读取特征(使用UUID_SPSM或UUID_SPSM_DK_VERSION)。

b. 通过UUID写入特征(对于UUID_DEVICE_DK_VERSION)

1.4.2 SPSM特征信息

表19-7 SPSM Characteristic declaration

表19-8 SPSM Characteristic value declaration

表19-9 Vehicle SPSM and DK version Characteristic Declaration

表19-10 Vehicle SPSM and DK Version Characteristic Value Declaration

1.5 步骤4:Device write version to vehicle

1、手机发送命令给车端,请求写入version:

ATT_WRITE_REQ(handle for 《UUID_DEVICE_DCK_VERSION》, DCK Major VersionDCK Minor Version1 ,3)

2、车端响应数据给手机:ATT_WRITE_RSP()

表19-11 Device Selected DK Version Characteristic Declaration

表19-12 Device Selected DK Version Characteristic Value Declaration

1.6 步骤5:Create L2CAP connection-oriented channel(CoC)

L2CAP英文全称为 Logical Link Control and Adaptation Protocol

L2CAP用来建立通道的,有0x0004用于ATT协议,0x0005用于L2CAP信令,0x0006用于安全管理。除此之外,还能建立很多其他协议通道。

L2CAP建立不同的协议管道,管道以下就是PDU,管道上就是用户数据。

L2CAP还可建立Dynamic 动态管道,如下图的0x0040-0x007F。(这个dynamic表达的是用户可以随意创建开闭)

下图标绿的通道是BLE可以使用通道。

1.7 步骤6:Capability Exchange

该步骤是可选的,具体说明如下。

如果车辆或手机具有更新的DK协议版本、UWB配置标识符、脉冲形状组合,或这些参数的组合,这些参数与上次Capability Exchange期间的参数不同,则应执行车主配对的Capability Exchange。

手机通过发送DK Event Notification(Subevent_Category设置为0x01,对应的command status code设置为0x02)触发Capability Exchange。车辆收到DK Event Notification后,则启动Capability Exchange,具体流程如下图。

1.8 步骤7:Digital Key Framework Secure Data exchange(encrypted over L2CAP CoC)

之后在执行UWB测距期间进行蓝牙数据通信均是基于L2CAP CoC通道来进行。比如TimeSync流程或Secure Ranging Setup流程等。

2、总结

PE进入流程中与BLE通信相关的流程,可以总结为如下几个步骤:

1、建立BLE连接

2、启动BLE加密,这个步骤之后的通信即是加密的。

3、服务发现流程

4、手机读取车辆的SPSM和版本

5、手机写入DK version到车端

6、建立L2CAP 通道CoC

7、Capability Exchange(可选)

8、UWB测距交互相关的蓝牙通信,如时间同步等。

3、参考

1、 参考文章:https://zhuanlan.zhihu.com/p/634546351

2、 参考标准:CCC-TS-101-Digital-Key-R3.pdf

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

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

相关文章

Android 图片加载框架Glide源码详解

我们看Glide的源码从Glide类入手,使用的时候我们先调用的with方法,源码中with有3个多载的方法:下图翻译过来就是activity用FragmentActivity Applicationcontext用 with(Context)还有一个with(View)的 殊途…

西瓜书读书笔记整理(六)—— 第六章 支持向量机

第六章 支持向量机 6.1 间隔与支持向量6.1.1 什么是支持向量机6.1.2 支持向量与间隔6.1.3 支持向量机的求解过程 6.2 对偶问题(dual problem)6.2.1 什么是对偶问题6.2.2 如何求解支持向量机的对偶问题 6.3 核函数(kernel function&#xff09…

基于Xml方式的Bean的配置-Bean的作用范围scope配置

SpringBean的配置详解 Bean的配置范围 默认情况下(基本的Spring环境),单纯Spring环境Bean的作用范围有两个:Singleton和prototypesingleton:单例,默认值,Spring容器创建的时候,就会进行Bean的实…

【VS Code】根据时间和文件名查看增删改的历史记录

我的 VS Code 已设置为自动保存。 左下角这个 TIMELINE 里面记录着我们使用 VS Code 操作各文件的历史记录。 打开 Local History 可以根据时间和文件名查看增删改的历史记录,比如: 然后我们根据时间和文件名,打开一个文件: 即可…

讲座1:影像重建_脑疾病_大脑解码

视频来源:https://www.bilibili.com/video/BV11K4y1979o/?spm_id_from333.999.0.0&vd_source897075bbdd61e45006d749612d05a2ab 文章目录 Image Reconstruction and SegmentationMR Image ReconstructionBrain ROI Segmentation Brain Disease --- Alzheimers…

嵌入式开源组件——LwRB(RingBuffer)的移植和应用

说明:记录自己学习的过程,如有理解上的错误或者不恰当的地方请原谅。 一、简介 LwRB 是一个针对嵌入式系统优化的通用FIFO(先进先出)缓冲区库,之前的名称叫做RingBuffe ,不知道作者在V2.0.0版本时&…

C++11线程库简介

前言 在c11之前涉及多线程的问题都是和平台相关的,比如windows和linux都有一套自己的接口,这使得代码的可移植性变差。C11中最重要的特性就是对线程进行了支持,使得C在编程时不再依赖第三方库,而且原子操作中还引入了原子类的概念…

消息队列(六):服务器设计

紧接着上一章没说完的进行服务器的补充。 推送给消费者消息的基本实现思路 让 brokerServer 把哪些消费者管理好收到对应的消息,把消息推送给消费者 消费者是以队列为维度来订阅消息的,一个队列可以有多个消费者(此处我们约定按照轮询的方…

HTTP协议(超级详细)

HTTP协议介绍 基本介绍: HTTP:超文本传输协议,是从万维网服务器传输超文本到本地浏览器的传送协议HTTP是一种应用层协议,是基于TCP/IP通信协议来传送数据的,其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现&#xff0…

激光焊接汽车PP塑料配件透光率测试仪

随着汽车主机厂对车辆轻量化的需求越来越强烈,汽车零部件轻量化设计、制造也成为汽车零部件生产厂商的重要技术指标。零部件企业要实现产品的轻量化,在材料指定的情况下,要通过产品设计优化、产品壁厚减小和装配方式的优化来解决。使用PP材料…

React 把useState变成响应式 ,今天又可以早点下班了

Ⅰ、前言 我们知道 React 中 , 要想修改 「状态」 > 必须要「state , setState」 useState() 中「setState」 去修改 > 「state」那么如果用 Proxy > 去改造 useState,那么 「摸鱼的时间」又增加啦 ? Ⅱ、proxy 改造 useState 首…

数据结构与算法之Floyd算法-最短路径问题

Floyd算法-最短路径问题 Floyd算法-最短路径问题算法结束算法思想算法效率分析 Floyd算法-最短路径问题 算法结束 Floyd算法:求出每一对顶点之间的最短路径 核心:使用动态规划思想,将问题的求解分为多个阶段: 对于n个顶点的图…

数据结构---绪论

🌞欢迎来到数据结构的世界 🌈博客主页:卿云阁 💌欢迎关注🎉点赞👍收藏⭐️留言📝 🌟本文由卿云阁原创! 📆首发时间:🌹2023年9月17日&…

HTTP代理反爬虫技术详解

HTTP代理是一种网络技术,它可以将客户端的请求转发到目标服务器,并将服务器的响应返回给客户端。在网络安全领域中,HTTP代理经常被用来反爬虫,以保护网站的正常运营。 HTTP代理反爬虫的原理是通过限制访问者的IP地址、访问频率、U…

typeScript 类型推论

什么是类型推论? 类型推论是 TypeScript 中的一个特性,它允许开发人员不必显式地指定变量的类型。相反,开发人员可以根据变量的使用情况让 TypeScript 编译器自动推断出类型。例如,如果开发人员将一个字符串赋值给一个变量&#…

【自然语言处理】【大模型】RWKV:基于RNN的LLM

相关博客 【自然语言处理】【大模型】RWKV:基于RNN的LLM 【自然语言处理】【大模型】CodeGen:一个用于多轮程序合成的代码大语言模型 【自然语言处理】【大模型】CodeGeeX:用于代码生成的多语言预训练模型 【自然语言处理】【大模型】LaMDA&a…

MySQL数据库详解 三:索引、事务和存储引擎

文章目录 1. 索引1.1 索引的概念1.2 索引的作用1.3 如何实现索引1.4 索引的缺点1.5 建立索引的原则依据1.6 索引的分类和创建1.6.1 普通索引1.6.2 唯一索引1.6.3 主键索引1.6.4 组合索引1.6.5 全文索引 1.7 查看索引1.8 删除索引 2. 事务2.1 事务的概念2.2 事务的ACID特性2.2.1…

Java 高频疑难问题系列一

​​​​​​​ 目录 ​编辑​​​​​​​ 1.零长度 2.redis的有序集的排序 3.Unsafe类 4.带资源的try语句 5.Spring如何实现计划任务 6.Java中普通代码块,构造代码块,静态代码块执行顺序 7.MyBatis缓存机制 8.Redis Java 2种类型操作转换 9.CAS底层原理和问题 1…

【数据分享】2006-2021年我国城市级别的市容环境卫生相关指标(20多项指标)

《中国城市建设统计年鉴》中细致地统计了我国城市市政公用设施建设与发展情况,在之前的文章中,我们分享过基于2006-2021年《中国城市建设统计年鉴》整理的2006—2021年我国城市级别的市政设施水平相关指标、2006-2021年我国城市级别的各类建设用地面积数…

【pytorch】模型常用函数(conv2d、linear、loss、maxpooling等)

1、二维卷积函数——cnv2d(): in_channels (int): 输入通道数 out_channels (int): 输出通道数 kernel_size (int or tuple): 卷积核大小 stride (int or tuple, optional): 步长 Default: 1 padding (int, tuple or str, optional): 填充 Default: 0 padding_mode (str, optio…