Wszystkie klucze KeyMint muszą być powiązane ze źródłem zaufania urządzenia. Źródło zaufania to ciąg bitów pochodzący z klucza publicznego używanego do weryfikacji podpisu obrazu rozruchowego oraz stanu blokady programu rozruchowego.
Klucze KeyMint muszą być też powiązane z wersją systemu operacyjnego i poziomem poprawek na urządzeniu. Aby obsługiwać modułową strukturę Treble, to powiązanie wersji obejmuje osobne poziomy poprawek dla każdej partycji (boot, system i vendor). Dzięki temu każdą partycję można aktualizować niezależnie, zachowując ochronę przed przywróceniem poprzedniej wersji.
Aby wdrożyć to powiązanie wersji, zaufana aplikacja KeyMint potrzebuje sposobu na bezpieczne otrzymywanie informacji o bieżącej wersji systemu operacyjnego i poziomach poprawek oraz na upewnienie się, że otrzymane informacje są zgodne ze wszystkimi informacjami o uruchomionym systemie.
- Urządzenia z weryfikacją podczas uruchamiania Androida (AVB):
- Poziomy poprawek i wersja systemu operacyjnego mogą być uwzględnione w
vbmeta.img, dzięki czemu program rozruchowy może przekazać je do KeyMint. - W przypadku partycji połączonych łańcuchowo informacje o wersji partycji znajdują się w połączonym łańcuchowo VBMeta.
- Ogólnie informacje o wersji powinny znajdować się w
VBMeta struct, który zawiera dane weryfikacyjne (skrót lub drzewo skrótów) dla danej partycji.
- Poziomy poprawek i wersja systemu operacyjnego mogą być uwzględnione w
- Urządzenia bez AVB:
- Implementacje weryfikacji podczas uruchamiania muszą dostarczać programowi rozruchowemu wartość skrótu metadanych wersji, aby program rozruchowy mógł przekazać ją do KeyMint.
boot.imgmoże nadal przechowywać poziomy poprawek w nagłówku.system.imgmoże nadal przechowywać poziomy poprawek i wersję systemu operacyjnego we właściwościach tylko do odczytu.vendor.imgprzechowuje poziom poprawek we właściwości tylko do odczyturo.vendor.build.version.security_patch.- Program rozruchowy może dostarczyć do KeyMint skrót wszystkich danych zweryfikowanych przez weryfikację podczas uruchamiania.
Te tagi opisują informacje o wersji odpowiednich partycji:
Tag::VENDOR_PATCHLEVEL:vendorpartycjaTag::BOOT_PATCHLEVEL: partycjabootTag::OS_PATCHLEVELiTag::OS_VERSION: partycjasystem;Tag::OS_VERSIONjest usuwany z nagłówkaboot.img
Implementacje KeyMint powinny traktować wszystkie poziomy poprawek niezależnie. Klucze są użyteczne, jeśli wszystkie informacje o wersji są zgodne z wartościami powiązanymi z kluczem. Jeśli bieżąca wersja urządzenia jest nowsza niż jakakolwiek wartość powiązana z kluczem, KeyMint zwraca błąd KEY_REQUIRES_UPGRADE przy każdej próbie użycia klucza. Następnie Keystore wykonuje IKeyMintDevice::upgradeKey, aby wygenerować nowy obiekt keyblob powiązany z bieżącymi poziomami poprawek (a potem usuwa poprzedni obiekt keyblob, wywołując IKeyMintDevice::deleteKey).