Stan urządzenia wskazuje, na ile swobodnie można wgrywać oprogramowanie na urządzenie i czy weryfikacja jest wymuszana. Stany urządzenia to LOCKED
i UNLOCKED
. Urządzenia LOCKED
nie pozwalają na wgrywanie nowego oprogramowania na urządzenie, podczas gdy urządzenia UNLOCKED
umożliwiają modyfikację.
Gdy urządzenie jest włączane, bootloader najpierw sprawdza, czy jest to urządzenie LOCKED
czy UNLOCKED
. Jeśli urządzenie jest UNLOCKED
, bootloader wyświetla użytkownikowi ostrzeżenie, a następnie przechodzi do uruchamiania, nawet jeśli wczytane oprogramowanie nie jest podpisane przez korzeń zaufania.
Jeśli urządzenie jest LOCKED
, program rozruchowy wykonuje czynności opisane w sekcji Weryfikowanie uruchamiania, aby sprawdzić oprogramowanie urządzenia. Urządzenia LOCKED
uruchamiają się tylko, jeśli załadowany system operacyjny jest prawidłowo podpisany przez korzeń zaufania. Więcej informacji znajdziesz w artykule Proces uruchamiania.
Zmiana stanu urządzenia
Aby zmienić stan urządzenia, użyj polecenia fastboot flashing [unlock | lock]
. Aby chronić dane użytkowników, wszystkie przejścia między stanami powodują wyczyszczenie partycji danych i wymagają potwierdzenia przez użytkownika przed usunięciem danych.
Przejście z wersji UNLOCKED
na LOCKED
jest przewidywane, gdy użytkownik kupi używane urządzenie do programowania. Po zablokowaniu urządzenia użytkownik powinien mieć pewność, że jest ono w stanie wyprodukowanym przez producenta urządzenia, o ile nie ma ostrzeżenia. Przejście z LOCKED
na UNLOCKED
jest oczekiwane, gdy deweloper chce wyłączyć weryfikację na urządzeniu na potrzeby programowania.
Źródło zaufania
Root of trust to klucz kryptograficzny używany do podpisywania kopii Androida przechowywanej na urządzeniu. Część prywatna zaufanego korzenia jest znana tylko producentowi urządzenia i służy do podpisywania każdej wersji Androida przeznaczonej do dystrybucji. Publiczna część zaufanego elementu jest wbudowana w urządzenie i przechowywana w miejscu, w którym nie można jej zmodyfikować (zazwyczaj jest to pamięć tylko do odczytu).
Podczas wczytywania Androida bootloader używa głównego źródła zaufania do weryfikacji autentyczności. Więcej informacji o tym procesie znajdziesz w artykule Weryfikacja podczas uruchamiania. Urządzenia mogą mieć wiele programów rozruchowych, a w związku z tym może być w użyciu wiele kluczy kryptograficznych.
Źródło zaufania ustawiane przez użytkownika
Urządzenia mogą opcjonalnie umożliwiać użytkownikowi skonfigurowanie zaufanego źródła (na przykład klucza publicznego). Urządzenia, w tym urządzenia Google Pixel, mogą używać tego zaufanego gniazda głównego do weryfikacji podczas uruchamiania, który może być ustawiany przez użytkownika, oprócz wbudowanego zaufanego gniazda głównego.
Jeśli implementujesz możliwość ustawienia przez użytkownika zaufanego punktu początkowego, musisz to zrobić w taki sposób, aby:
- Aby ustawić lub usunąć katalog główny zaufany ustawiany przez użytkownika, wymagane jest fizyczne potwierdzenie.
- Użytkownik może ustawić tylko katalog główny zaufany, który może być ustawiony tylko przez użytkownika końcowego. Nie można go ustawić w fabryce ani w żadnym pośrednim punkcie przed przekazaniem urządzenia użytkownikowi końcowemu.
- Użytkownik może ustawić zaufanego dostawcę, który jest przechowywany w pamięci zabezpieczonej przed ingerencją. Znaki podważenia oznaczają, że można wykryć, czy dane zostały zmodyfikowane przez Androida, na przykład czy zostały zastąpione lub zmienione.
- Jeśli ustawiona jest korzeń zaufania, który może być ustawiany przez użytkownika, urządzenie powinno zezwalać na uruchamianie wersji Androida podpisanych za pomocą wbudowanego korzenia zaufania lub korzenia zaufania, który może być ustawiany przez użytkownika.
- Za każdym razem, gdy urządzenie uruchamia się przy użyciu zaufanego korzenia zdefiniowanego przez użytkownika, użytkownik powinien zostać poinformowany, że urządzenie wczytuje niestandardową wersję Androida. Na przykład ekrany z ostrzeżeniem znajdziesz na
LOCKED
urządzeniach z niestandardowym zestawem kluczy.
Jednym ze sposobów implementacji wiarygodnego katalogu głównego, który może być ustawiany przez użytkownika, jest utworzenie wirtualnego partycjonowania, które można sformatować lub wyczyścić tylko wtedy, gdy urządzenie jest w stanie UNLOCKED
. Urządzenia Google Pixel 2 korzystają z tego podejścia, a partycja wirtualna ma nazwę avb_custom_key
. Format danych w tej partycji jest wynikiem polecenia avbtool extract_public_key
. Oto przykład sposobu ustawiania przez użytkownika głównego punktu zaufania:
avbtool extract_public_key --key key.pem --output pkmd.bin
fastboot flash avb_custom_key pkmd.bin
Użytkownik może zresetować zaufany łańcuch zaufania, wykonując te czynności:
fastboot erase avb_custom_key