前言
本文主要以车端BLE的视角来浅谈CCC数字钥匙协议规范,也是为了方便大家能够好的理解CCC协议。本文对于有一定BLE基础的相对友好。文中可能会涉及一些蓝牙规范的知识,如有不懂,可以详细查阅对应的蓝牙官方文档。
对于BLE而言,CCC协议中只划分了Phase0、1、2、3、4这几个阶段,而本文将整个流程划分为以下几个部分。分别为Phase0/1、蓝牙连接、Phase2、OOB配对、UWB测距、Phase3、Phase4。整体流程如下图。
一、Phase0
准备阶段,该阶段中手机端、车端、车端服务器需要准备各自的东西。详细描述见该篇文章。
二、Phase1
启动阶段,手机采用以下方式来接受密码,从而启动OP流程。
1、通过用户输入。
2、通过URL来跳转钱包(详见6.3.7)。
3、车辆OEM开发的app进行跳转。
三、蓝牙连接
首先在CCC协议中,广播分为OP和PE。且两个广播都是RPA地址。
在PE阶段,车辆广播应基于LE 1M PHY。对应广播周期应为42.5ms。对于这个广播,ADV_IND应包含AdvA,但不包含广播数据(AdvData)。
在进行OP流程的时候,开启OP广播便于手机端扫描并发起连接。op广播格式如下图。
对于车端而言,除了配置该广播格式外,还需要配置相应的服务。服务格式如下图。
配置该服务的目的在于之后通过L2CAP层进行数据交互的时候确定L2CAP层的SPSM(后续会详细说明)。
整个蓝牙连接分为两个部分,第一部分如下图所示。其中车端开启OP广播,手机端经过phase0、1之后进入OP流程。此时手机扫描到广播中CCC_DK_UUID,从而和车端建立LL层连接。
第二部分流程如下,手机端检测车端广播服务以及SPSM特征值。从而获取到具体数值(在实际测试中,我使用的SPSM为0x0083)。然后手机端会发起L2CAP Connect Request。其中该数据包中SPSM为之前服务中读到的SPSM特征值。
如图为实际测试过程中Sniffer抓到的空口数据。
在该数据格式中,其中LE Protocol/Service Multiplexer则是之前所设置的SPSM。该值在《BLUETOOTH SPECIFICATION Version 5.0》中表示,该参数被划分为两个区间,如图所示,
第一个区间是蓝牙SIG规定,范围在0~0x007F(如下图,其中高亮的为BLE使用CID)。第二个区间为动态变化,专门结合服务进行设计,从而完成相应的协议。这也是之前配置广播服务特征时选择SPSM为0x0083的原因(大家可以试一下其他的数值)。
目前为止,对于BLE而言,建立了LL层连接以及L2CAP层连接。接下来的阶段的数据交互都是基于L2CAP层。通过选取的0x0083通道进行交互。更多关于L2CAP层的蓝牙知识在之后的文章中会详细介绍。对于CCC协议而言,目前的储备以及足够。
在蓝牙连接流程结束后,手机会发送Request_owner_pairing命令。空口数据如下。
四、Phase2
当手机发送完Request_owner_pairing命令后,进入到Phase2阶段。该阶段分为两次Transaction。主要是和Digital Key Framework(The DK framework AID : A000000809434343444B467631h)进行数据交互,包括手机端开卡所需的车端的一些数据等。具体流程如下。
由于CCC协议中对于BLE并未由详细的流程图,因此使用NFC进行Phase2阶段的流程图进行介绍。 在图中,NFC会经历场重置的操作,重置后需要重新选择AID。而对于BLE而言,并不需要重置,也就无需再次选择AID。关于本阶段的详细介绍可以看该篇文章。
如图为Phase2阶段的空口数据。
五、OOB配对
在官方蓝牙规范中的OOB中,一般指的是采用带外的方式(非BLE,如NFC)来交互配对的信息。而在CCC协议中规定,通过之前所建立的L2CAP层的数据通道进行配对信息交互。在CCC协议中开始OOB配对之前,需要进行OOB准备工作,将双方需要的配对参数进行交互来为后续OOB配对进行铺垫。 具体OOB准备流程如下图。
其中,主要交互参数如下:
BTAddrA/BTAddrB:主/从设备的地址
ra/rb:主/从设备的随机数
Ca/Cb:主/从设备分别通过Pka、ra和Pkb、rb计算出来的加密数。
以上信息通过First_Approach_RQ/First_Approach_RS事件进行交互。具体数据格式以及格式可以看这篇文章。CCC数字钥匙设计【BLE】--车主配对之BLE OOB配对
在准备工作完成后,可以开始正常配对流程。具体流程如下。
该部分就是一般BLE配对流程差不多,只有小细节不同。
六、UWB测距
Phase2阶段结束后,接下来要进行UWB测距。此阶段的流程图如下。
如图,第一步需要进行一次标准交易流程。标准交易流程结束后需要生成URSK,URSK的伪代码如下。
在生成URSK时,同时会有一个 transaction_identifier的数据。
生成URSK后,想要测起距还需要进行参数交互,主要分为三个步骤。
6.1Capability Exchange(测距能力交换)
具体流程如下。
如图为能力交互所交互的数据格式。
6.2Ranging Session(测距会话)
具体流程如下。
如图为测距会话所交互的数据格式。
6.3Ranging_Session_Setup(测距会话设置)
具体流程如下。
Tips:红色框中的参数都是实际UWB测距中需要的参数。当UWB定位到车内后,便可开启下一阶段。
七、Phase3
phase3和phase2有些相似,需要进行一次标准交易流程。但是在Phase3主要和Digital Key applet(The DK applet AID :A000000809434343444B417631h)进行数据交互。具体流程如下。
此阶段之前(包括此阶段)的操作都处于离线模式。当Phase3结束后手机端钱包的车卡也可以开下来了。 至于后续的Phase4则是在线模式,需要和OEM服务器去进行交互。因此,本文中不详细介绍。想要了解的可以阅读该文章。
CCC数字钥匙设计【NFC】 --通过NFC进行车主配对Phase4
八、总结
本文主要归纳了整个CCC协议中关于BLE如何进行OP流程。对于细节的讲解并不深入。后续如果有时间会针对细节进行再次讲解。希望大家能从中获得一些知识,哪怕只有一点点也可以