CCC3.0学习笔记_数字密钥分享

系列文章目录

第六章 CCC3.0 DIGITAL KEY SHARING 数字密钥分享


文章目录

  • 系列文章目录
  • 前言
  • 一、跨平台密钥分享通道建立
    • 1. Channel Establishment for Cross-Platform Key Sharing
    • 2. Detail of Key Sharing Flow Between Owner and Friend Device After Channel is Established
  • 总结


前言

随着科技不断发展,车钥匙经历了传统机械钥匙到高低频的电子钥匙再到目前的数字钥匙的转变,由于现在手机或者手环等成为人们生活中必不可少的随身携带的电子产品,于是人们开始寻思着用手机或手环来代替先前的车钥匙,而蓝牙作为数字车钥匙的一个重要部件,本文将介绍CCC3.0中关于蓝牙OOB配对的那部分内容,至于蓝牙模块之间的配对特性交换,认证以及密钥生成分发则不在讨论的范围内。


一、跨平台密钥分享通道建立

1. Channel Establishment for Cross-Platform Key Sharing

CCC3.0学习笔记_数字密钥分享_第1张图片
跨平台密钥分享的通道步骤说明:
Step1:在进行密钥分享时,车主设备已经有了车主密钥,generateSharingSession()是车厂服务器提供的API接口,接口传入的参数是 ownerKeyId 就是车主密钥的唯一标识符,车主手机会先将创建分享会话的请求发送至车主设备厂商服务器。
Step2: 车主设备厂商服务器直接将创建分享会话请求发送至车厂服务器,车厂服务器会产生一个SessionID(其实就是一个非常大的随机数),然后车厂服务器记录 sessionID 与 ownerKeyId的绑定关系
Step3: 车厂服务器产生SessionID以后,回传 vehicleOEMUrl,sessionID 以及 statusCode作为创建分享会话请求的反馈。
Step4:车主设备服务器将接收到的反馈数据转发至车主设备,车主设备服务器在这个过程中充当中转的作用,同时车主设备产生一个长度为32字节的对称密钥 prKey,这个对称密钥主要是对加密分享会话数据包以及对接收方进行认证。
Step5:车主设备通过WhatsApp,SMS等发送URL链接到朋友设备端,这个链接地址里面包含了carOEMUrl,sessionID,prKey…等信息,分享钥匙链接实例如下:For example:  https://digitalkeysharing.org/v1/car-oem-name?relay=https%3A%2F%2Frelay.car-oemname.com&graphics=black_model_RQ_2020#sessionID=VGhlIHF1aWNrIGJyb3duIGZveCBq dW1wcyBvdmVyIHQ&prKey=FV9kosdUboGzU6YRvAJ-CRTqf8U93_YmhXf1nTYliMg
朋友手机端接收到发起密钥分享链接时解码链接并生成朋友设备句柄号,这个句柄号主要是用于主动推送消息,而不需要手机端提前发起任何请求。
Step6:朋友设备将 SessionID,vehicleOEMUrl,friendDeviceHandle发送到朋友设备服务器,然后朋友设备服务器记录 SessionID 与 friendDeviceHandle 的绑定关系
Step7:朋友设备服务器将朋友设备句柄信息转发至车辆服务器,此时车辆服务器则记录 SessionID,
ownerKeyId,friendDeviceHandle 三者之间的绑定关系。
Step8 && Step9:车辆服务器给到朋友设备的反馈信息,朋友设备服务器做转发。
Step10:当车厂服务器完成ownerKeyId,friendDeviceHandle 三者之间的绑定关系以后,由车厂服务器给车主设备服务器发送分享密钥事件通知,
Step11:车主设备服务器推送通知到车主手机,确认与朋友手机之间的密钥分享会话已准备就绪。
Step12:一个简单的通知响应状态码(例如 200则表示成功)
至此,双向链接已完成,可以进行后续的分享协议的交互了!

2. Detail of Key Sharing Flow Between Owner and Friend Device After Channel is Established

CCC3.0学习笔记_数字密钥分享_第2张图片
车主设备打包密钥创建请求,这个密钥创建请求(Key Creation Request)包含了终端的配置和给予的权限,其中不包括终端标识符和中间证书标识符,因为它们是由朋友设备自行定义的。

JSON格式数据
"keyConfiguration" : {                
	 "friendlyName" : "Jon's Phone",  //分享密钥别名               
      "rights"       : 0,             //分享密钥拥有车辆所有访问权限   
      "keyValidFrom" : "2021-02-19T23:05:17.462+0000",  
      "keyValidTo"   : "2021-02-19T23:05:17.462+0000"  //分享密钥有效期           
  },

在发送密钥创建请求之前,将密钥配置参数(Key_configuration)和 终端配置参数(endpoint_configuration)以及 ROUTING_INFORMATION的数据进行打包。
Step1&Step2:车主设备通过车主设备服务器向车厂服务器/KTS服务器发送密钥创建请求,服务器的API接口示例如下:
在这里插入图片描述
CCC3.0学习笔记_数字密钥分享_第3张图片
车厂服务器/KTS服务器,在接收到车主手机发送密钥创建请求时,利用请求中的 sharingSession提取朋友设备句柄号(在前面建立跨平台连接时已经绑定)。
(备注: 如下主要描述)
Step3:通过朋友设备厂商服务器提供的API接口将密钥创建请求的事件通知到朋友设备厂商服务器,因为朋友设备厂商服务器在设备建立连接时已经记录了绑定关系,所以根据密钥分享会话ID提取朋友设备句柄号。
Step4:朋友设备厂商服务器依据朋友设备句柄推送通知给到朋友设备,因为密钥创建请求使用对称密钥prKey进行加密的,所以朋友设备需要解密此请求,然后利用车主设备提供的 endpoint_configuration 来创建一个终端,创建的命令如下:
command:CLA2 70 00 00 Lc [endpoint configuration] [certificate chain] 00
response:[response_length] 9000
朋友设备端的SE在接收到创建终端的APDU指令以后,就会在SE内部生成公私密钥对并创建一个终端证书(还记得前面请求的时候有一个key configuration吗? 这些数据最终都出现在终端证书里面)。
同时利用授权公钥列表中的第一个公钥产生朋友设备密钥的证书链,证书链的起点就是这个选择的授权公钥。
Step8 & Step9:把朋友设备证书链数据用对称密钥加密后,使用车厂服务器提供的API接口发送到车厂服务器端。 当车厂服务器接收到密钥签名请求时,根据 SharingSession来提取车主密钥标识符 OwnerKeyID。
Step10:车厂服务器将朋友设备的密钥签名请求事件通知给到车主设备服务器。
Step11:车主设备服务器推送密钥签名请求至车主手机端,此时车主设备用授权公钥对朋友设备传过来的证书链进行层层验签确保朋友设备公钥的合法性,当验证通过之后,就利用车主设备自身的私钥对合法的朋友设备公钥进行签名,得到一个新的证书 attestation。然后车主设备发送密钥导入请求“Import Request” ,导入请求主要包含的数据内容就是前面车主设备生成的证书attestation 以及该证书存放的邮箱地址。
Step15 & Step16 & Step17 & Step18:就是让朋友设备端的SE存储由车主设备的私钥对朋友设备的公钥进行签名得到的证书。
Step22 & Step23:如果车厂要求密钥跟踪,则朋友设备提供相关信息便于密钥跟踪。
Step24:当一个共享密钥成功激活(也就是共享密钥的状态为Active状态),那么由车厂服务器发送共享密钥已添加的事件通知给到车主设备服务器。
Step27:车主设备服务器推送分享密钥已添加的通知给到车主设备。

总结

简而言之,就是车主设备提供密钥配置信息和终端配置信息,给到朋友设备端,朋友设备据此产生公私密钥对,然后将公钥和证书链回传给车主设备,车主设备进行验签,通过以后就利用自身的私钥对朋友设备的合法公钥进行签名,得到的证书,将此证书存入朋友设备的SE中,就完成的密钥分享,这样朋友也可以使用车主的车辆,只不过是受限的访问权限,这个主要是前面车主在密钥配置信息里面配置的是哪种权限了。
在此过程中,车主设备充当一个CA中心,给朋友设备签发证书,然后当朋友设备靠近授权车辆的时候,因为车辆端是拥有车主设备的公钥,是可以完成对朋友设备的验签的。

你可能感兴趣的:(CCC数字钥匙,服务器,学习,大数据)