PE进入的流程大体可以拆解为如下步骤:
1、手机与车端建立BLE加密连接;
2、创建URSK流程;
3、时间同步流程;
4、UWB测距流程;
5、根据各锚点BLE的RSSI及UWB的距离值,通过定位算法进行手机位置的定位;
6、若检测手机在合法区域,则进行迎宾、解锁。
本文档主要描述上面步骤1(PE进入过程中与BLE通信相关的流程)的内容。
若BLE pairing和Encryption已经执行完成,之后手机靠近车辆时,将会启动PE进入流程。具体流程如下图。
1、 车端BLE模块进行广播,手机进行扫描。
2、 采用RPA地址(resolvable private address)的方式。
3、 建立车端与手机的BLE连接。
该步骤的流程如下图,具体可详见BLE5.0规范Vol6 Part D。
1、链路层通过Host的请求进行此操作,可以使用加密启动进程,在进入链接状态后启用数据包的加密。为了使能加密,必须交换两个参数,IV和SKD。两者都由两部分组成: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的链路层需要将EDIV和Rand字段通知给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。
结合CCC规范19.2.1.1中的Figure 19-2,在步骤2和步骤3中间应该还有一个服务发现的流程。具体如下。
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, “SPSM”, “DCK Major Version”, “DCK Minor Version”, ”1” ,”3”)
在CCC规范19.2.1.7中对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)
表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、手机发送命令给车端,请求写入version:
ATT_WRITE_REQ(handle for 《UUID_DEVICE_DCK_VERSION》, “DCK Major Version”, “DCK Minor Version”, ”1” ,”3”)
2、车端响应数据给手机:ATT_WRITE_RSP()
表19-11 Device Selected DK Version Characteristic Declaration
表19-12 Device Selected DK Version Characteristic Value Declaration
L2CAP英文全称为 Logical Link Control and Adaptation Protocol
L2CAP用来建立通道的,有0x0004用于ATT协议,0x0005用于L2CAP信令,0x0006用于安全管理。除此之外,还能建立很多其他协议通道。
L2CAP建立不同的协议管道,管道以下就是PDU,管道上就是用户数据。
L2CAP还可建立Dynamic 动态管道,如下图的0x0040-0x007F。(这个dynamic表达的是用户可以随意创建开闭)
下图标绿的通道是BLE可以使用通道。
该步骤是可选的,具体说明如下。
如果车辆或手机具有更新的DK协议版本、UWB配置标识符、脉冲形状组合,或这些参数的组合,这些参数与上次Capability Exchange期间的参数不同,则应执行车主配对的Capability Exchange。
手机通过发送DK Event Notification(Subevent_Category设置为0x01,对应的command status code设置为0x02)触发Capability Exchange。车辆收到DK Event Notification后,则启动Capability Exchange,具体流程如下图。
之后在执行UWB测距期间进行蓝牙数据通信均是基于L2CAP CoC通道来进行。比如TimeSync流程或Secure Ranging Setup流程等。
PE进入流程中与BLE通信相关的流程,可以总结为如下几个步骤:
1、建立BLE连接
2、启动BLE加密,这个步骤之后的通信即是加密的。
3、服务发现流程
4、手机读取车辆的SPSM和版本
5、手机写入DK version到车端
6、建立L2CAP 通道CoC
7、Capability Exchange(可选)
8、UWB测距交互相关的蓝牙通信,如时间同步等。
1、 参考文章:https://zhuanlan.zhihu.com/p/634546351
2、 参考标准:CCC-TS-101-Digital-Key-R3.pdf