Moteur de composition des identifiants d'appareil

Le Device Identifier Composition Engine (DICE) est une spécification du Trusted Computing Group (TCG) qui a été adoptée dans Android. Il crée un ensemble d'identités cryptographiques fortes et immuables pour chaque élément de micrologiciel chargé lors de la séquence de démarrage. Ces identités permettent de vérifier à distance la sécurité d'un appareil, qui ne peut être contournée qu'en compromettant la ROM.

Processus de dérivation du DICE

Processus simplifié de dérivation de DICE

Figure 1. Processus simplifié de dérivation de DICE.

Le processus de dérivation DICE garantit que toute modification apportée à une image du micrologiciel entraîne un nouvel identifiant unique pour cette étape et toutes les étapes suivantes. En effet, chaque étape du micrologiciel chargé mesure et certifie la suivante, générant des identités uniques et des clés associées qui empêchent le contournement ou la falsification. La mémoire morte (ROM) traite la mesure, la configuration et le secret unique de l'appareil (UDS) avec une fonction de dérivation de clé (KDF) pour dériver le secret de la prochaine étape à charger. Ce code secret est appelé identifiant d'appareil composé (CDI, compound device identifier).

Étape 0 : Initialisation

Le processus DICE commence par le chargement de l'UDS à partir d'une banque de données immuables, généralement des fusibles, par la ROM du chipset. Cette UDS est provisionnée de manière sécurisée avec une valeur cryptographiquement aléatoire lors du processus de production de la puce. Après avoir lu l'UDS, la ROM utilise un mécanisme de verrouillage matériel dépendant du fournisseur, tel qu'un loquet, pour verrouiller l'accès à l'UDS jusqu'au prochain démarrage.

Étape 1 : Dérivation initiale de la clé

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 permanentes qui identifie de manière unique cet appareil. Il mesure la prochaine étape du micrologiciel, y compris les métadonnées sur l'environnement de démarrage, par exemple si le démarrage sécurisé est activé. La ROM combine ensuite les données de l'UDS, de la mesure du micrologiciel et de la configuration dans le KDF pour obtenir le premier CDI, qui est transmis à l'étape suivante en tant que secret.

Étape 2 à n : Dérivation récursive des clés

Le processus se répète ensuite. Dans toutes les étapes suivantes, le CDI de l'étape précédente sert d'entrée pour un nouveau KDF. Cette KDF utilise le CDI et le hachage de la prochaine image du micrologiciel pour produire un nouveau CDI dérivé. Chaque étape génère sa propre paire de clés et l'utilise pour signer un certificat contenant des mesures spécifiques à l'étape et d'autres métadonnées associées.