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 è
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.
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:
- 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 | 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):
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 VVMFactoryTrust
Su una VM di ogni ECU:
- Scrivi l'hash di
/vvmtruststore/uds_pubsrestituito dasdv_provisioning_toolnel passaggio precedente in VVMFactoryTrust. La modalità di scrittura è specifica del produttore OEM o del fornitore e non rientra nell'ambito di queste specifiche.
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.
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:
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.
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.- 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_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.