OWNER PAIRING

本篇只介绍所有操作都成功执行的场景,中间如果出现异常,需要翻看规范决定接下来的操作

一些密钥

公私密钥对(Vehicle.PK&Vehicle.SK)

Endpoint.pk/sk:一个数字钥匙一对,在数字车钥匙创建期间产生

vehicle.pk/sk:由车辆产生。车辆的所有数字钥匙都相同。生命周期由oem管理,不由本规范定义

安全通道进行数据交互时所需的密钥:

kenc:对称秘钥,用于加密命令和回复payload

kmac:对称秘钥,用于计算命令macs

krmac:对称秘钥,用于计算回复macs

在标准交易和SPAKE2+之后,都会生成SCP03安全通道

配对分为5个阶段:准备、初始化、读卡器第一次会话、读卡器第二次会话、结束配对。

phase0:前置条件

手机:

确保已经安装Digital Key applet,创建InstanceCA

Instance CA Certificates are obtained by the Digital Key framework

See Listing 15-15 for the description of the Instance CA Certificate [E]. All signatures are

generated as described in Section 18.4.10.

车辆:

secure channel creation

generates the pairing password

the password verifier

sends the verifier and salt through a Vehicle OEM proprietary secure channel to the vehicle

phase1:手动操作

车辆:

into pairing mode by the user or select the framework AID on the console NFC reader in the vehicle

手机:

receives the password or through user input or a URL or through an API directly from the Vehicle OEM

phase2:第一次会话,Spake2+算法后,创建数字钥匙

consists of two distinct NFC transactions

first transaction negotiates the protocol versions、establishes a secure channel、transmits all key creation data to the device

In the second NFC transaction, the vehicle reads the key creation data from the device, verifies it and, if successful, stores the device public key

使用spake2+算法建立安全通道,使得创建digitalkey所需的数据,如Vehicle公钥证书、Authorized公钥等,能够被安全地送达至device。

step1:

使用AID选择DigitalKey framework

step2完成了对安全通道的创建,具体可以看

https://www.cnblogs.com/MiraculousB/p/16640377.html

phase3:第二次会话,标准交易后在MailBox写数据

The second NFC session is executed between vehicle and Digital Key applet

step1~2:

根据AID选择Instance

step3~6标准交易:

车辆端产生临时公私密钥对,交易标识符是发起标准交易请求时随机产生的,车辆标识符则是车辆的唯一编号,车辆端准备好这些参数数据后通过AUTH0命令发送至手机端。

手机端也产生自身的临时公私密钥对,在AUTH0命令反馈时给到车辆端,相当于车辆与手机完成了信息的交换

车辆发送的AUTH1 Command命令,此命令主要携带的参数是车辆的签名,主要使用车辆永久私钥对如下内容进行签名并发送至手机端:(vehicle_identifier | endpoint_ePK.x | vehicle_ePK.x | usage = 415D9569h )

手机端接收到车辆签名Veh.sig时进行验签

如果手机对车辆的验签通过则手机端也会用自身的永久私钥对如下内容进行签名得到终端签名endpoint.sig(vehicle_identifier | endpoint_ePK.x | vehicle_ePK.x | usage = 4E887B4Ch )并反馈至车辆端。

车辆接收到手机的签名也进行验签操作,如果验签成功则车辆与手机完成双向认证过程

ECDH算法可以在不事先存储密钥的情况下协商出一个共享密钥也就是对称密钥(Symmetric Key), DHKEY = [Vehicle.eSK * Endpoint.ePK | Transaction_identifier] = [Endpoint.eSK * Vehicle.ePK | Transaction_identifier] 通过这种方式,车辆和手机端在不经过密钥传输的情况下协商出一个对称密钥Kdh。

车辆和手机端可以利用对称密钥Kdh离散出建立安全通道所需要的密钥Kenc/Kmac/Krmac, 离散时需要的信息 info <- cod.vehicle_ePK.x || cod.endpoint_ePK.x || code.transaction_identifier || interface_byte || code.flag || "Volatile" || 5Ch||02h||code.current_protocol_version, 就是将 Kdh 与 info信息输入到SHA-256加密算法,派生出来的48bytes的密钥就可以分解成三个16字节的安全通道密钥。

类似于上一步步骤,此步骤车辆和手机端也是生成一个32字节的对称密钥Kpersistent就是将 Kdh 与 info信息输入到SHA-256加密算法,派生出来的32bytes的密钥就作为Kpersistent, Kpersistent是一个长期的对称密钥用于派生加密密钥和会话密钥,它存储在车辆和手机端的NVM中。Kpersisent在接下的安全通讯不会使用,它被存储起来,用于快速交易,所以必须经过标准交易后,才有可能进行快速交易。

生成了安全通道密钥和长期密钥Kpersistent之后,交易双方可以基于已经建立的安全通道,继续相关的应用操作,比如mailbox读写,然后结束当前交易。同时因为交易双方生成和保存了Kpersisent,所以下一次交易的时候交易双方可以采用快速交易的方式来建立安全通道,也就是在进行一次标准交易之后,后面可以利用Kpersistent进行快速的身份验证,这个有点类似于蓝牙配对之后生成的LTK有点类似。

step7~12:调用EXCHANGE指令,写各种东西到mailbox里。

opaque attestation、owner immobilizer token、slot identifier bitmap、Write the owner slot identifier into the slot identifier list in the private mailbox、Vehicle OEM proprietary data structure、immobilizer tokens for sharing、signaling bitmap to indicate the update of the above data structures

stop13~14:

发送控制流,表示所有数据已经成功地被写入到mailbox中。

step15:KTS交互

如果标准交易成功了,owner设备将发送同步信息给KTS注册数字钥匙。对于车辆来说,这个是个可选的选项。如果车辆也想注册,就可能会发生竞争关系。所以不推荐车辆来注册。

标准交易失败时,不发送信息给KTS。

发送的信息有:带E、H证书的请求、(私钥签名的端点加密key证明)、车辆公钥不透明证明、朋友名字?、设备隐私加密key(Device.Enc.PK)、设备隐私加密版本

返回的信息有:KTS签名、slot标识符、confidentialMailBox数据

phase4:收尾工作,与KTS交互

step2之前:

在手机的mailbox中保存kts签名

车辆读卡器执行标准交易检查签名是否在手机中,如果不存在,持续检查

如果是车辆接受到kts response,则停止对device的kts签名检查

如果都没有获得kts response,则发送失败控制流

step2~5:

根据谁获得了kts签名,决定从哪里读取receipt。

车辆验证kts签名

step6~9:

如果需要,通过exchange指令将防盗token写进confidential mailbox。

step10~13:删除一次性信息

车辆通过控制流,在private mailbox中删除已经验证完的key tarcking receipt。使用exchange命令,删除signaling bitmap、删除attestation package,使得车辆在下一次交易中不会检测到相同的attestation package。

step14~15:

发送控制流,表明配对结束。

CCC3.0 NFC OWNER PAIRING的更多相关文章

  1. Cocos2dx 3.0 交流篇

    创建项目: For(MAC) Runtime Requirements Android 2.3 or newer iOS 5.0 or newer OS X 10.7 or newer Windows ...

  2. AIX 7.1 RAC 11.2.0.4.0升级至11.2.0.4.6(一个patch跑了3个小时)

    1.环境 DB:两节点RAC 11.2.0.4.0升级至11.2.0.4.6 OS:AIX 7.1(205G内存 16C) 2.节点1.节点2(未建库) 2.1.patch 20420937居然用了3 ...

  3. cocos2d-x v3.0新特性及使用

    八月份cocos2d-x官网发布了v3.0版本,这次更新的内容特别多,包括2dx的架构以及使用 总得来说,给开发者带来了很大的便利: 运行环境需求: Android 2.3 or newer iOS ...

  4. solidity智能合约如何判断地址为0或空

    智能合约地址判断 在旧版本中可使用以下代码来进行比较: owner != 0x0 但如果在新版本中使用,则会提示错误信息. 那么,如何正确使用来比较地址是否为空呢. 解决方案 可以使用address( ...

  5. 【8.0.0_r4】AMS分析(十六)(ActivityManagerService.java上)

    代码位于frameworks/base/services/core/java/com/android/server/am/,一共有七十个文件. Java源码位于package com.android. ...

  6. Windows系统下Oracle每天自动备份

    linux和unix下面使用shell可以很方便实现,如果windows环境下可以结合计划任务实现 创建备份目录d:\backup, 创建批处理命令Bak.bat,编写备份脚本 exp user/pa ...

  7. Python笔记(4)类__属性与描述符

    部分参考自:http://www.geekfan.net/7862/ 新式类与经典类 2和3不一样,3都是新式类. 新式类和经典类的区别: class A: #classic class " ...

  8. ubuntu-利用pdnsd-TCP方式获取IP-拒绝DNS污染

    那,自从国内技术出现了DNS污染问题呢,时常导致很多国外网站访问不正常,所以通过参考一些博客所属避免DNS污染的方法,决定搭建一个Ubuntu JeOS下的DNS缓存服务器,该服务器利用TCP方式获取 ...

  9. jQuery.Data源码

    jQuery.data的是jQuery的数据缓存系统.它的主要作用就是为普通对象或者DOM元素添加数据. 1 内部存储原理 这个原理很简单,原本要添加在DOM元素本身的数据,现在被集中的存储在cach ...

随机推荐

  1. 【C#/VB.NET】 将PDF转为SVG/Image, SVG/Image转PDF

    SVG是一种图形文件格式,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形.它在放大或者改变尺寸的情况下其图形质量不会有所损失,且与 JPG 和 GIF 图像比起 ...

  2. 领导:谁再用redis过期监听实现关闭订单,立马滚蛋!

    日前拜读阿牛老师的大作 领导:谁再用定时任务实现关闭订单,立马滚蛋! 发现其方案有若干瑕疵,特此抛砖引玉讨论一二. 在电商.支付等领域,往往会有这样的场景,用户下单后放弃支付了,那这笔订单会在指定的时 ...

  3. 记一次APP渗透登录验证绕过思路

    前言: 起初是抓包时候查看返回状态码不一致,所以觉得是否可以通过修改状态码来达到绕过的目的,但是拦截响应包再替换手速不够,技术大哥就去搜了下,找到了一个方法,可以自动替换响应包内容. 在偏下方一点的地 ...

  4. Windows-VS2017创建.NET项目

    首先新建->项目 选择如下, 注意要选择.NET Framework4.x 选择对应的项目类型 建议选上Web窗体(如果是用于实验的话) 完成后进行测试 如果出现 HTTP Error 403. ...

  5. Wabacus框架中inputbox和datepicker实现时间日历

    前提是要引入WdatePicker.js. 一.年月日时分秒(中文) <inputbox type="datepicker" inputboxparams="dat ...

  6. Linux从root切换某个用户时可能出现:-bash-4.1$

    Linux从root切换某个用户时可能出现:-bash-4.1$ 如下所示:[root@server ~]# su - postgres-bash-4.1$ id postgresuid=26(pos ...

  7. File类的概述和File类的静态成员变量

    File类概述:java.io.File类 文件和目录路径名的抽象表示形式 java把电脑中的文件和文件夹(目录)封账为了一个File类,我们可以使用File类对文件和文件夹进行操作 默认情况下,ja ...

  8. Tomcat深入浅出——Filter与Listener(五)

    一.Filter过滤器 1.1 Filter过滤器的使用 这是过滤器接口的方法 public interface Filter { default void init(FilterConfig fil ...

  9. Eolink 全局搜索介绍【翻译】

    随着前后端分离成为互联网项目开发的标准模式, API 成为了前后端联通的桥梁.而面对越来越频繁和复杂的调用需求,项目里的 API 数量也越来越多,我们需要通过搜索功能来快速定位到对应的 API来进行使 ...

  10. GCD Compression

    题目大意: 有一个数组 a 其中有 2n 个数,把它压缩进数组 b,b 的大小是 n-1. 所谓的"压缩"指的是两种操作: 首先舍弃 a 当中的两个数(你可以任意选择). 然后每次 ...