本文对Car Connectivity Consortium Digital Key Release 3 Technical Specification(以下简称CCC标准文档)中的Slot Identifier设计进行说明和分析,可以理解Slot Identifier本质上是在特定车辆和对应设备之间的用来标识数字车钥匙的局部变量。关于这方面的设计,印象中在CCC标准文档的专利权文档(IPR)的专利列表中就有一个专利和这个设计有关系。
本文所参考的CCC标准文档的版本号是Version 1.0.11(CCC-TS-101),本文所用示图也引用了这个版本的标准文档,如果后续文档在本文描述相应章节有了新的更新或者本文对应的描述有错漏之处请指正。在CCC标准文档中和Slot Identifier有关的章节主要有4.3节 Mailboxes 和13.7节 Termination in Vehicle,以下分别进行叙述:
一、车主设备Mailbox中和Slot Identifier相关的数据结构
CCC标准文档 4.3节对Mailbox中数据结构进行了描述,其中和Slot Identifier相关的数据结构如下图所示:
上图中和Slot Identifier有关的各个数据项定义分析如下表:
变量名 | 和Slot Identifier相关的定义说明 |
SigBmp | 长度1个字节,SigBmp的BIT 0和Slot Identifier相关,为0时代表Mailbox中所有的Slot Identifiers有效,为1时代表不是Mailbox中所有的Slot Identifiers有效。 SigBmp是个关键信号量参数,当相应的位为1时,提供了一个信号量,用来触发车辆或设备执行后续相应的动作,这个参数包含在AUTH1 Response中由设备返回给车辆。车辆可通过Exchange指令来修改这个参数。 |
SlotIdentBmp | 长度1个字节,8个位和8个Slot Identifier一一对应,0无效,1有效。 |
SlotIdentLst | 总长度是单个Slot Identifier的设定长度的8倍,如果Slot Identifier的设定长度为2个字节,则总长度为2*8=16个字节,显然SlotIdentLst总长度是16个字节,最多可存储8个Slot Identifiers。 单个Slot Identifier的设定长度是个系统配置项,由事先设定的系统参数来确定的,可以是1到8个字节。 |
二、车主钥匙配对时Slot Identifier处理逻辑
CCC标准文档 13.7节中的Figure13-22和Figure 13-23对车主钥匙配对的Slot Identifier处理进行了说明:
Figure 13-22说明了经过车主钥匙配对流程的Phase 3后,车主钥匙的SlotID(Firgure4-4中的变量名为Slot Identifier)和相关参数在车辆和车主设备的存储状态。
如图,车主钥匙的SlotID已经设定并完成同步,但SigBmp的Bit 0置1代表后续仍有操作需要进行,与信号量Bit 0置1相对应的是,如图SlotID Bitmap(Firgure4-4中的变量名为SlotIdentBmp)只有第一个位是1,其余均为0,这些为0的值对应的位置仍维持初始的状态,是后续步骤需要操作的对象。
Figure 13-23则说明了Owner Pairing Phase3完成后,车主设备在Console Reader再次执行标准交易时进行Device Fully Refilled流程。
如图,车主设备在Console Reader(中控台读卡器)上进行标准交易时,根据AUTH1 Response返回的SigBmp的Bit 0进行判断,如果为1,则根据SlotID Bitmap的为零的位的指示,车辆对车主设备进行下图所示的Mailbox写操作,车辆维护一个next SlotID的指针,如下图所示,因为SlotID Bitmap的为零的位有7个,则写操作执行7次,next SlotID的指针也依次移动了7次,如果下图操作完成,SlotID Bitmap的为零的位都设置为1,则SigBmp的Bit 0重置为0。
三、朋友钥匙分享时Slot Identifier处理逻辑
CCC标准文档 13.7节中的Figure13-24和Figure 13-25对朋友钥匙分享时的Slot Identifier处理进行了说明:
Figure 13-24说明了朋友钥匙分享流程完成后,朋友钥匙SlotID的相关参数在车辆、朋友设备和车主设备的存储状态。
如图,朋友钥匙分享完成后,朋友钥匙的SlotID已经设定并完成同步,朋友钥匙分享过程中,车主设备的Mailbox的数据如下变化:SigBmp的Bit 0置1,同时车主设备的MailBox中已经使用过SlotID对应的SlotID Bitmap的对应位置零。车主设备SigBmp的Bit 0置1已经使用代表后续仍有操作需要进行,与信号量Bit 0置1相对应的是,SlotID Bitmap不全为1,如图SlotID Bitmap为0对应的位置,是后续步骤需要操作的对象。
Figure 13-25则说明了朋友钥匙分享流程完成后,车主设备在Console Reader再次执行交易时进行Refill of Shared Slot Identifier流程。
如图,车主设备在Console Reader(中控台读卡器)上进行标准交易时,根据AUTH1 Response返回的SigBmp的Bit 0进行判断,如果为1,则根据SlotID Bitmap的为零位(在朋友钥匙分享时完成了设置),车辆对车主设备根据当前next SlotID的指针来选择要写入的数据进行下图所示的Mailbox写操作(就是图中所述“If 1 bit is set to 0,vehicle fills up with next available SlotID”的含义),如下图所示,因为SlotID Bitmap的为零的位有1个,则写操作执行1次,next SlotID的指针也依次移动了1次,如果下图操作完成,SlotID Bitmap的为零的位都设置为1,则SigBmp的Bit 0重置为0。
四、朋友钥匙撤销时Slot Identifier处理逻辑
CCC标准文档 13.7节中的Figure13-26和Figure 13-27对朋友钥匙撤销时的Slot Identifier处理方式进行了说明,两个图区别在于Figure 13-26是车辆端发起的撤销动作,Figure13-27是设备端发起的撤销动作,但在Slot Identifier处理这部分没有什么不同。
如图,执行朋友钥匙撤销时,车主钥匙设备端Mailbox没有相应操作,车辆端原来的朋友钥匙的对应的数据清除,在原有朋友钥匙存储位置增加一个新的SlotID,原来的朋友钥匙不会再使用,这部分的唯一性由车辆端来保证。
朋友钥匙撤销Slot Identifier处理的一个重点可参考如下CCC标准文档里的原文:
即原来friend A的SlotID(0001)不再使用,那么当朋友设备向车辆传送friednd A原有的attestation package,车辆会基于这个原则不会处理。
五、小结
1、CCC标准文档中的关于Slot Identifier有些表述可以做些优化会更方便理解一下:4.3节和13.7节变量命名如果能统一标准会更方便阅读一些,例如SlotID Bitmap和SlotIdentBmp,又比如Slot Identifier变量本身的命名,4.3节是Slot Identifier,7.3节是SlotID,其它章节又是key_slot_identifier;另外因为Slot Identifier的配对、分享和撤销的处理逻辑都统一放在13.7节里说明,所以当前13.7的本身的章节名写成撤销不是很精确。
2、CCC标准文档中的关于Slot Identifier所有的内容可以简单这样理解,Slot Identifier本质上是在特定车辆和对应设备之间的用来标识数字车钥匙的局部变量,车主设备private mailbox的相关数据结构是整个处理逻辑的缓冲数据区,基于车主设备的private mailbox的各个相关变量(SigBmp,SlotID Bitmap, SlotID List),在车辆,车主钥匙和朋友钥匙三者之间实现Valid Key List以及对应SlotID的同步。