Motore di composizione dell'identificatore del dispositivo

Device Identifier Composition Engine (DICE) è una specifica del Trusted Computing Group (TCG) che è stata adottata in Android. Crea un insieme di identità crittografiche sicure e immutabili per ogni firmware caricato durante la sequenza di avvio. Queste identità consentono la verifica remota della postura di sicurezza di un dispositivo, che può essere elusa solo compromettendo la ROM.

Procedura di derivazione di DICE

Processo di derivazione di DICE semplificato

Figura 1. Processo di derivazione DICE semplificato.

Il processo di derivazione DICE garantisce che qualsiasi modifica a qualsiasi immagine firmware generi un nuovo identificatore univoco per quella fase e per ogni fase successiva. Questo perché ogni fase del firmware caricato misura e certifica la successiva, generando identità uniche e chiavi associate che impediscono l'aggiramento o la manomissione. La memoria di sola lettura (ROM) elabora la misurazione, la configurazione e il segreto del dispositivo univoco (UDS) con una funzione di derivazione della chiave (KDF) per derivare il segreto da caricare nella fase successiva. Questo segreto è chiamato identificatore dispositivo composto (CDI).

Fase 0: inizializzazione

La procedura DICE inizia con il caricamento dell'UDS dalla ROM del chipset da una banca di dati immutabili, in genere fusibili. Questo UDS viene sottoposto a provisioning sicuro con un valore crittograficamente casuale durante il processo di produzione del chip. Dopo aver letto l'UDS, la ROM utilizza un meccanismo di blocco hardware dipendente dal fornitore, ad esempio un chiavistello, per bloccare l'accesso all'UDS fino al successivo avvio.

Fase 1: derivazione iniziale della chiave

La ROM utilizza l'UDS come input per una funzione di derivazione della chiave (KDF) per generare la coppia di chiavi asimmetriche permanenti che identifica in modo univoco il dispositivo. Misura la fase successiva del firmware, inclusi i metadati sull'ambiente di avvio, ad esempio se l'avvio protetto è abilitato. La ROM combina quindi i dati UDS, di misurazione del firmware e di configurazione nel KDF per derivare il primo CDI, che viene passato alla fase successiva come secret.

Fase da 2 a n: derivazione ricorsiva delle chiavi

La procedura viene quindi ripetuta. In tutte le fasi successive, il CDI della fase precedente funge da input per una nuova KDF. Questa KDF utilizza il CDI e l'hash dell'immagine firmware successiva per produrre un nuovo CDI derivato. Ogni fase genera la propria coppia di chiavi e la utilizza per firmare un certificato contenente misurazioni specifiche della fase e altri metadati associati.