CCC3.0 NFC OWNER PAIRING
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的更多相关文章
- Cocos2dx 3.0 交流篇
创建项目: For(MAC) Runtime Requirements Android 2.3 or newer iOS 5.0 or newer OS X 10.7 or newer Windows ...
- 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 ...
- cocos2d-x v3.0新特性及使用
八月份cocos2d-x官网发布了v3.0版本,这次更新的内容特别多,包括2dx的架构以及使用 总得来说,给开发者带来了很大的便利: 运行环境需求: Android 2.3 or newer iOS ...
- solidity智能合约如何判断地址为0或空
智能合约地址判断 在旧版本中可使用以下代码来进行比较: owner != 0x0 但如果在新版本中使用,则会提示错误信息. 那么,如何正确使用来比较地址是否为空呢. 解决方案 可以使用address( ...
- 【8.0.0_r4】AMS分析(十六)(ActivityManagerService.java上)
代码位于frameworks/base/services/core/java/com/android/server/am/,一共有七十个文件. Java源码位于package com.android. ...
- Windows系统下Oracle每天自动备份
linux和unix下面使用shell可以很方便实现,如果windows环境下可以结合计划任务实现 创建备份目录d:\backup, 创建批处理命令Bak.bat,编写备份脚本 exp user/pa ...
- Python笔记(4)类__属性与描述符
部分参考自:http://www.geekfan.net/7862/ 新式类与经典类 2和3不一样,3都是新式类. 新式类和经典类的区别: class A: #classic class " ...
- ubuntu-利用pdnsd-TCP方式获取IP-拒绝DNS污染
那,自从国内技术出现了DNS污染问题呢,时常导致很多国外网站访问不正常,所以通过参考一些博客所属避免DNS污染的方法,决定搭建一个Ubuntu JeOS下的DNS缓存服务器,该服务器利用TCP方式获取 ...
- jQuery.Data源码
jQuery.data的是jQuery的数据缓存系统.它的主要作用就是为普通对象或者DOM元素添加数据. 1 内部存储原理 这个原理很简单,原本要添加在DOM元素本身的数据,现在被集中的存储在cach ...
随机推荐
- 重学ES系列之变量的作用范围
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SAP Column tree
code as bellow *&---------------------------------------------------------------------* *& I ...
- 【题解】Educational Codeforces Round 82
比较菜只有 A ~ E A.Erasing Zeroes 题目描述: 原题面 题目分析: 使得所有的 \(1\) 连续也就是所有的 \(1\) 中间的 \(0\) 全部去掉,也就是可以理解为第一个 \ ...
- Proxmox-VE虚拟环境
- 集合-Collection工具类
一.概念 二.常用方法 1.Collection和Collections的区别 Collection:是创建集合的接口,Collections是一个操作Collection工具类 2.常用方法 点击查 ...
- 01 Mybatis框架添加英雄步骤
客户端发出请求的几种方式 通过浏览器的地址栏中发出请求 通过html页面中的超链接发出请求 通过html页面中的form表单发出请求 通过前端框架发出请求 工程中使用数据库需要做的几件事: 在pom. ...
- 2020.7.19 区间 dp 阶段测试
打崩了-- 事先说明,今天没有很在状态,所以题解就直接写在代码注释里的,非常抱歉 T1 颜色联通块 此题有争议,建议跳过 题目描述 N 个方块排成一排,第 i 个颜色为 Ci .定义一个颜色联通块 [ ...
- Redis相关练习操作,redis连接池
package com.shujia.controller; import com.shujia.entity.MyTypedTuple; import com.shujia.entity.User; ...
- 「一本通 1.4 例 2」[USACO3.2]魔板 Magic Squares
[USACO3.2]魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题 ...
- [HNOI2009]【一本通提高组合数学】有趣的数列
[HNOI2009]有趣的数列 题目描述 我们称一个长度为 2 n 2n 2n 的数列是有趣的,当且仅当该数列满足以下三个条件: 它是从 1 ∼ 2 n 1 \sim 2n 1∼2n 共 2 n 2n ...