Silnik do tworzenia identyfikatorów urządzeń

Urządzenie identyfikatora kompozycyjnego (DICE) to specyfikacja Trusted Computing Group (TCG), która została zaadaptowana do Androida. Tworzy zestaw silnych, niezmiennych tożsamości kryptograficznych dla każdego elementu oprogramowania układowego wczytanego podczas sekwencji rozruchu. Te tożsamości umożliwiają zdalne sprawdzanie stanu zabezpieczeń urządzenia, co można obejść tylko przez skompromitowanie ROM-u.

Proces wyprowadzania danych DICE

Uproszczony proces wyprowadzania DICE

Rysunek 1. Uproszczony proces wyprowadzania DICE.

Proces wyprowadzania DICE zapewnia, że każda zmiana obrazu oprogramowania układowego powoduje utworzenie nowego, unikalnego identyfikatora dla tego etapu i każdego kolejnego. Dzieje się tak, ponieważ każdy załadowany etap oprogramowania układowego mierzy i certyfikuje następny, generując unikalne tożsamości i powiązane klucze, które zapobiegają obchodzeniu lub modyfikowaniu. Pamięć tylko do odczytu (ROM) przetwarza pomiar, konfigurację i wyjątkowy klucz urządzenia (UDS) za pomocą funkcji wyprowadzania klucza (KDF), aby wyprowadzić klucz dla następnego wczytywanego etapu. Ten klucz jest nazywany złożonym identyfikatorem urządzenia (CDI).

Etap 0. Inicjowanie

Proces DICE rozpoczyna się od załadowania przez ROM chipsetu UDS z banku niezmiennych danych, zazwyczaj bezpiecznych układów scalonych. Ten UDS jest bezpiecznie udostępniany za pomocą losowej wartości kryptograficznej podczas procesu produkcji układu scalonego. Po odczytaniu UDS ROM używa mechanizmu blokowania sprzętowego zależnego od producenta, takiego jak zatrzask, aby zablokować dostęp do UDS do następnego uruchomienia.

Etap 1. Początkowy klucz wyprowadzony

ROM używa UDS jako danych wejściowych do funkcji derywacji klucza (KDF), aby wygenerować trwałą parę kluczy asymetrycznych, która jednoznacznie identyfikuje to urządzenie. Pomiar obejmuje następny etap oprogramowania, w tym metadane o środowisku rozruchu, na przykład informacje o tym, czy bezpieczne uruchamianie jest włączone. ROM łączy dane UDS, pomiaru oprogramowania układowego i konfiguracji w KDF, aby wyprowadzić pierwszy CDI, który jest przekazywany do następnego etapu jako tajny.

Etap 2–n: rekurencyjna derywacja klucza

Następnie proces się powtarza. Na wszystkich kolejnych etapach CDI z poprzedniego etapu służy jako dane wejściowe dla nowego KDF. Ten plik KDF używa pliku CDI i sumy kontrolnej następnego obrazu oprogramowania układu do wygenerowania nowego pochodnej pliku CDI. Każdy etap generuje własną parę kluczy i używa jej do podpisania certyfikatu zawierającego pomiary dotyczące danego etapu i inne powiązane metadane.