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 è
SECUREdal 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 è
UNSECUREdal 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:
- Specifica
deviceModecomeDeviceMode::Normal. - Specifica
diceChainListcome l'elenco delle catene DICE pertinenti a una VM SDV. - Per ogni
diceChainindiceChainList:- Specifica
cdiListcome l'elenco dei certificati CDI indiceChain: - Per ogni
cdiCertincdiList:- Specifica
cdiDeviceModecomeDeviceModecorrispondente acdiCert.mode. - Imposta
deviceModesumin(deviceMode, cdiDeviceMode).
- Specifica
- Specifica
- 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):
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.
- 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_pubsappena scritto e lo restituisce.
Figura 2. Provisioning di fabbrica, passaggio 1.
Passaggio 2: scrivi VVM Factory Trust
Su una VM di ogni ECU:
- Scrivi l'hash di
/vvmtruststore/uds_pubsrestituito dasdv_provisioning_toolnel 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.
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.
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:
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.
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.
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.
Figura 8. Sostituzione delle parti, passaggio 3.
Passaggio 4: installa i certificati UDS
- Estrai
/vvmtruststore/uds_pubsda 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.
- Questo passaggio in genere prevede l'invio delle chiavi pubbliche UDS estratte (o del file
- Scrivi
/vvmtruststore/uds_certsdi ogni VM SDV.
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.
Figura 10. Sostituzione delle parti, passaggio 5.