文章目录
15 数字钥匙小程序
15.1 介绍
数字钥匙小程序旨在提供多用途的基于SE的交互机制,结合点对点密钥分发和具有强大安全性和隐私特性的数据存储系统。可以使用三种类型的非接触式交互:标准交互(见第7节)、快速交互(参见第8节)和检查存在交互(见10节)。
在本规范中,根据设备制造商的实现或数字钥匙服务部署模型,提供了两种小程序实现模型。
以SE为中心的小程序模型:对于该型号,设备制造商 CA证书的相应公钥由SE保护,非SE端点(例如,车辆、服务器等)由SE验证。
以框架为中心的小程序模型:对于该模型,设备制造商 CA证书的相应公钥由设备OS本机存储保护,非SE端点(例如,车辆、服务器等)由框架验证。
15.2 密钥和数据
本节定义了第15节稍后使用的一些密钥和数据元素,以帮助理解流程图。
Cryptogram: 对公共传输数据计算的MAC值。Cryptogram证明该设备与车辆拥有相同的对称密钥。
Kpersistent: 长期的对称密钥,用于导出加密和MAC会话密钥。它存储在车辆和设备两侧的NVM中。
Kenc: 派生的对称密钥,用于加密机密命令和响应的有效负载数据。
Kmac: 派生的对称密钥,用于计算命令MAC。
Krmac: 派生的对称密钥,用于计算响应MAC。
Kcmac: 派生的对称密钥,用于计算Cryptogram。
Keseed: 对称密钥,用于导出机密数据加密和MAC的密钥。
Keenc: 派生的对称密钥,用于加密机密数据。
Kemac: 派生的对称密钥,用于计算加密机密数据的MAC。
Kdh: Diffie-Hellman操作生成的对称密钥。
*ePK/*eSK: 表示临时公钥和私钥。
*PK/*SK: 表示公钥和私钥。
transaction_identifier:随机生成的随机数值,并在车辆和设备侧用于对称密钥推导和MAC/签名生成/验证。
vehicle_identifier: 车辆的唯一标识符。在设备端,它用于查找正确的端点。
15.3 小程序实现
15.3.1 介绍
以下小节介绍小程序的内部数据结构和APDU命令。本规范仅支持一个数字密钥小程序协议版本。数字密钥小程序协议版本设置为0100h。
15.3.1.1 TLV 字段
本文件中给出的各种TLV(标签长度值)字段应符合ISO 7816-4[1]中定义的BER-TLV格式。TLV字段应按照本规范中的说明进行排序;除非另有规定,否则不同的字段顺序将被视为无效。嵌套级别由“标记”列中“标记”值的缩进表示。
15.3.1.2 小程序存储类型
小程序中使用的内存类型的命名约定如下:
前缀为“nvm”的变量。表示断电后使用的存储,是持久化的存储。
前缀为“cod”的变量表示所使用的内存是易失性的,并在小程序取消选择后被擦除(由非接触式字段关闭或显式取消选择引起)。
标记为(nvm/cod).object.Variable的变量表示该变量是对象成员。
既没有内存前缀也没有对象前缀的变量表示在退出当前编程上下文后擦除的本地易失性变量。
除了上面定义的局部变量外,所有变量和对象在实例级别都是全局可用的。
变量后缀为[]表示一个变量表。
后缀为的变量表示以之前的字符串开头的所有变量名称。
15.3.1.3 端点生命周期状态
state_endpoint_active: