Motore di composizione dell'identificatore del dispositivo

Il 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 parte del firmware caricata 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 DICE semplificato

Figura 1. Procedura di derivazione di DICE semplificata.

La procedura di derivazione di DICE garantisce che qualsiasi modifica a un'immagine del firmware generi un nuovo identificatore univoco per la fase e per tutte le fasi successive. Questo perché ogni fase del firmware caricato misura e certifica la successiva, generando identità univoche e chiavi associate che impediscono l'elusione o la manomissione. La memoria di sola lettura (ROM) elabora la misurazione, la configurazione e il segreto univoco del dispositivo (UDS) con una funzione di derivazione della chiave (KDF) per derivare il segreto per la fase successiva da caricare. Questo segreto è chiamato identificatore del 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 la procedura di produzione del chip. Dopo aver letto l'UDS, la ROM utilizza un meccanismo di blocco hardware dipendente dal fornitore , ad esempio un latch, per bloccare l'accesso all'UDS fino al successivo avvio.

Fase 1: derivazione della chiave iniziale

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 è attivato. La ROM combina quindi l'UDS, la misurazione del firmware e i dati di configurazione nella KDF per derivare il primo CDI, che viene passato alla fase successiva come segreto.

Fase da 2 a n: derivazione ricorsiva della chiave

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 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.