Device Identifier Composition Engine (DICE) es una especificación del grupo de computación confiable que se adoptó en Android. El objetivo de DICE es crear una identidad criptográfica inmutable para un dispositivo, junto con una medición verificable de forma remota del firmware que se carga durante el inicio. Además, este proceso crea identidades de criptografía para cada firmware que se carga. Estas identidades dependen por completo de la identidad base y de cada imagen de firmware que se carga durante un inicio determinado.
DICE se inicia cuando la ROM del chipset carga un secreto de dispositivo único (UDS) desde un banco de datos inmutables, por lo general, fusibles, que se aprovisionó de forma segura con un valor criptográfico aleatorio durante el proceso de producción del chip. Cuando la ROM leyó este secreto, cierra cualquier acceso adicional al UDS con algún mecanismo de bloqueo de hardware dependiente del proveedor, como un seguro. El acceso a la UDS no se restablece hasta el próximo proceso de inicio.
La ROM usa la UDS como entrada a una función de derivación de claves (KDF) para generar el par de claves asimétricas permanente que identifica ese dispositivo en particular. La ROM carga y mide la siguiente etapa del firmware en la secuencia de inicio, a la vez que especifica metadatos adicionales sobre el entorno para el inicio en particular, como si el inicio seguro está habilitado. La ROM procesa la medición, la configuración y la UDS con un KDF para derivar el secreto de la carga de la siguiente etapa. Este secreto se conoce como identificador de dispositivo compuesto (CDI).
Luego, se repite el proceso. El CDI actúa como la UDS de la siguiente etapa, que deriva un par de claves, y el CDI se ingresa en un KDF junto con el hash de la siguiente imagen que se cargará para formar otro valor de CDI derivado.
El firmware cargado usa los pares de claves generados para firmar certificados de Firma y encriptación de objetos CBOR (COSE). Cada etapa firma un certificado sobre la siguiente etapa que se cargará. Este certificado incluye información como la medición de esa etapa, el modo en el que se encuentra el inicio, la clave pública de CDI para esa etapa y otros metadatos asociados.
Figura 1: Proceso simplificado de derivación de DICE.
Este proceso ayuda a garantizar que cualquier cambio en una imagen de firmware cargada cambie su propio valor de CDI y los valores de CDI de todas las etapas posteriores. Esto significa que cada combinación de firmware cargado genera identidades únicas y claves asociadas. Además, la firma se realiza de manera tal que garantiza que cada etapa sea medida y certificada por la etapa anterior, lo que evita que cualquier etapa evada la medición forjando su propio certificado. Esto significa que, siempre que la ROM no esté comprometida, la postura de seguridad del dispositivo se puede corregir y verificar de forma remota fuera del dispositivo.