Il profilo SDV per il motore di composizione dell'identificatore del dispositivo (DICE) è un'estensione del profilo Android per DICE. In SDV, una VM utilizza due catene DICE parallele:
- Secure World DICE chain
- Catena DICE SDV Android
Questi campi del descrittore di configurazione del profilo Android per DICE sono pertinenti a ciascuna di queste catene:
| Nome | Chiave | Tipo | Descrizione |
|---|---|---|---|
| Nome componente | -70002
|
tstr
|
Consigliato per ogni livello CDI. Il nome del componente identifica in modo univoco la fase tra tutte le catene DICE dell'hardware che esegue le VM Android SDV su un veicolo o una piattaforma del veicolo. |
| Versione di sicurezza | -70005
|
uint
|
Obbligatorio in ogni fase di CDI. Consente di definire un criterio DICE che impedisce alle versioni di VM remote non sicure di unirsi alla mesh sicura SDV. |
| Nome istanza componente | -70007
|
tstr
|
Obbligatorio nel primo livello CDI specifico della VM. Ad esempio, dopo l'hypervisor, per la catena DICE SDV di Android. Nome dell'istanza SDV. Se più livelli CDI contengono il nome dell'istanza del componente, ogni livello deve avere lo stesso valore. |
Secure World DICE chain
La catena DICE di Secure World è la stessa che il server Remote Key Provisioning
(RKP) di Android riceve dai dispositivi Android. L'HAL
IRemotelyProvisionedComponent generateCertificateRequestV2()
espone questa catena DICE ad Android.
Questa tabella mostra una catena DICE di Secure World di esempio:
| Fase di avvio | Livello CDI DICE | Emesso da |
|---|---|---|
| Bootloader principale | CDI[0] |
UDS |
| Bootloader secondario | CDI[1] |
Bootloader principale |
| Avvio TEE | CDI[2] |
Bootloader secondario |
| Avvio di KeyMint | CDI[3] (Foglia) |
TEE |
Per implementare l'applicazione attendibile (TA) KeyMint, utilizza una di queste opzioni:
- Singola istanza KeyMint per tutte le VM SDV:devi designare un singolo CDI per tutte le VM.
oppure
- Un'istanza KeyMint per ogni VM SDV:devi designare un valore CDI diverso per ogni VM. I singoli valori CDI DEVONO contenere un nome dell'istanza del componente che corrisponda al nome dell'istanza del componente della VM.
Catena DICE SDV Android
La catena DICE SDV di Android certifica il software in esecuzione sul percorso di avvio che passa attraverso l'hypervisor al sistema operativo di alto livello (HLOS) Android in esecuzione sulle VM SDV.
Questa tabella mostra una catena DICE SDV Android di esempio:
| Fase di avvio | Livello CDI DICE | Emesso da |
|---|---|---|
| Bootloader principale | CDI[0] |
UDS |
| Bootloader secondario | CDI[1] |
Bootloader principale |
| Hypervisor | CDI[2] |
Bootloader secondario |
| Android HLOS | CDI[3] (Fogliolina) |
(Android loader in the) Hypervisor1 |
1 L'hypervisor certifica il bootloader Android nel guest come livello. Il bootloader Android certifica l'HLOS Android.
Certificato CDI HLOS per Android
Il bootloader Android (o l'hypervisor, se non è presente un bootloader Android, ma solo un programma "loader" Android che carica la VM all'interno dell'hypervisor) firma il certificato CDI HLOS Android e copre l'HLOS Android. Ad esempio, copre tutto il codice che il bootloader Android verifica in base ad Android Verified Boot (AVB).
Il certificato CDI HLOS Android deve contenere valori specifici per SDV del sistema operativo Android che mitigano le vulnerabilità di sicurezza. Ad esempio, la potenziale perdita di segreti vietando le VM con vulnerabilità note dalla mesh sicura SDV. La verifica AVB fornisce la maggior parte di questi valori.
Vengono inoltre trasferiti a KeyMint nel TEE, dove il certificato viene firmato dal CDI foglia della catena DICE di SecureWorld e passato ad Android in DeviceInfo per attivare funzionalità come l'attestazione di chiavi e ID nel core di Android.
Campi di input del codice e del certificato codeHash
Il digest VBMeta (un output eseguito dal bootloader Android
per la verifica AVB) copre il software dell'HLOS Android. Pertanto, funge da android-dice-input-values per derivare i segreti CDI e viene inserito nel campo dice-cert-fields del certificato CDI.
L'algoritmo hash consigliato per AVB è SHA-256, che genera un digest VBMeta lungo 32 byte. A differenza del profilo aperto per DICE, il profilo Android
per DICE consente di utilizzare android-dice-hash-algos di 32 byte
android-dice-input-values per il flusso DICE, nonché di inserire lo stesso valore di 32 byte come codeHash nel certificato DICE.
Descrittore di configurazione: campi nel profilo Android per DICE
Oltre a quanto descritto per tutti i livelli CDI, le seguenti specifiche si applicano ai campi del descrittore di configurazione del profilo Android per DICE:
| Nome | Chiave | Tipo | Descrizione |
|---|---|---|---|
| Versione componente | -70003
|
int
|
La versione del sistema operativo di sistema di
AVB version-info-avb. Inoltre,
uguale a
android.os.Build.VERSION.release. |
| Versione di sicurezza | -70005
|
uint
|
Il livello patch di sicurezza della
partizione system nel formato YYYYMMDD. |
| Indicatore VM RKP | -70006
|
null
|
Il marcatore VM RKP impedisce a : Remote Key Provisioning di emettere certificati per la catena DICE SDV Android. |
Il marcatore VM RKP deve essere visualizzato nel primo certificato CDI della catena DICE SDV Android che non è in comune con la catena DICE Secure World. Inoltre, NON deve comparire in ulteriori certificati CDI per impedire al server RKP rkp-avf-support di considerare la catena DICE come proveniente da una VM RKP.
Descrittore di configurazione: nuovi campi
Il descrittore di configurazione del certificato CDI HLOS Android deve contenere valori specifici di SDV
oltre a quelli descritti nel profilo Android per DICE. Il
profilo SDV per DICE riserva l'intervallo di valori chiave [-71000, -71999] per questo
scopo. Puoi aggiungere campi specifici dell'implementazione utilizzando valori chiave al di fuori dell'intervallo riservato. I valori specifici di SDV sono:
| Nome | Chiave | Tipo | Descrizione |
|---|---|---|---|
| Stato di avvio verificato | -71000
|
tstr
|
green, yellow o orange.
|
| build fingerprint | -71001
|
tstr
|
Stringa leggibile che identifica in modo univoco questa build, come ro.build.fingerprint. La CDD di Android, 3.2.2 Build Parameters, cdd-3-2-2 definisce questo aspetto.
VBMeta lo memorizza come proprietà
denominata
com.android.build.system.fingerprint |
system_ext
livello
patch di sicurezza |
-71002
|
uint
|
Livello patch di sicurezza della partizione
system_ext nel formato YYYYMMDD. |
product
livello
patch di sicurezza |
-71003
|
uint
|
Livello patch di sicurezza della partizione
product nel formato YYYYMMDD. |
vendor
livello
patch di sicurezza |
-71004
|
uint
|
Livello patch di sicurezza della partizione
vendor nel formato YYYYMMDD. |
boot
livello
patch di sicurezza |
-71005
|
uint
|
Livello patch di sicurezza della partizione boot (che contiene il kernel
Linux) in formato YYYYMMDD. |
| Modalità di avvio SDV | -71006
|
tstr
|
locked o unlocked. Per saperne di più,
consulta Stato e provisioning della rete mesh. |
Selezione del valore di input della modalità di CDI HLOS Android
Il android-dice-mode del certificato CDI HLOS Android utilizza la seguente definizione:
| AVB UNLOCKED | AVB LOCKED | |
|---|---|---|
| Modalità di avvio SDV SBLOCCATA | Debug | Debug |
| Modalità di avvio SDV BLOCCATA | Non configurata (non valida) | Normale |
Funzione di derivazione della chiave
La android-dice-kdf che deriva la coppia di chiavi pubblica e privata dal segreto CDI_Attest per l'HLOS CDI di Android deve essere HKDF con SHA512 come funzione hash.