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 viene utilizzata durante il provisioning o l'aggiornamento dell'archivio attendibilità della VM del veicolo (VVM Trust Store, chiamato anche vvmtruststore).

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.

Nei veicoli di produzione consegnati ai clienti, il mesh sicuro SDV deve essere nello stato Normal. Il mesh richiede l'intervento di diagnostica per passare da uno 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 sicuro 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.

Normale

  • 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.

Avviso

  • L'avvio del sistema potrebbe essere stato compromesso perché alcune verifiche sono disattivate.
  • Service Discovery si connette solo con i peer che condividono esattamente lo stesso insieme di verifiche disattivate, assicurandosi che tutti i peer nel mesh sicuro SDV condividano proprietà di sicurezza identiche.
  • 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.

Irreversibile

  • 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: LOCKED e UNLOCKED. Per la creazione del mesh di Service Discovery, LOCKED indica che gli errori di verifica sono irreversibili, mentre UNLOCKED indica che non lo sono.

Condizione Modalità di avvio SDV
UNLOCKED LOCKED
Archivio attendibilità VVM locale vuoto Avviso Irreversibile
Catena DICE locale mancante Irreversibile Irreversibile
Errore di verifica della catena DICE locale Avviso Irreversibile
Corrispondenza tra modalità SDV e AVB locali Consulta la tabella in Corrispondenza tra modalità SDV locali e AVB
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 remota Avviso Irreversibile
Errore di verifica della catena DICE remota (utilizzo policy DICE) Avviso Irreversibile
Errore di handshake di autenticazione remota Irreversibile Irreversibile

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 Avviso Normale
Giallo Irreversibile Irreversibile
AVB UNLOCKED Arancione Avviso Irreversibile

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, la specifica SDV definisce un valore della modalità dispositivo. Questo valore deriva dal valore della modalità di tutte le fasi CDI nelle catene DICE pertinenti a una determinata VM SDV (ovvero Android HLOS e Secure World) e utilizza la seguente enumerazione:

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 Irreversibile Irreversibile Irreversibile Irreversibile
Debug Irreversibile Avviso Irreversibile Irreversibile
Ripristino Irreversibile Irreversibile Avviso Irreversibile
Normale Irreversibile Irreversibile Irreversibile Normale

Flusso di provisioning di fabbrica

Questo è il flusso di provisioning sulla linea di assemblaggio dei veicoli, dove si presume 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 Vehicle VM (VVM) Factory Trust o vvmfactorytrust. Quando viene 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 VVM Factory Trust.

Stato iniziale

Inizialmente, tutte le ECU sono in modalità di avvio SDV in modalità UNLOCKED, con VVM Factory Trust e Vehicle VM Trust Store vuoti , 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 VVM Factory Trust

Su una VM di ogni ECU:

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

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 VVM Factory Trust.

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 senza provisioning.

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

Stato iniziale

Tutte le VM sono già 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 senza 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.
    • Questo passaggio in genere prevede l'invio delle chiavi pubbliche UDS estratte (o del file /vvmtruststore/uds_pubs) a un server di provisioning remoto. Il server recupera i certificati preesistenti o ne genera di nuovi controllando le chiavi pubbliche ricevute rispetto a un database di chiavi pubbliche UDS note create 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.