Silnik do tworzenia identyfikatorów urządzeń

Device Identifier Composition Engine (DICE) to specyfikacja Trusted Computing Group (TCG), która została zaadaptowana w Androidzie. Tworzy zestaw silnych, niezmiennych tożsamości kryptograficznych dla każdego oprogramowania wczytywanego podczas sekwencji rozruchu. Te tożsamości umożliwiają zdalną weryfikację stanu zabezpieczeń urządzenia, którą można obejść tylko przez naruszenie pamięci ROM.

Proces wyprowadzania DICE

Uproszczony proces uzyskiwania DICE

Rysunek 1. Uproszczony proces wyprowadzania DICE.

Proces wyprowadzania DICE zapewnia, że każda zmiana obrazu oprogramowania sprzętowego powoduje powstanie nowego, unikalnego identyfikatora na tym etapie i na wszystkich kolejnych etapach. Dzieje się tak, ponieważ każdy wczytany etap oprogramowania sprzętowego mierzy i certyfikuje następny, generując unikalne tożsamości i powiązane z nimi klucze, które uniemożliwiają obejście lub manipulację. Pamięć tylko do odczytu (ROM) przetwarza pomiar, konfigurację i unikalny klucz urządzenia (UDS) za pomocą funkcji wyprowadzania klucza (KDF), aby wyprowadzić klucz tajny do załadowania na następnym etapie. Ten klucz tajny jest nazywany złożonym identyfikatorem urządzenia (CDI).

Etap 0. Inicjowanie

Proces DICE rozpoczyna się od załadowania przez pamięć ROM chipsetu UDS z banku niezmiennych danych, zwykle bezpieczników. Ten identyfikator UDS jest bezpiecznie udostępniany z użyciem wartości losowej kryptograficznie podczas procesu produkcji chipa. Po odczytaniu UDS pamięć ROM używa zależnego od dostawcy mechanizmu blokowania sprzętowego, takiego jak zatrzask, aby zablokować dostęp do UDS do następnego uruchomienia.

Etap 1. Początkowe wyprowadzanie klucza

ROM używa UDS jako danych wejściowych funkcji derywacji klucza (KDF), aby wygenerować stałą parę kluczy asymetrycznych, która jednoznacznie identyfikuje to urządzenie. Mierzy kolejny etap oprogramowania sprzętowego, w tym metadane dotyczące środowiska rozruchowego, np. czy włączone jest bezpieczne uruchamianie. Pamięć ROM łączy następnie UDS, pomiar oprogramowania sprzętowego i dane konfiguracyjne w KDF, aby uzyskać pierwszy identyfikator CDI, który jest przekazywany do następnego etapu jako tajny klucz.

Etap 2–n: rekursywne wyprowadzanie kluczy

Proces się powtarza. Na wszystkich kolejnych etapach CDI z poprzedniego etapu służy jako dane wejściowe dla nowego KDF. Ten KDF używa CDI i skrótu następnego obrazu oprogramowania, aby utworzyć nowy pochodny CDI. Każdy etap generuje własną parę kluczy i używa jej do podpisywania certyfikatu zawierającego pomiary specyficzne dla danego etapu i inne powiązane metadane.