Profilo SDV per DICE

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.