vvmconfig 和 vvmtruststore

SDV 服務探索代理程式需要兩組設定資訊:

  1. 車輛虛擬機器設定 (VVM 設定),內含相同車款或平台的所有車輛共用資訊。
  2. 車輛虛擬機器信任儲存區 (VVM 信任儲存區),內含該特定車輛的專屬資訊。
vvmtruststore 和 vvmconfig 內容
圖 1:vvmtruststore 和 vvmconfig 內容。

車輛 VM 設定

車輛 VM 設定檔是名為 vvmconfig[.SUFFIX] 的檔案,位於 product 分割區的 /etc 目錄中。vvmconfig 檔案後置字元為選用,對 Android SDV 沒有意義。合作夥伴可以在 vvmconfig 後置字串中加入任何實用資訊,例如車輛平台名稱或產品名稱。

如果系統有多個 Vehicle VM Config 檔案,開機載入程式應使用 androidboot.sdv.vvmconfig 核心參數指定所選檔案。這個參數應只包含檔案名稱 (例如 vvmconfig.example),不含任何路徑元件。舉例來說,/etc/vvmconfig.example 是無效值。

車輛 VM 設定檔是以 CBOR 格式提供,定義於下列 CDDL 片段中:

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-addressipv6-address 定義於 RFC 9164,即「Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes」(IPv4 和 IPv6 位址與前置字元的簡潔二進位物件表示法 (CBOR) 標記)。

DICE 政策

OEM 會提供 Android SDV 一系列 DICE 政策,定義有效 (且可信) DICE 鏈結必須遵守的限制。這項政策集合必須涵蓋車輛中所有 SDV VM 的所有 DICE 鏈。

所有安全世界 DICE 鏈結都必須違反 Android SDV DICE 政策。反之,所有 Android SDV DICE 鏈結都必須違反 Secure World DICE 政策。也就是說,Android SDV DICE 鏈結不得成功通過安全世界 DICE 鏈結,反之亦然。

車輛 VM 信任儲存庫

車輛 VM 信任儲存區包含 SDV 安全網格所有參與者的 UDS 公開金鑰。這是名為 vvmtruststore 的未簽署分區,具有 ext4 檔案系統,並掛接在 /vvmtruststore 目錄上。這些公開金鑰可選擇由 VVMConfig 中指定的根授權單位認證。

如果 Android HLOS 是以 SDV 開機模式 unlocked 開機,這個分割區會掛接為讀寫模式;如果 SDV 開機模式為 locked,則會掛接為唯讀模式。最多可能會有兩個檔案:uds_pubsuds_certs

uds_pubsCBOR 檔案,內含目前 SDV Mesh 中所有代管 SDV VM 的 ECU 的所有 UDS 公開金鑰。這些 UDS 公開金鑰是在佈建期間,從對等 SDV VM 提供的 DICE 鏈結收集而來。這個檔案是由 sdv_provisioning_tool佈建流程期間建立。

uds_certsCBOR 檔案,定義於下列 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。遵循 Remote Provisioning HAL 意味著,特別是 UDS 憑證鏈結的葉節點憑證應具有 BasicConstraintsKeyUsage (如 UDS 憑證所指定),而所有中繼和根憑證應遵循 CA 憑證的規則。