Die Device Identifier Composition Engine (DICE) ist eine Spezifikation der Trusted Computing Group (TCG), die in Android übernommen wurde. Es erstellt eine Reihe starker, unveränderlicher kryptografischer Identitäten für jede Firmware, die während der Bootreihenfolge 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 DICE-Ableitungsprozess.
Durch das DICE-Ableitungsverfahren wird sichergestellt, dass jede Änderung an einem Firmware-Image zu einer neuen eindeutigen Kennung für diese und alle nachfolgenden Phasen führt. Das liegt daran, dass jede geladene Firmware-Phase die nächste misst und zertifiziert. Dabei werden eindeutige Identitäten und zugehörige Schlüssel generiert, die ein Umgehen oder Manipulieren verhindern. Der Nur-Lese-Speicher (ROM) verarbeitet die Messung, Konfiguration und das eindeutige Gerätekennwort (UDS) mit einer Schlüsselableitungsfunktion (KDF), um das Kennwort für die nächste zu ladende Stufe 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 Chipsatzes die UDS aus einer Bank unveränderlicher Daten lädt, in der Regel aus Sicherungselementen. Dieser UDS wird während der Chipproduktion mit einem kryptografisch zufälligen Wert sicher bereitgestellt. Nach dem Lesen des UDS verwendet das ROM einen anbieterabhängigen Hardware-Sperremechanismus wie eine Sperre, um den UDS-Zugriff bis zum nächsten Start zu sperren.
Phase 1: Erste Schlüsselableitung
Das ROM verwendet den UDS als Eingabe für eine Schlüsselableitungsfunktion (KDF), um das permanente asymmetrische Schlüsselpaar zu generieren, das das Gerät eindeutig identifiziert. Er misst die nächste Firmwarephase, einschließlich Metadaten zur Bootumgebung, z. B. ob der sichere Start aktiviert ist. Das ROM kombiniert dann die UDS-, Firmware-Mess- und Konfigurationsdaten im KDF, um die erste CDI abzuleiten, die als geheime Information an die nächste Stufe übergeben wird.
Phase 2 bis n: Rekursiver 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. Dieser KDF verwendet die CDI und den Hash des nächsten Firmware-Images, um eine neue abgeleitete CDI zu erstellen. Jede Phase generiert ein eigenes Schlüsselpaar und verwendet es, um ein Zertifikat mit phasenspezifischen Messungen und anderen zugehörigen Metadaten zu signieren.