Die Device Identifier Composition Engine (DICE) ist eine Trusted Computing Group (TCG)-Spezifikation, die in Android übernommen wurde. Es wird eine Reihe von starken, unveränderlichen kryptografischen Identitäten für jede Firmware erstellt, die während der Bootsequenz geladen wird. Diese Identitäten ermöglichen die Remote-Überprüfung des Sicherheitsstatus eines Geräts, die nur durch Manipulation des ROM umgangen werden kann.
DICE-Ableitungsprozess
Abbildung 1. Vereinfachter Prozess zur Ableitung von DICE.
Der DICE-Ableitungsprozess sorgt dafür, dass jede Änderung an einem Firmware-Image zu einer neuen eindeutigen Kennung für diese Phase und jede nachfolgende Phase führt. Das liegt daran, dass jede geladene Firmware-Phase die nächste misst und zertifiziert. So werden eindeutige Identitäten und zugehörige Schlüssel generiert, die ein Umgehen oder Manipulieren verhindern. Der Nur-Lese-Speicher (Read-Only Memory, ROM) verarbeitet die Messung, Konfiguration und das eindeutige Gerätesecret (Unique Device Secret, UDS) mit einer Schlüsselableitungsfunktion (Key Derivation Function, KDF), um das Secret für die nächste zu ladende Phase abzuleiten. Dieses Geheimnis wird als zusammengesetzte Geräte-ID (Compound Device Identifier, CDI) bezeichnet.
Phase 0: Initialisierung
Der DICE-Prozess beginnt damit, dass das ROM des Chipsets den UDS aus einem Bank unveränderlicher Daten lädt, in der Regel Fuses. Diese UDS wird während der Chipherstellung sicher mit einem kryptografisch zufälligen Wert bereitgestellt. Nach dem Lesen des UDS verwendet das ROM einen anbieterabhängigen Hardware-Sperrmechanismus wie z. B. eine Verriegelung, um den UDS-Zugriff bis zum nächsten Booten zu sperren.
Phase 1: Erste Schlüsselableitung
Das ROM verwendet den UDS als Eingabe für eine Schlüsselableitungsfunktion (Key Derivation Function, KDF), um das permanente asymmetrische Schlüsselpaar zu generieren, das dieses Gerät eindeutig identifiziert. Sie misst die nächste Firmware-Phase, einschließlich Metadaten zur Bootumgebung, z. B. ob Secure Boot aktiviert ist. Das ROM kombiniert dann die UDS-, Firmware-Mess- und Konfigurationsdaten im KDF, um die erste CDI abzuleiten, die als Geheimnis an die nächste Phase übergeben wird.
Phase 2 bis n: Rekursive Schlüsselableitung
Der Vorgang wird dann wiederholt. In allen nachfolgenden Phasen dient die CDI aus der vorherigen Phase als Eingabe für eine neue KDF. Diese KDF verwendet die CDI und den Hash des nächsten Firmware-Images, um eine neue abgeleitete CDI zu erstellen. In jeder Phase wird ein eigenes Schlüsselpaar generiert und damit ein Zertifikat signiert, das phasenspezifische Messungen und andere zugehörige Metadaten enthält.