Stato e provisioning della mesh

Modalità di avvio SDV definisce il comportamento dell'agente di Service Discovery SDV in una VM SDV quando tenta di connettersi ad altri agenti di Service Discovery (in esecuzione in altre VM SDV) per stabilire un mesh sicuro. È simile al concetto di stato del dispositivo esistente di Avvio verificato di Android. La modalità di avvio SDV può essere LOCKED o UNLOCKED.

La modalità di avvio SDV viene utilizzata durante il provisioning o l'aggiornamento dell'archivio attendibile delle VM del veicolo.

Comportamento del mesh sicuro SDV

Il mesh di Service Discovery si trova in uno dei seguenti stati, a seconda dei valori di avvio che riceve: Normal, Warning o Fatal.

Un'auto viene consegnata al proprietario solo quando il mesh è in stato Normal. Il mesh richiede un intervento di diagnostica per passare dallo stato Normal a Warning. In un ambiente di produzione (ad esempio, non di sviluppo o debug), lo stato Warning si verifica solo durante il provisioning.

Fatal è un errore fondamentale, simile a un'immagine system_ext che non supera la verifica della firma nel bootloader Android. Se il mesh SDV passa da Normal a Fatal esclusivamente a causa di un aggiornamento over-the-air (OTA), l'aggiornamento viene considerato errato e il mesh torna alla versione Normal originale.

Le sezioni seguenti descrivono gli stati in modo più dettagliato.

Normal

  • L'avvio del sistema è SECURE dal punto di vista di Service Discovery.
  • Service Discovery si connette solo con i peer che hanno eseguito l'avvio in modo sicuro. Un peer con avvio sicuro implica che anche il mesh sicuro SDV è sicuro.

Warning

  • L'avvio del sistema potrebbe essere stato compromesso perché alcune verifiche sono disattivate.
  • Service Discovery si connette solo con i peer che hanno anche le stesse verifiche disattivate. Fa parte di un mesh sicuro SDV con le stesse proprietà di sicurezza.
  • Non è possibile verificare la riuscita dell'avvio di un peer a causa di errori locali o funzionalità disattivate.
  • Al di fuori di un ambiente o di una situazione di sviluppo, ciò ha le seguenti implicazioni:
    • I dati utente non devono essere disponibili. Ovvero, non devono essere trasmessi né influenzati dalla comunicazione tramite il mesh sicuro SDV.
    • Quando il mesh è in questo stato, devono essere disponibili solo i servizi necessari per i flussi di provisioning.

Fatal

  • Si è verificato un errore critico durante le fasi di avvio del sistema.
  • Si è verificato almeno un errore o un errore fondamentale che impedisce all'agente di Service Discovery di stabilire un mesh. I servizi locali non possono comunicare con i servizi remoti.
  • L'avvio del sistema è UNSECURE dal punto di vista di Service Discovery.

Modalità di avvio SDV

La modalità di avvio SDV ha due valori possibili: UNLOCKED e LOCKED. Per la creazione del mesh di Service Discovery, LOCKED indica che gli errori di verifica sono irreversibili, mentre UNLOCKED significa che non lo sono.

Condizione Modalità di avvio SDV
UNLOCKED LOCKED
Archivio attendibile VVM locale vuoto Warning Fatal
Catena DICE locale mancante Fatal Fatal
Errore di verifica della catena DICE locale Warning Fatal
Corrispondenza tra modalità SDV e AVB locali Consulta la tabella in Corrispondenza tra modalità SDV e AVB locali
Confronto dei valori della modalità del dispositivo remoto Consulta la tabella in Confronto dei valori della modalità del dispositivo remoto
Errore di corrispondenza uds_pubs remoto Warning Fatal
Errore di verifica della catena DICE remota (utilizzo delle policy DICE) Warning Fatal
Errore di handshake di autenticazione remota Fatal Fatal

Corrispondenza tra modalità SDV e AVB locali

La tabella seguente mostra in che modo la modalità AVB e la modalità di avvio SDV influiscono sul comportamento del mesh sicuro SDV. I colori sono definiti nella sezione di integrazione specifica di Android della documentazione AVB.

Modalità AVB x modalità di avvio SDV Modalità di avvio SDV
UNLOCKED LOCKED
AVB LOCKED Verde Warning Normal
Giallo Fatal Fatal
AVB UNLOCKED Arancione Warning Fatal

Valore della modalità del dispositivo

In una catena DICE, ogni certificato CDI ha un valore di modalità. Questo valore descrive lo stato di sicurezza di questo livello in base all'input di configurazione. Per esprimere la posizione di sicurezza di tutto il software sul dispositivo, viene definito un valore della modalità del dispositivo , derivato dal valore della modalità di tutte le fasi CDI delle catene DICE pertinenti a una determinata VM SDV (ovvero Android HLOS e Secure World) e definito come segue:

enum DeviceMode {
  NotConfigured = 0,
  Recovery = 1,
  Debug = 2,
  Normal = 3,
}

Algoritmo

L'algoritmo per calcolare il valore della Modalità dispositivo è il seguente:

  1. Specifica deviceMode come DeviceMode::Normal.
  2. Specifica diceChainList come l'elenco delle catene DICE pertinenti a una VM SDV.
  3. Per ogni diceChain in diceChainList:
    1. Specifica cdiList come l'elenco dei certificati CDI in diceChain:
    2. Per ogni cdiCert in cdiList:
      1. Specifica cdiDeviceMode come DeviceMode corrispondente a cdiCert.mode.
      2. Imposta deviceMode su min(deviceMode, cdiDeviceMode).
  4. Restituisci deviceMode.

Confronto dei valori della modalità del dispositivo remoto

Un agente di Service Discovery si connette solo con altri agenti che hanno lo stesso valore della Modalità dispositivo.

Il valore della Modalità dispositivo garantisce che un mesh non possa avere membri con proprietà di sicurezza diverse. Il mesh risultante ha una posizione di sicurezza uniforme tra tutti i suoi membri.

Valore della modalità dispositivo Telecomando
Non configurata Debug Ripristino Normale
Locale Non configurata Fatal Fatal Fatal Fatal
Debug Fatal Warning Fatal Fatal
Ripristino Fatal Fatal Warning Fatal
Normale Fatal Fatal Fatal Normal

Flusso di provisioning di fabbrica

Questo è il flusso di provisioning sulla catena di montaggio dei veicoli, dove si presuppone che l'infrastruttura a chiave pubblica non sia disponibile.

Questo flusso dipende da un valore di 32 byte memorizzato nella memoria programmabile una sola volta (OTP) denominata VVMFactoryTrust. Quando è impostato, questo valore viene passato al kernel come parametro denominato androidboot.sdv.vvmfactorytrust.

Tutte le VM in un'ECU devono avere la stessa modalità di avvio SDV e lo stesso VVMFactoryTrust.

Stato iniziale

Inizialmente, tutte le ECU sono in modalità di avvio SDV in modalità UNLOCKED, con VVMFactoryTrust vuoto e l'archivio attendibile delle VM del veicolo, ad eccezione di eventuali uds_certs presenti in VVMTrustStore.

La Figura 1 mostra un esempio in cui sono presenti tre VM SDV (VM-A, VM-B e VM-C) distribuite in due ECU separate (ECU-0 e ECU-1):

Esempio di provisioning di fabbrica, stato iniziale

Figura 1. Provisioning di fabbrica, stato iniziale.

Passaggio 1: esegui sdv_provisioning_tool

Avvia tutte le VM da tutte le ECU.

Su ogni VM, esegui sdv_provisioning_tool.

  1. Lo strumento comunica con l'agente di Service Discovery locale e attende che segnali che il mesh sicuro SDV è completo e che l'agente abbia scritto l'elenco delle chiavi pubbliche UDS in /vvmtruststore/uds_pubs.
  2. Quando ciò accade, lo strumento recupera l'hash di /vvmtruststore/uds_pubs appena scritto e lo restituisce.

Provisioning di fabbrica, passaggio 1

Figura 2. Provisioning di fabbrica, passaggio 1.

Passaggio 2: scrivi VVMFactoryTrust

Su una VM di ogni ECU:

  1. Scrivi l'hash di /vvmtruststore/uds_pubs restituito da sdv_provisioning_tool nel passaggio precedente in VVMFactoryTrust. La modalità di scrittura è specifica del produttore OEM o del fornitore e non rientra nell'ambito di queste specifiche.

Provisioning di fabbrica, passaggio 2

Figura 3. Provisioning di fabbrica, passaggio 2.

Passaggio 3: riavvia in modalità di avvio SDV bloccata

Riavvia tutte le VM in tutte le ECU in modalità di avvio SDV LOCKED.

L'agente di Service Discovery considera attendibili le VM nelle ECU con le chiavi pubbliche UDS elencate in uds_pubs perché l'hash di questo file corrisponde a VVMFactoryTrust.

Poiché le ECU sono state sottoposte a provisioning insieme, sono collegate in modo permanente e possono essere considerate come un unico componente hardware dal punto di vista della verifica della catena DICE.

Provisioning di fabbrica, passaggio 3

Figura 4. Provisioning di fabbrica, passaggio 3.

Flusso di sostituzione delle parti

Questo è il flusso di provisioning in un'officina o in un garage autorizzato per la riparazione di auto, dove un'ECU difettosa deve essere sostituita con una nuova, non sottoposta a provisioning.

Questo flusso dipende dai certificati UDS emessi direttamente dall'autorità principale indicata in vvmconfig o indirettamente, tramite una catena di autorità intermedie.

Stato iniziale

Tutte le VM sono già state sottoposte a provisioning di fabbrica e sono in esecuzione in modalità di avvio SDV LOCKED.

La Figura 5 mostra un esempio in cui l'ECU-0 non funziona correttamente e deve essere sostituita:

Sostituzione delle parti, stato iniziale

Figura 5. Sostituzione delle parti, stato iniziale.

Passaggio 1: installa la nuova ECU

Installa la nuova ECU, che è in uno stato vuoto e non sottoposto a provisioning.

Nella Figura 6, quando l'ECU-2 (l'ECU di sostituzione) viene accesa, sono presenti due mesh sicuri SDV disgiunti: uno in stato Warning e l'altro in stato Normal. Entrambi i mesh sicuri SDV sono incompleti.

Sostituzione delle parti, passaggio 1

Figura 6. Sostituzione delle parti, passaggio 1.

Passaggio 2: riavvia in modalità di avvio SDV sbloccata

Riavvia tutte le VM di tutte le ECU in modalità di avvio SDV UNLOCKED.

Nella Figura 7, VM-B e VM-C si uniscono al mesh sicuro SDV Warning, che è completo.

Sostituzione delle parti, passaggio 2

Figura 7. Sostituzione delle parti, passaggio 2.

Passaggio 3: esegui sdv_provisioning_tool

Su ogni VM, esegui sdv_provisioning_tool.

Lo strumento comunica con l'agente di Service Discovery locale e attende che segnali che il mesh sicuro SDV è completo e che l'agente abbia scritto l'elenco delle chiavi pubbliche UDS in /vvmtruststore/uds_pubs.

Quando ciò accade, lo strumento recupera l'hash di /vvmtruststore/uds_pubs appena scritto e lo restituisce, ma questo hash non viene utilizzato in questo flusso.

Sostituzione delle parti, passaggio 3

Figura 8. Sostituzione delle parti, passaggio 3.

Passaggio 4: installa i certificati UDS

  • Estrai /vvmtruststore/uds_pubs da una VM SDV arbitraria. Non importa quale, perché è uguale per tutte le VM nello stesso mesh sicuro SDV.
  • Recupera i certificati di provisioning per tutte le chiavi pubbliche UDS elencate in /vvmtruststore/uds_pubs.
    • In genere, ciò significa inviare questo a un server remoto che ha già memorizzato i certificati o li genera controllando le chiavi pubbliche ricevute in un database di chiavi pubbliche UDS note. Questo database è stato creato dalle chiavi pubbliche UDS estratte durante la produzione dell'ECU.
  • Scrivi /vvmtruststore/uds_certs di ogni VM SDV.

Sostituzione delle parti, passaggio 4

Figura 9. Sostituzione delle parti, passaggio 4.

Passaggio 5: riavvia in modalità di avvio SDV bloccata

Riavvia tutte le VM in modalità di avvio SDV LOCKED.

Se il mesh sicuro SDV è incompleto, torna al passaggio 2.

Sostituzione delle parti, passaggio 5

Figura 10. Sostituzione delle parti, passaggio 5.