整顿了一下CCC组织的汽车数字钥匙Release 3中对于车主配对Owner Paring,过程的APDU指令和数据阐明。根本能够算是在车端的角度进行车主配对操作。外面的章节表格编号,都依照CCC数字钥匙Release 3文档中的编号走,不便未来检索对照。
车主配对命令
5.1 车主配对的指令
表5-1:车主配对命令集
命令 | Ins Byte(HEX) | 实现方 |
---|---|---|
SELECT | A4 | Digital Key Framework |
SPAKE2+REQUEST | 30 | Digital Key Framework |
SPAKE2+VERIFY | 32 | Digital Key Framework |
WRITE DATA | D4 | Digital Key Framework |
GET DATA | CA | Digital Key Framework |
GET RESPONSE | C0 | Digital Key Framework |
OP CONTROL FLOW | 3C | Digital Key Framework |
参见表15-1 | 5.3.2 | Digital Key Applet |
表5-2 根本状态字
SW1SW2 | 形容 |
---|---|
6700 | 长度错 |
6A80 | 数据域的参数错 |
6A82 | 文件找不到 |
6B00 | P1 P2错 |
6C00 | Le错 |
6D00 | INS错 |
6E00 | CLA错 |
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) | 形容 | 是否必须 | |
---|---|---|---|---|
5A | 2*n | n反对SPAKE2+协定版本(ver.high\ | ver.low) | 必须 |
5C | 2*m | m反对的Digital Key applet协定版本(ver.high\ | ver.low) | 必须 |
D4 | 1 | 00 = 未配对<br/>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) | 形容 | 是否强制 | |
---|---|---|---|---|
5B | 2 | 批准的SPAKE2+协定版本 | 强制 | |
5C | 2*m | m反对的Digital Key applet协定版本(ver.high\ | ver.low) | 强制 |
7F50 | 32 | Scrypt配置参数 | 强制 | |
- C0 | 16 | 明码盐值 s | 强制 | |
- C1 | 4 | Scrypt cost参数, $N_{scrypt}$ | 强制 | |
- C2 | 2 | 块大小参数 r | 强制 | |
- C3 | 2 | 平行化参数 p | 强制 | |
D6 | 2 | 车辆品牌(见表2-1)蕴含这个Tag,包含只反对NFC的的车辆 | 强制 |
表5-5 SPAKE2+REQUEST 响应
Tag | 长度(bytes) | 形容 | 是否强制 |
---|---|---|---|
50 | 65 | SPAKE2+协定的曲线点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) | 形容 | 是否强制 |
---|---|---|---|
52 | 65 | SPAKE2+协定的曲线点Y,prepended with 04 h as per Listing 18-2 | 强制 |
57 | 16 | 车辆证据M[1] | 强制 |
表5-8 SPAKE2+VERIFY响应
Tag | 长度(bytes) | 形容 | 是否强制 |
---|---|---|---|
58 | 16 | 钥匙设施证据 M[2] | 强制 |
在发送SPAKE2+VERIFY指令之前,汽车该当先给SPAKE2+配对尝试计数器加1。
汽车该当计算证据M[1](形容在Listing 18-7)并发送它给钥匙设施,一起发送的还有曲线点Y。
钥匙设施该当验证上面的内容:
- 收到的曲线点Y是否是定义在椭圆曲线上的非法的点
- 收到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) | 数据内容 | 是否强制 |
---|---|---|---|
7F4A | var | 端点创立数据,元素来自表15-13 | 强制 |
7F4B | var | 车辆公钥证书K,Der编码X509证书,Listing 15-3 | 强制 |
7F4C | var | 两头证书, Der编码的X509证书 | 可选 |
7F4D | var | 邮箱映射 表5-13 | 强制 |
7F4E | var | 设施配置 表5-14 | 强制 |
5F5F | 0 | 数字钥匙数据发送实现 | 强制 |
表5-12 设施数字钥匙证书的对象
Tag | 长度(bytes) | 数据内容 | 是否强制 |
---|---|---|---|
5F5A | var | 车辆对设施的认证公钥(不通明) | 可选 |
5F5F | 0 | 数字钥匙证书发送实现 | 强制 |
表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 CommonName value "..." --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 CommonName value "Vehicle OEM Identifier" --contains the subject of the certificate, as per Appendix B.2.6 shall 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 extension critical TRUE, extnValue '03020780'H --DER encoding for KeyUsage, digitalSignature only }, { extnID {2 5 29 19}, --BasicConstraints standard extension critical TRUE, extnValue '3000'H -- DER encoding for cA=FALSE }, { extnID {2 5 29 35}, --OID for AuthorityKeyIdentifier standard extension critical 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 STRINGsubjectPublicKey --from the issuer certificate (excluding the tag, length, and number of unused bits) }, { extnID {2 5 29 14}, -- OID for SubjectKeyIdentifier standard extension critical 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规定的一个样,这里就不写了。