vvmconfig dan vvmtruststore

Agen Penemuan Layanan SDV memerlukan dua set informasi konfigurasi:

  1. Konfigurasi Virtual Machine Kendaraan (Konfigurasi VVM), yang berisi informasi umum untuk semua kendaraan dengan model atau platform yang sama.
  2. Trust Store Virtual Machine Kendaraan (Trust Store VVM), yang berisi informasi unik untuk kendaraan tertentu.
Isi vvmtruststore dan vvmconfig
Gambar 1: Konten vvmtruststore dan vvmconfig.

Konfigurasi VM Kendaraan

Konfigurasi VM Kendaraan adalah file bernama vvmconfig[.SUFFIX] yang terletak di direktori /etc partisi product. Sufiks file vvmconfig bersifat opsional dan tidak memiliki arti untuk SDV Android. Partner dapat menambahkan informasi apa pun dalam sufiks vvmconfig yang mereka anggap berguna, seperti nama platform kendaraan atau nama produk.

Jika sistem memiliki beberapa file Konfigurasi VM Kendaraan, bootloader harus menentukan file yang dipilih menggunakan parameter kernel androidboot.sdv.vvmconfig. Parameter ini hanya boleh berisi nama file (misalnya, vvmconfig.example), tanpa komponen jalur apa pun. Misalnya, /etc/vvmconfig.example akan menjadi nilai yang tidak valid.

File Konfigurasi VM Kendaraan disediakan dalam format CBOR yang ditentukan dalam fragmen CDDL berikut:

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 ditentukan dalam RFC 8152, CBOR Object Signing and Encryption (COSE).

ipv4-address dan ipv6-address ditentukan dalam RFC 9164, Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes.

Kebijakan DICE

OEM menyediakan Android SDV dengan kumpulan kebijakan DICE yang menentukan batasan yang harus dipatuhi oleh rantai DICE yang valid (dan tepercaya). Kumpulan kebijakan ini harus mencakup semua rantai DICE yang terkait dengan semua VM SDV di kendaraan.

Semua rantai DICE Secure World harus gagal dalam Kebijakan DICE SDV Android. Sebaliknya, semua rantai DICE SDV Android harus gagal dalam kebijakan DICE Secure World. Artinya, rantai DICE SDV Android tidak boleh berhasil diteruskan sebagai rantai DICE Secure World dan sebaliknya.

Trust Store VM Kendaraan

Trust Store VM Kendaraan berisi kunci publik UDS dari semua peserta SDV Secure Mesh. Ini adalah partisi yang tidak ditandatangani bernama vvmtruststore dengan sistem file ext4 dan dipasang di direktori /vvmtruststore. Kunci publik tersebut dapat disertifikasi secara opsional oleh otoritas root yang ditentukan dalam Konfigurasi VVM.

Partisi ini dipasang sebagai baca-tulis, saat Android HLOS di boot dengan Mode Boot SDV unlocked, atau sebagai hanya baca, saat Mode Boot SDV di locked. Partisi ini dapat memiliki hingga dua file: uds_pubs dan uds_certs.

uds_pubs adalah file CBOR yang berisi semua kunci publik UDS dari semua ECU yang menghosting VM SDV di SDV Mesh saat ini. Kunci publik UDS tersebut dikumpulkan dari rantai DICE yang disediakan oleh VM SDV peer selama penyediaan. File ini dibuat oleh sdv_provisioning_tool selama alur penyediaan.

uds_certs adalah file CBOR yang ditentukan dalam fragmen CDDL berikut:

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 hanya menyimpan sertifikat UDS yang ditandatangani CA dari Kunci publik UDS perangkat lokal (berbeda dengan semua kunci yang tercantum di uds_pubs). File ini harus disediakan oleh OEM dan wajib hanya untuk alur penyediaan penggantian suku cadang.

Sertifikat UDS di uds_certs harus mengikuti spesifikasi yang ditentukan dalam Remote Provisioning HAL. Selain itu, tanda tangan digital yang menandatangani sertifikat harus Ed25519 atau ECDSA dengan kurva P-256 atau P-384. Mengikuti Remote Provisioning HAL berarti, khususnya, sertifikat leaf dari rantai sertifikat UDS harus memiliki BasicConstraints dan KeyUsage seperti yang ditentukan untuk sertifikat UDS, sedangkan semua sertifikat perantara dan root harus mengikuti aturan untuk sertifikat CA.