Le moteur de composition des identifiants d'appareil (DICE, Device Identifier Composition Engine) est une spécification du groupe de calcul de confiance qui a été adoptée dans Android. DICE vise à créer une identité cryptographique immuable pour un appareil, ainsi qu'une mesure vérifiable à distance du micrologiciel chargé au démarrage. Ce processus crée également des identités cryptographiques pour chaque élément de micrologiciel chargé. Ces identités dépendent entièrement de l'identité de base et de chaque image de micrologiciel chargée lors d'un démarrage donné.
DICE démarre lorsque la ROM du chipset charge un code secret d'appareil unique (UDS) à partir d'une banque de données immuables, généralement fusionnées, qui a été provisionnée de manière sécurisée avec une valeur cryptographiquement aléatoire lors du processus de production de la puce. Une fois que la ROM a lu ce secret, elle désactive tout accès supplémentaire à l'UDS à l'aide d'un mécanisme de verrouillage matériel dépendant du fournisseur, tel qu'un loquet. L'accès à l'UDS n'est pas rétabli avant le prochain processus de démarrage.
La ROM utilise l'UDS comme entrée d'une fonction de dérivation de clé (KDF) pour générer la paire de clés asymétriques permanente qui identifie cet appareil particulier. La ROM charge et mesure l'étape suivante du micrologiciel dans la séquence de démarrage, tout en spécifiant des métadonnées supplémentaires sur l'environnement pour le démarrage particulier, par exemple si le démarrage sécurisé est activé. La ROM traite la mesure, la configuration et l'UDS avec un KDF pour dériver le secret à charger pour l'étape suivante. Ce secret est appelé "identifiant d'appareil composé" (CDI).
Le processus se répète ensuite. L'IDC agit comme l'UDS de l'étape suivante. Cette étape dérive une paire de clés, et l'IDC est saisi dans un fichier KDF avec le hachage de l'image suivante à charger pour former une autre valeur d'IDC dérivée.
Le micrologiciel chargé utilise les paires de clés générées pour signer les certificats Sign1 CBOR Object Signing and Encryption (COSE). Chaque étape signe un certificat lors de l'étape suivante à charger. Ce certificat inclut des informations telles que la mesure de cette étape, le mode de démarrage, la clé publique CDI pour cette étape et d'autres métadonnées associées.
Figure 1 : Processus simplifié de dérivation de DICE.
Ce processus permet de s'assurer que toute modification d'une image de micrologiciel chargée modifie à la fois sa propre valeur CDI et les valeurs CDI de toutes les étapes suivantes. Cela signifie que chaque combinaison de micrologiciels chargés génère des identités et des clés associées uniques. De plus, la signature est effectuée de manière à garantir que chaque étape est mesurée et certifiée par l'étape précédente, ce qui empêche toute étape d'échapper à la mesure en falsifiant son propre certificat. Cela signifie que tant que la ROM n'est pas compromise, l'état de sécurité de l'appareil peut être corrigé et vérifié à distance en dehors de l'appareil.