vvmconfig i vvmtruststore

Agent SDV Service Discovery potrzebuje 2 zestawów informacji o konfiguracji:

  1. Konfiguracja wirtualnej maszyny pojazdu (VVM Config), która zawiera informacje wspólne dla wszystkich pojazdów tego samego modelu lub platformy.
  2. Magazyn zaufanych certyfikatów wirtualnej maszyny pojazdu (VVM Trust Store), który zawiera informacje unikalne dla danego pojazdu.
Zawartość vvmtruststore i vvmconfig
Ilustracja 1. Zawartość vvmtruststore i vvmconfig.

Konfiguracja maszyny wirtualnej pojazdu

Konfiguracja maszyny wirtualnej pojazdu to plik o nazwie vvmconfig[.SUFFIX] znajdujący się w katalogu /etc na partycji product. Sufiks pliku vvmconfig jest opcjonalny i nie ma znaczenia dla SDV na Androidzie. Partnerzy mogą dodać do vvmconfig dowolne informacje, które uznają za przydatne, np. nazwę platformy pojazdu lub nazwę produktu.

Jeśli system ma wiele plików konfiguracji maszyny wirtualnej pojazdu, program rozruchowy powinien określić wybrany plik za pomocą parametru jądra androidboot.sdv.vvmconfig. Ten parametr powinien zawierać tylko nazwę pliku (np. vvmconfig.example) bez komponentu ścieżki. Na przykład /etc/vvmconfig.example to nieprawidłowa wartość.

Plik konfiguracji maszyny wirtualnej pojazdu jest dostarczany w formacie CBOR zdefiniowanym w tym fragmencie 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 jest zdefiniowany w dokumencie RFC 8152, CBOR Object Signing and Encryption (COSE).

Symbole ipv4-addressipv6-address są zdefiniowane w dokumencie RFC 9164, Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes.

Zasady DICE

Producent OEM udostępnia Androida SDV z kolekcją zasad DICE określających ograniczenia, z którymi muszą być zgodne prawidłowe (i wiarygodne) łańcuchy DICE. Ten zbiór zasad musi obejmować wszystkie łańcuchy DICE powiązane ze wszystkimi maszynami wirtualnymi SDV w pojeździe.

Wszystkie łańcuchy DICE w Secure World muszą naruszać zasady DICE SDV na Androidzie. Z kolei wszystkie łańcuchy SDV DICE na Androidzie muszą naruszać zasady DICE dotyczące bezpiecznego świata. Oznacza to, że nie może być możliwe pomyślne przejście łańcucha SDV DICE na Androidzie jako łańcucha DICE w bezpiecznym świecie i odwrotnie.

Magazyn zaufania maszyny wirtualnej pojazdu

Magazyn zaufanych certyfikatów maszyny wirtualnej pojazdu zawiera klucze publiczne UDS wszystkich uczestników bezpiecznej sieci SDV. Jest to niepodpisana partycja o nazwie vvmtruststore z systemem plików ext4 zamontowana w katalogu /vvmtruststore. Te klucze publiczne mogą być opcjonalnie certyfikowane przez urząd główny określony w konfiguracji VVM.

Ta partycja jest montowana w trybie odczytu i zapisu, gdy system Android HLOS jest uruchamiany w trybie uruchamiania SDV unlocked, lub w trybie tylko do odczytu, gdy tryb uruchamiania SDV to locked. Może zawierać maksymalnie 2 pliki: uds_pubsuds_certs.

uds_pubs to plik CBOR zawierający wszystkie klucze publiczne UDS ze wszystkich ECU, które hostują maszyny wirtualne SDV w bieżącej siatce SDV. Te klucze publiczne UDS są zbierane z łańcuchów DICE dostarczanych przez równorzędne maszyny wirtualne SDV podczas udostępniania. Ten plik jest tworzony przez sdv_provisioning_tool podczas procesu udostępniania.

uds_certs to plik CBOR zdefiniowany w tym fragmencie 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 zawiera certyfikaty UDS podpisane przez urząd certyfikacji tylko dla kluczy publicznych UDS urządzenia lokalnego (w przeciwieństwie do wszystkich kluczy wymienionych w uds_pubs). Ten plik musi być dostarczony przez producenta OEM i jest wymagany tylko w przypadku procesu udostępniania części zamiennych.

Certyfikaty UDS w uds_certs muszą być zgodne ze specyfikacjami zdefiniowanymi w warstwie HAL zdalnego udostępniania. Dodatkowo certyfikaty podpisywania podpisów cyfrowych muszą być zgodne z algorytmem Ed25519 lub ECDSA z krzywymi P-256 lub P-384. Zgodność z interfejsem HAL zdalnego udostępniania oznacza w szczególności, że certyfikat liścia łańcucha certyfikatów UDS powinien mieć wartości BasicConstraintsKeyUsage określone dla certyfikatu UDS, a wszystkie certyfikaty pośrednie i główne powinny być zgodne z zasadami dotyczącymi certyfikatów CA.