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 componente del firmware caricato durante la sequenza di avvio. Queste identità consentono la verifica da remoto della situazione di sicurezza di un dispositivo, che può essere aggirata solo compromettendo la ROM.
Procedura di derivazione di DICE
Figura 1. Procedura di derivazione DICE semplificata.
Il processo di derivazione DICE garantisce che qualsiasi modifica all'immagine del firmware generi un nuovo identificativo unico per quella fase e per tutte le fasi successive. Questo perché ogni fase del firmware caricata misura e certifica la successiva, generando identità univoche e chiavi associate che impediscono il 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 ricavare il segreto da caricare nella fase successiva. Questo segreto è chiamato un identificatore dispositivo composto (CDI).
Fase 0: inizializzazione
Il processo DICE inizia con il caricamento della ROM del chipset dell'UDS da una banca di dati immutabili, tipicamente fusi. Questo UDS viene eseguito il provisioning in modo 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 fermo, per bloccare l'accesso all'UDS fino al riavvio successivo.
Fase 1: derivazione iniziale della chiave
La ROM utilizza l'UDS come input per una funzione di derivazione delle chiavi (KDF) per generare la coppia di chiavi asimmetriche permanente 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 ricavare il primo CDI, che viene passato alla fase successiva come segreto.
Fase 2-n: derivazione ricorsiva delle chiavi
La procedura viene ripetuta. In tutte le fasi successive, il CDI della fase precedente funge da input per un nuovo KDF. Questo KDF utilizza il CDI e l'hash dell'immagine del 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.