CCC 数字钥匙学习笔记 - 车主配对命令

news/2024/11/29 5:43:02/

整理了一下CCC组织的汽车数字钥匙Release 3中关于车主配对Owner Paring,过程的APDU指令和数据说明。基本可以算是在车端的角度进行车主配对操作。里面的章节表格编号,都按照CCC数字钥匙Release 3文档中的编号走,方便将来检索对照。

车主配对命令

5.1 车主配对的指令

表5-1:车主配对命令集

命令Ins Byte(HEX)实现方
SELECTA4Digital Key Framework
SPAKE2+REQUEST30Digital Key Framework
SPAKE2+VERIFY32Digital Key Framework
WRITE DATAD4Digital Key Framework
GET DATACADigital Key Framework
GET RESPONSEC0Digital Key Framework
OP CONTROL FLOW3CDigital Key Framework
参见表15-15.3.2Digital Key Applet

表5-2 基本状态字

SW1SW2描述
6700长度错
6A80数据域的参数错
6A82文件找不到
6B00P1 P2错
6C00Le错
6D00INS错
6E00CLA错
9000成功

5.1.1 SELECT指令

汽车向钥匙设备发送SELECT AID指令。Digital Key framework AID为 A000000809434343444B467631

当Digital Key framework被选中,设备应当按照表5-3返回数据。

钥匙设备应当向车辆指示当前配对状态,可能状态有:

  • 未配对
  • 配对模式开始且配对口令已经输入

SELECT指令用来选择Digital Key applet实例(使用实例AID)在15.3.2.1定义。

C-APDU: 00 A4 04 00 Lc [Digital_Key_Framework_AID] 00

R-APDU: [表 5-3]90 00

表 5-3 SELECT指令响应

Tag长度(bytes)描述是否必须
5A2*nn支持SPAKE2+协议版本(ver.high|ver.low)必须
5C2*mm支持的Digital Key applet协议版本(ver.high|ver.low)必须
D4100 = 未配对
02 = 配对模式开始且配对口令已经输入
必须

钥匙设备应当返回所有支持的的SPAKE2+和支持的Digital Key applet协议版本,每个版本使用2字节大端编码的数据。

在CCC Release 3的规范里,钥匙设备应当支持SPAKE2+协议版本1.0(编码0100)和Digital Key applet协议1.0(编码0100)。车辆应当依据6.3.3.8来匹配支持的版本。

钥匙设备是否处于配对模式时会发出信号,如果钥匙设备是“未配对”模式,车辆只有在自己处于已配对模式时才能继续(行驶)。

5.2.1 SPAKE2+REQUEST指令

在这个指令中,车辆应当发送所选择的SPAKE2+版本,所有支持的Digital Key applet协议版本和SPAKE2+的Scrypt参数。车辆应当在响应中获取SPAKE2+协议的曲线点X。SPAKE2+REQUEST指令使用的参数见18节。

C-APDU:80 30 00 00 Lc [表 5-4] 00

R-APDU:[表 5-5] 90 00

表5-4 SPAKE2+REQUEST指令

Tag长度(bytes)描述是否强制
5B2同意的SPAKE2+协议版本强制
5C2*mm支持的Digital Key applet协议版本(ver.high|ver.low)强制
7F5032Scrypt配置参数强制
- C016密码盐值 s强制
- C14Scrypt cost参数, NscryptN_{scrypt}Nscrypt强制
- C22块大小参数 r强制
- C32平行化参数 p强制
D62车辆品牌(见表2-1)包含这个Tag,包括只支持NFC的的车辆强制

表5-5 SPAKE2+REQUEST 响应

Tag长度(bytes)描述是否强制
5065SPAKE2+协议的曲线点X,prepended with 04 h as per Listing 18-3强制

在发送SPAKE2+REQUEST指令前,车辆应当先检查SPAKE2+配对计数器。如果计数器指示已经配对7次,车辆应当不再发送配对指令。相反的,车辆应当发送一个OP CONTROL FLOW来中止(超过错误计数器次数、需要新的配对口令或者没有明确原因)。当新的配对口令产生,计数器将被复位。

车辆应当发送所选的2字节的SPAKE2+协议版本。

车辆也应当发送支持的Digital Key applet 协议版本列表,借此第一个被列出的版本应当被车主设备使用。整个Digital Key applet协议版本列表(Tag 5C)应当被包含在Key Creation Request(见11.8.1,DIGITAL_KEY_APPLET_PROTOCOL_VERSION)。这个允许在分享钥匙到好友设备时选择最好的版本使用。

SPAKE2+协议所有的曲线点的定义遵守X9.63标准,格式为 0x04||<x>||<y>的字节流,x和y为32字节的大端表示(见18.1)。

如果返回的X值在无穷远或者不是一个在椭圆曲线上定义的合法的点,车辆应当中止流程,并发送OP CONTROL FLOW指令,按照5.1.7的描述P2值设置为0C。

Scrypt的迭代次数(cost参数)是一个4字节的无符号整数,用来配置Scrypt功能(见18.4)在主机厂服务器和钥匙设备上来派生校验者的值。其他传输的Scrypt参数还有块大小和平行化参数(见18.1.2)。Scrypt cost参数、块大小参数、平行化参数的TLV值部分都是编码为大端格式。

如果车辆没有找到双方支持的SPAKE2+或者Digital Key applet协议版本,车辆应当发送一个OP_FLOW_CONTROL(Owner Paring
FLow Control)指令包含表5-24中定义的原因代码,代替SPAKE2+REQUEST指令。

如果SPAKE2+REQUEST指令被成功处理,车辆和钥匙设备应当计算共享密钥K,分别为Listing 18-4和Listing 18-5。

表5-6 SPAKE2+REQUEST响应错误状态字

SW1SW2描述
6985指令使用顺序不对
6A88收到的数据不合法或者为0
9484设备配对还未准备就绪

5.1.3 SPAKE2+VERIFY 指令

这个指令相互交换证据来证明双方计算出来的共享密钥是相同的。

C-APDU: 80 32 00 00 Lc [表 5-7] 00

R-APDU: [表 5-8] 90 00

表5-7 SPAKE2+VERIFY指令

Tag长度(bytes)描述是否强制
5265SPAKE2+协议的曲线点Y,prepended with 04 h as per Listing 18-2强制
5716车辆证据M[1]强制

表5-8 SPAKE2+VERIFY响应

Tag长度(bytes)描述是否强制
5816钥匙设备证据 M[2]强制

在发送SPAKE2+VERIFY指令之前,汽车应当先给SPAKE2+配对尝试计数器加1。

汽车应当计算证据M[1](描述在Listing 18-7)并发送它给钥匙设备,一起发送的还有曲线点Y。

钥匙设备应当验证下面的内容:

    1. 收到的曲线点Y是否是定义在椭圆曲线上的合法的点
    1. 收到M[1]

如果都验证成功,钥匙设备应当计算证据M[2](描述Listing 18-8),并在SPAKE2+响应中将M[2]给车辆返回。

只有车辆成功验证了收到的M[2],车辆才能继续车主配对流程。

如果上面任何验证失败,比如钥匙不能计算M[2]且不能返回M[2]或者返回其他除了状态字之外的响应。这种情况车辆应当发送一个OP_CONTROL_FLOW指令按照5.1.7中的描述将P2设置未09去中止车主配对.

表5-9 SPAKE2+VERIFY响应状态字

SW1SW2描述
6985指令使用顺序不对
6A88验证证据失败

SPAKE2+VERIFY步骤引出用于建立钥匙框架和车辆交换后续指令的SCP03通道的安全通道密钥。建立SCP03通道的遵守Listing 18-10和Listing 18-11。创建安全通道的密钥在下列情况应当被复位:

  • 在成功配对之后
  • 当钥匙设备响应的状态字不是9000或者6100时
  • SPAKE2+REQUEST指令已经发送
  • 当出现通信中断时
  • 车主配对没有终止,但时间超过最大允许的时间

车辆需要再重新开始SPAKE2+建立新密钥。注意这种情况配对口令还是原来的。车辆应当在7次尝试失败后更换口令。

5.1.4 WRITE DATA指令

这个指令向钥匙设备发送生成数字钥匙所需要的所有数据。它也用于提供证明车辆的密钥追踪用途的设备公钥。(好蹩脚,凑合看)

C-APDU: 84 D4 P1 00 Lc [command_data] [command_mac] 00
R-APDU: [response_mac] 90 00

除了发最后一次WRITE DATA指令时P1应当设置为80外,其他情况下参数P1和P2永远设置为0。

这个指令只允许在安全通道内发送。

表5-10 WRITE DATA响应状态字

SW1SW2描述
6985指令使用顺序不对
6A84内存不够

一个或者多个WRITE DATA指令可以用来向钥匙设备写入请求的数据对象。

表5-11 数字钥匙创建数据对象

Tag长度(bytes)数据内容是否强制
7F4Avar端点创建数据,元素来自表15-13强制
7F4Bvar车辆公钥证书K,Der编码X509证书,Listing 15-3强制
7F4Cvar中间证书, Der编码的X509证书可选
7F4Dvar邮箱映射 表5-13强制
7F4Evar设备配置 表5-14强制
5F5F0数字钥匙数据发送完成强制

表5-12 设备数字钥匙证书的对象

Tag长度(bytes)数据内容是否强制
5F5Avar车辆对设备的认证公钥(不透明)可选
5F5F0数字钥匙证书发送完成强制

表5-11中所有要求的的对象应当按照表格顺序被写入设备。

一个或者多个TLV允许被写在每个WRITE DATA指令中。

TLV 5F5F应当在最后被写入标记数据写入结束。最后一个WRITE DATA指令应当通过设置P1=80指示包含TLV 5F5F。

当车辆已经接受了设备公钥,表5-12中所有要求的对象应当被写入钥匙设备。最后一个WRITE DATA指令应当通过设置P1=80来指示。

5F5F 应当为最后一个被写入的TLV,标记传输数据结束。

Tag 7F4A应当包含表15-13中所有数据元素,除了下面的元素:

  • 端点标识符(设备定义)
  • Instance CA标识符 (设备定义)
  • 计数器限制(弃用,不使用)

如果车辆标识符作为7F4A的一部分提供,设备应当比较它的值和车辆公钥叶子证书K的值,如果检查失败车主配对应当中止。

最大指令数据长度应道为239字节:len=[command_data] + [padding] + [command_mac]

len = 239 + 1 + 8 <= 255(ok)

len = 240 + 16 + 8 255(not ok)

[command_data]+[padding]应道是AES分组16字节的整数倍。填充方案描述在9.至少填充1字节的80。最大响应数据长度应当为239字节。

车辆公钥应当以被主机厂CA签发的一个X509证书形式提供,描述在Listing 5-3。

Listing 5-1 车辆证书扩展方案

VehicleCertificateExtensionSchema ::= SEQUENCE
{extension_version INTEGER (1..255)
}

Listing 5-2 车辆证书扩展数据

vehicle-cert-extension-data VehicleCertificateExtensionSchema ::=
{extension_version 1 --value shall be 1
}

车辆公钥证书数据描述在Listing 5-3。

Listing 5-3 车辆公钥证书数据

vehicle-key-cert-data Certificate ::={tbsCertificate{version v3, --shall be v3--serialNumber ..., --a random integer chosen by the certificate issuer,Signature{algorithm {1 2 840 10045 4 3 2} --OID for ecdsaWithSHA256 (ANSI X9.62 ECDSA algorithm with SHA-256)},issuer rdnSequence:{{{type {2 5 4 3}, --OID for CommonNamevalue "..." --shall match the subject of the issuing certificate, shall use PrintableString or UTF8String format}}},validity{notBefore Time: "..." --shall use UTCTime or GeneralizedTime as defined in [3]notAfter Time: "..." --shall use UTCTime or GeneralizedTime as defined in [3]},subject rdnSequence:{{{type {2 5 4 3}, --OID for CommonNamevalue "Vehicle OEM Identifier" --contains the subject of the certificate, as per Appendix B.2.6shall use PrintableString or UTF8String format}}},subjectPublicKeyInfo{algorithm{algorithm {1 2 840 10045 2 1} --OID for ecPublicKey (ANSI X9.62 public key type)parameters {1 2 840 10045 3 1 7} --OID for prime256v1(ANSI X9.62 named elliptic curve)},subjectPublicKey '04...'H --the public key pre-pended with 04 h to indicate uncompressed format},extensions
{
{
extnID {1.3.6.1.4.1.41577.5.1}, --OID for Vehicle Public Key Certificate (see Appendix B.2.2)
critical TRUE,
extnValue ‘…’H --DER encoding for VehicleCertificateExtensionSchema extension as per Listing 5-1
},{extnID {2 5 29 15}, --KeyUsage standard extensioncritical TRUE,extnValue '03020780'H --DER encoding for KeyUsage, digitalSignature only},{extnID {2 5 29 19}, --BasicConstraints standard extensioncritical TRUE,extnValue '3000'H -- DER encoding for cA=FALSE},{extnID {2 5 29 35}, --OID for AuthorityKeyIdentifier standard extensioncritical FALSE,extnValue '...'H- DER encoding of an AuthorityKeyIdentifier sequence, containing only a KeyIdentifier element.-- The KeyIdentifier is an OCTET STRING containing the 160-bit SHA-1 hash of the value of the BIT STRING
subjectPublicKey--from the issuer certificate (excluding the tag, length, and number of unused bits)},{extnID {2 5 29 14}, -- OID for SubjectKeyIdentifier standard extensioncritical FALSE,extnValue ‘…’H --160-bit SHA1 hash of the value of the BIT STRING subjectPublicKey
--(excluding the tag, length, and number of unused bits)
}}},signatureAlgorithm{algorithm {1 2 840 10045 4 3 2}},signatureValue '...'H --the certificate signature computed as per [3]--ECDSA signature}

5.1.5 GET DATA指令

这个指令应当继续使用已经建立的会话密钥去检索所有需要的所有数据,验证Digital Key framework创建在Digital Key applet 实例中的数字钥匙。

C-APDU: 84 CA 00 00 Lc [encrypted_tag] [command_mac] 00

R-APDU: [response_payload] [response_mac] 90 00 or 61XX

每个GET DATA指令一次只能请求一个Tag 。---->这个地方跟EMV或者其他应用一样。

X509证书不应当在封装成TLV结构

5.1.6 GET RESPONSE指令

跟ISO 14443规定的一个样,这里就不写了。


http://www.ppmy.cn/news/41998.html

相关文章

(邱维声)高等代数课程笔记:行列式按一行(列)展开

行列式按一行&#xff08;列&#xff09;展开 例题 1&#xff1a;一般地&#xff0c;设 ∣A∣|A|∣A∣ 是一个三阶行列式&#xff0c;则有 ∣A∣∣a11a12a13a21a22a23a31a32a33∣a11a22a33a12a23a31a13a21a32−a13a22a31−a12a21a33−a11a23a32a11(a22a23−a23a32)−a21(a12a3…

如何在DevOps中进行API生命周期管理?

引言 随着DevOps理念在中国企业当中的普及和发展&#xff0c;中国企业DevOps落地成熟度不断提升&#xff0c;根据中国信通院的数据已有近6成企业向全生命周期管理迈进。而在研发全生命周期管理之中&#xff0c;API管理的地位愈发显得重要。随着API数量的大幅增长&#xff0c;也…

Python的输入与输出

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;零基础入门篇 &#x1f4ac;个人格言&#xff1a;不断的翻越一座…

【Cesium 编程第一篇】概述、环境搭建、界面介绍

年前年后一直在面试&#xff0c;发现一个奇怪的现象&#xff1a;很多互联网公司经受住三年的疫情冲击&#xff0c;反而在疫情放开的那一刻撑不住了&#xff0c;很多大厂都在批量的裁员&#xff1a;美国硅谷、北京字节、迪士尼中国等等。在北京的朋友也是年后到现在一直没有找到…

XML 简介

文章目录一、XML 简介二、XML 用途总结一、XML 简介 XML 被设计用来传输和存储数据。 HTML 被设计用来显示数据。 XML 指可扩展标记语言&#xff08;eXtensible Markup Language&#xff09;。 可扩展标记语言&#xff08;英语&#xff1a;Extensible Markup Language&#xf…

[MAUI 项目实战] 手势控制音乐播放器(三): 动画

文章目录吸附动画确定位置平移动画回弹动画使用自定义缓动函数多重动画点击动画项目地址上一章节我们创建了手势容器控件PanContainer&#xff0c;它对拖拽物进行包装并响应了平移手势和点击手势。拖拽物现在虽然可以响应手势操作&#xff0c;但视觉效果较生硬&#xff0c;一个…

vue 报错 error:03000086:digital envelope routines::initialization error解决方案

目录 1. 引言: 2. 更换版本出现问题: 3. 出现原因: 4. 解决办法: -> 4. 1 删了 再换回16.15版本 -> 4.2 指令修改(好使) ---> 4.2.1效果如图 -> 4.3 其他指令就别试了 压根不好使 1. 引言: npm出现问题 , 卸载后 装了个新node 18.15版本 2. 更换版本…

springboot+vue动物园管理系统java

本系统使用的角色主要有系统管理员、注册用户&#xff0c;本系统分为系统前台和系统后台&#xff0c;首先在系统前台&#xff0c;游客用户可以经过账号注册&#xff0c;管理员审核通过后&#xff0c;用账号密码登录系统前台&#xff0c;查看论坛交流、动物展览、原生动物展览、…