SDV 服务发现代理需要两组配置信息:
- 车辆虚拟机配置 (VVM 配置),其中包含同一型号或平台的所有车辆共有的信息。
- 车辆虚拟机信任库 (VVM 信任库),其中包含特定车辆独有的信息。
车辆虚拟机配置
车辆虚拟机配置是位于 product 分区的 /etc 目录中的名为 vvmconfig[.SUFFIX] 的文件。vvmconfig 文件后缀是可选的,对 Android SDV 没有意义。合作伙伴可以在 vvmconfig 后缀中添加他们认为有用的任何信息,例如车辆平台名称或产品名称。
如果系统有多个车辆虚拟机配置文件,引导加载程序应使用 androidboot.sdv.vvmconfig 内核参数指定所选文件。此参数应仅包含文件名(例如 vvmconfig.example),而不包含任何路径组件。例如,/etc/vvmconfig.example 将是一个无效值。
车辆虚拟机配置文件采用以下 CBOR 格式定义:
VvmConfig = [
version: 1,
; Public key of the UDS root provisioning authority
udsCaPub: COSE_Key,
; Revocation list of intermediate CAs of UDS certificates
udsCaRevList: KeyList,
policies: DicePolicies,
vmConfigs: VmConfigMap,
]
DicePolicies = [+ DicePolicy]
KeyList = [* COSE_Key]
; Maps a VM instance name to its configuration
VmConfigMap = {
VmInstanceName => VmConfig
}
VmConfig = [
; IP addresses of this virtual machine.
ips: [+ IpAndPort],
; Index of the DICE policy for the Android SDV VM DICE chain.
android: PolicyIndex,
; Index of the DICE policy for the Secure World DICE chain used by the Android SDV VM.
secureWorld: PolicyIndex,
]
IpAndPort = [
ip: IpAddress,
; If not specified, the default Service Discovery agent port will be used.
? port: uint
]
IpAddress = ipv4-address / ipv6-address
; Index of a DicePolicy in the DicePolicies array.
PolicyIndex = uint
; The VM Name (as defind in the VVM Config). This must comply with VM Name identifier
; definition in Service Identity docs.
VmInstanceName = tstr
; INCLUDE /hardware/interfaces/security/authgraph/aidl/android/hardware/security/authgraph/DicePolicy.cddl for: DicePolicy
COSE_Key 在 RFC 8152《CBOR 对象签名和加密
(COSE)》中定义。
ipv4-address 和 ipv6-address 在 RFC 9164《IPv4 和 IPv6 地址及前缀的
简洁二进制对象表示法 (CBOR) 标记》中定义。
DICE 政策
OEM 为 Android SDV 提供了一系列 DICE 政策,用于定义 有效(且可信)DICE 链必须遵守的约束条件。此政策集合必须涵盖车辆中所有 SDV 虚拟机的所有相关 DICE 链。
所有安全世界 DICE 链都必须违反 Android SDV DICE 政策。相反,所有 Android SDV DICE 链都必须违反安全世界 DICE 政策。这意味着,不得将 Android SDV DICE 链成功作为安全世界 DICE 链传递,反之亦然。
车辆虚拟机信任库
车辆虚拟机信任库包含 SDV 安全网格的所有参与者的 UDS 公钥。它是一个未签名的分区,名为 vvmtruststore,具有
ext4 文件系统,并装载在 /vvmtruststore 目录中。这些公钥可以选择由 VVM 配置中指定的根权威机构进行认证。
当 Android HLOS 以 SDV 启动模式 unlocked 启动时,此分区以读写模式装载;当 SDV 启动模式为 locked 时,此分区以只读模式装载。它最多可以包含两个文件:uds_pubs 和 uds_certs。
uds_pubs 是一个 CBOR 文件,其中包含当前 SDV 网格中托管 SDV 虚拟机的各个 ECU
的所有 UDS 公钥。这些 UDS 公钥是从对等 SDV 虚拟机在预配期间提供的 DICE 链中收集的。
此文件由 sdv_provisioning_tool 在
预配流程中创建。
uds_certs 是一个 CBOR 文件,在以下 CDDL 代码段中定义:
UdsCertificates = [
1, ; version
* UdsCertChain
]
UdsCertChain = [
2* X509Certificate ; Root -> ... -> Leaf. "Root" is the vendor self-signed
; cert, "Leaf" contains UDS_Public. There may also be
; intermediate certificates between Root and Leaf.
]
; A bstr containing a DER-encoded X.509 certificate.
X509Certificate = bstr
uds_certs 仅包含本地设备的 UDS 公钥的 CA 签名 UDS 证书(而不是 uds_pubs 中列出的所有密钥)。此文件必须由 OEM 提供,并且仅适用于部件更换预配流程。
uds_certs 中的 UDS 证书必须遵循远程预配 HAL 中定义的
规范。
此外,签名证书的数字签名必须是 Ed25519 或 ECDSA,曲线为 P-256 或 P-384。遵循远程预配 HAL 特别意味着,UDS 证书链的叶证书应具有为 UDS 证书指定的 BasicConstraints 和 KeyUsage,而所有中间证书和根证书应遵循 CA 证书的规则。