vvmconfig et vvmtruststore

L'agent de découverte de services SDV a besoin de deux ensembles d'informations de configuration :

  1. La configuration de la machine virtuelle du véhicule (VVM Config), qui contient des informations communes à tous les véhicules du même modèle ou de la même plate-forme.
  2. Le magasin d'approbation de la machine virtuelle du véhicule (VVM Trust Store), qui contient des informations propres à ce véhicule.
Contenu de vvmtruststore et vvmconfig
Figure 1: Contenu de vvmtruststore et de vvmconfig.

Configuration de la VM du véhicule

La configuration de la VM du véhicule est un fichier nommé vvmconfig[.SUFFIX] situé dans le répertoire /etc de la partition product. Le suffixe du fichier vvmconfig est facultatif et n'a aucune signification pour Android SDV. Les partenaires peuvent ajouter au suffixe vvmconfig toutes les informations qu'ils jugent utiles, comme le nom de la plate-forme du véhicule ou le nom du produit.

Si le système comporte plusieurs fichiers de configuration de la VM du véhicule, le bootloader doit spécifier le fichier choisi à l'aide du paramètre de noyau androidboot.sdv.vvmconfig. Ce paramètre ne doit contenir que le nom de fichier (par exemple, vvmconfig.example), sans aucun composant de chemin d'accès. Par exemple, /etc/vvmconfig.example serait une valeur non valide.

Le fichier de configuration de la VM du véhicule est fourni au format CBOR défini dans l' extrait CDDL suivant :

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 est défini dans RFC 8152, CBOR Object Signing and Encryption (COSE).

ipv4-address et ipv6-address sont définis dans la RFC 9164, Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes.

Règles DICE

L'OEM fournit à Android SDV une collection de règles DICE définissant les contraintes auxquelles les chaînes DICE valides (et fiables) doivent se conformer. Cette collection de règles doit couvrir toutes les chaînes DICE associées à toutes les VM SDV du véhicule.

Toutes les chaînes DICE du monde sécurisé doivent échouer à une règle DICE Android SDV. Inversement, toutes les chaînes DICE Android SDV doivent échouer à une règle DICE du monde sécurisé. Cela signifie qu'il ne doit pas être possible de transmettre une chaîne DICE Android SDV en tant que chaîne DICE du monde sécurisé, et inversement.

Magasin d'approbation de la VM du véhicule

Le magasin d'approbation de la VM du véhicule contient les clés publiques UDS de tous les participants du maillage sécurisé SDV. Il s'agit d'une partition non signée nommée vvmtruststore avec un système de fichiers ext4 et montée sur le répertoire /vvmtruststore. Ces clés publiques peuvent éventuellement être certifiées par l'autorité racine spécifiée dans la configuration de la VM du véhicule.

Cette partition est montée en lecture/écriture lorsque le HLOS Android est démarré avec le mode de démarrage SDV unlocked, ou en lecture seule lorsque le mode de démarrage SDV est locked. Elle peut contenir jusqu'à deux fichiers : uds_pubs et uds_certs.

uds_pubs est un fichier CBOR contenant toutes les clés publiques UDS de toutes les ECU qui hébergent des VM SDV dans le maillage SDV actuel. Ces clés publiques UDS sont collectées à partir des chaînes DICE fournies par les VM SDV homologues lors du provisionnement. Ce fichier est créé par le sdv_provisioning_tool lors du flux de provisionnement.

uds_certs est un fichier CBOR défini dans l'extrait CDDL suivant :

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 ne contient que les certificats UDS signés par l'autorité de certification des clés publiques UDS de l'appareil local (par opposition à toutes les clés listées dans uds_pubs). Ce fichier doit être fourni par l'OEM et n'est obligatoire que pour le flux de provisionnement de remplacement de pièces.

Les certificats UDS dans le uds_certs doivent respecter les spécifications définies dans le HAL de provisionnement à distance. De plus, les signatures numériques des certificats de signature doivent être Ed25519 ou ECDSA avec des courbes P-256 ou P-384. Le respect du HAL de provisionnement à distance signifie, en particulier, que le certificat feuille de la chaîne de certificats UDS doit avoir BasicConstraints et KeyUsage comme spécifié pour le certificat UDS, tandis que tous les certificats intermédiaires et racine doivent suivre les règles des certificats d'autorité de certification.