Device Identifier Composition Engine (DICE) ist eine Spezifikation einer Trusted Computing Group, die in Android übernommen wurde. DICE zielt darauf ab, eine unveränderliche kryptografische Identität für ein Gerät sowie eine aus der Ferne verifizierbare Messung der Firmware zu erstellen, die beim Starten geladen wird. Bei diesem Prozess werden zusätzlich kryptografische Identitäten für jedes geladene Firmware-Element erstellt. Diese Identitäten hängen vollständig von der Basisidentität und jedem Firmware-Image ab, das während eines bestimmten Starts geladen wird.
DICE wird gestartet, wenn der ROM für den Chipsatz ein Unique Device Secret (UDS) aus einer Datenbank unveränderlicher Daten lädt, die in der Regel zusammengeführt werden und während der Chipproduktion sicher mit einem kryptografisch zufälligen Wert bereitgestellt wurden. Nachdem das ROM dieses Geheimnis gelesen hat, wird der weitere Zugriff auf das UDS über einen anbieterabhängigen Hardware-Sperremechanismus wie ein Riegel deaktiviert. Der Zugriff auf die UDS wird erst nach dem nächsten Startvorgang wiederhergestellt.
Das ROM verwendet den UDS als Eingabe für eine Schlüsselableitungsfunktion (KDF), um das permanente asymmetrische Schlüsselpaar zu generieren, das das jeweilige Gerät identifiziert. Das ROM lädt und misst die nächste Phase der Firmware in der Startsequenz. Dabei werden zusätzliche Metadaten zur Umgebung für den jeweiligen Start angegeben, z. B. ob Secure Boot aktiviert ist. Das ROM verarbeitet die Messung, Konfiguration und UDS mit einem KDF, um das Secret für die nächste zu ladende Stufe abzuleiten. Dieses Geheimnis wird als zusammengesetzte Geräte-ID (Compound Device Identifier, CDI) bezeichnet.
Der Vorgang wird dann wiederholt. Der CDI dient als UDS der nächsten Phase, in der ein Schlüsselpaar abgeleitet wird. Der CDI wird zusammen mit dem Hash des nächsten zu ladenden Bildes in eine KDF eingegeben, um einen weiteren abgeleiteten CDI-Wert zu bilden.
Die geladene Firmware verwendet die generierten Schlüsselpaare, um CBOR Object Signing and Encryption (COSE)-Sign1-Zertifikate zu signieren. Jede Stufe signiert ein Zertifikat für die nächste Stufe, die geladen werden soll. Dieses Zertifikat enthält Informationen wie die Messung dieser Phase, den Modus, in dem der Bootvorgang ausgeführt wird, den öffentlichen CDI-Schlüssel für diese Phase und andere zugehörige Metadaten.
Abbildung 1: Vereinfachter DICE-Ableitungsprozess.
Dadurch wird sichergestellt, dass jede Änderung an einem geladenen Firmware-Image sowohl den eigenen CDI-Wert als auch die CDI-Werte aller nachfolgenden Phasen ändert. Das bedeutet, dass jede Kombination aus geladener Firmware eindeutige Identitäten und zugehörige Schlüssel generiert. Außerdem erfolgt die Signatur so, dass sichergestellt wird, dass jede Phase von der vorherigen Phase gemessen und zertifiziert wird. So wird verhindert, dass eine Phase die Messung durch Fälschen eines eigenen Zertifikats umgeht. Solange das ROM nicht manipuliert wurde, kann die Sicherheitskonfiguration des Geräts außerhalb des Geräts gepatcht und aus der Ferne überprüft werden.