Silnik do tworzenia identyfikatorów urządzeń

Device Identifier Composition Engine (DICE) to specyfikacja Trusted Computing Group, która została zaadaptowana do Androida. DICE ma na celu stworzenie niezmiennej tożsamości kryptograficznej urządzenia oraz zdalnego pomiaru oprogramowania układowego, które jest ładowane podczas uruchamiania. W ramach tego procesu tworzone są również tożsamości kryptograficzne dla każdego wczytanego elementu oprogramowania. Te tożsamości są całkowicie zależne od tożsamości podstawowej i każdego obrazu oprogramowania układowego załadowanego podczas danego rozruchu.

DICE uruchamia się, gdy ROM chipsetu wczytuje unikalny tajny klucz urządzenia (UDS) z banku danych niezmiennych, zwykle scalonych, które zostały w bezpieczny sposób udostępnione z losową wartością kryptograficzną podczas produkcji układu. Gdy ROM odczyta ten sekret, wyłączy dalszy dostęp do UDS, używając mechanizmu blokady sprzętowej zależnej od producenta, takiego jak zatrzask. Dostęp do UDS nie jest przywracany do czasu następnego procesu uruchamiania.

Pamięć ROM wykorzystuje kod UDS jako dane wejściowe funkcji derywacji klucza (KDF), aby wygenerować trwałą asymetryczną parę kluczy, która identyfikuje konkretne urządzenie. ROM wczytuje i mierzy następny etap oprogramowania układowego w sekwencji rozruchu, określając jednocześnie dodatkowe metadane dotyczące środowiska konkretnego rozruchu, na przykład czy bezpieczny rozruch jest włączony. ROM przetwarza pomiar, konfigurację i UDS za pomocą KDF, aby wyprowadzić tajny klucz dla następnego wczytywanego etapu. Ten sekret nazywa się złożonym identyfikatorem urządzenia (CDI).

Następnie proces się powtarza. CDI działa jako UDS następnego etapu, który wyprowadza parę kluczy, a CDI jest podawany do KDF wraz z haszem następnego obrazu, który ma zostać załadowany, aby utworzyć kolejną wartość CDI.

Załadowany firmware używa wygenerowanych par kluczy do podpisywania certyfikatów Sign1 CBOR Object Signing and Encryption (COSE). W kolejnym etapie każdy etap podpisuje certyfikat, który ma zostać wczytany. Ten certyfikat zawiera informacje takie jak pomiar danego etapu, tryb uruchamiania, klucz publiczny CDI dla danego etapu i inne powiązane metadane.

Uproszczony proces wyprowadzania DICE

Rysunek 1. Uproszczony proces wyprowadzania DICE.

Dzięki temu procesowi każda zmiana w załadowanym pliku obrazu oprogramowania zmienia zarówno jego własną wartość CDI, jak i wartości CDI wszystkich kolejnych etapów. Oznacza to, że każda kombinacja załadowanego oprogramowania układowego generuje unikalne tożsamości i powiązane klucze. Poza tym podpisywanie odbywa się w taki sposób, że daje pewność, że każdy etap jest zmierzony i certyfikowany przez poprzedni etap, co uniemożliwia uniknięcie pomiaru przez sfałszowanie własnego certyfikatu. Oznacza to, że dopóki nie zostanie naruszone bezpieczeństwo pamięci ROM, można zainstalować poprawki i zdalnie zweryfikować stan zabezpieczeń urządzenia poza urządzeniem.