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. hyperlpr centos 使用记录

    1.下载最新版python3.7 Anacondawget https://repo.anaconda.com/archive/Anaconda3-5.3.1-Linux-x86_64.sh 2.安装 ...

  2. cut命令、case与select语句

    cut命令 常用参数: -c character 字符 -d delimiter 分隔符 -f field 域(列) --output-delimiter 输出分隔符 例: # echo 12345 ...

  3. sql-DML-增删改

    DML:增删改表中数据 1. 添加数据: insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n); insert into 表名 values(值1,值2 ...

  4. .NET自定义认证虽然简单,但好用

    前言 有这样一种场景,就是新项目已经集成了认证中心,或者是都用了统一的认证方式(比如现在常用的JWT),这样对于项目之间的对接就显得比较方便,至少在认证这块还是能减少一些工作量的.但当上线的老项目需要 ...

  5. 《深入理解java虚拟机》读书笔记-第二章Java内存区域和内存溢出异常

    java1.7和java8的jvm存在差异,本文先按照<深入理解java虚拟机>的讲解内容总结,并将java8的改变作为附录放在文末 一丶运行时数据区域 ​ 图:java虚拟机运行时数据区 ...

  6. 体验SRCNN和FSRCNN两种图像超分网络应用

    摘要:图像超分即超分辨率,将图像从模糊的状态变清晰. 本文分享自华为云社区<图像超分实验:SRCNN/FSRCNN>,作者:zstar. 图像超分即超分辨率,将图像从模糊的状态变清晰.本文 ...

  7. Solution -「校内题」Xorequ

    0x00 前置芝士 数位dp考试里出现的小神题?? 显然考场会选择打表找规律. 数位dp + 矩阵快速幂 0x01 题目描述 给定正整数 \(n\),现有如下方程 \(x \bigoplus 3x = ...

  8. docker仓库之harbor的基本使用(二)

    1 1.配置docker使用harbor仓库上传下载镜像 2 #注意:如果我们配置的是https的话,本地docker就不需要任何操作就可以访问harbor 3 测试机器 4 root@ubuntu1 ...

  9. 面试题:Java中为什么只有值传递?

    作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.JAVA底层.面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 目录 经典的问题 形参&实参 Java是 ...

  10. MySQL建表DDL规范(欢迎补充)

    MySQL建表DDL规范(欢迎补充) 基本规范: 表名和字段名全大写,一般表名以T开头 脚本需支持可重复执行,带IF NOT EXISTS ,但不可带DROP语句 字符集使用utf8mb4 (CHAR ...