Profil SDV dla DICE

Profil SDV dla mechanizmu tworzenia identyfikatorów urządzeń (DICE) jest rozszerzeniem profilu Androida dla DICE. W SDV maszyna wirtualna korzysta z 2 równoległych łańcuchów DICE:

  • Łańcuch Secure World DICE
  • Łańcuch SDV DICE na Androidzie

Te pola z deskryptora konfiguracji profilu Androida dla DICE są istotne w przypadku każdego z tych łańcuchów:

Nazwa Klucz Typ Opis
Nazwa komponentu -70002 tstr Zalecane w przypadku każdej warstwy CDI. Nazwa komponentu jednoznacznie identyfikuje etap wśród wszystkich łańcuchów DICE sprzętu, na których działają maszyny wirtualne SDV Androida na pojeździe lub platformie pojazdu.
Wersja zabezpieczeń <0x0A -70005 uint Wymagany na każdym etapie CDI. Umożliwia zdefiniowanie zasad DICE, które uniemożliwiają dołączanie do bezpiecznej siatki SDV niezabezpieczonych wersji zdalnych maszyn wirtualnych.
Nazwa instancji komponentu -70007 tstr Wymagane w przypadku pierwszej warstwy CDI specyficznej dla maszyny wirtualnej. Na przykład po hiperwizorze w przypadku łańcucha DICE SDV Androida. Nazwa instancji SDV. Jeśli wiele warstw CDI zawiera nazwę instancji komponentu, każda warstwa musi mieć tę samą wartość.

Łańcuch Secure World DICE

Łańcuch DICE w bezpiecznym środowisku jest taki sam jak ten, który serwer zdalnego udostępniania kluczy (RKP) na Androidzie otrzymuje z urządzeń z Androidem. Interfejs HAL IRemotelyProvisionedComponent generateCertificateRequestV2() udostępnia ten łańcuch DICE Androidowi.

Ta tabela przedstawia przykładowy łańcuch DICE w bezpiecznym środowisku:

Etap uruchamiania Warstwa DICE CDI Wystawiony przez
Główny program rozruchowy CDI[0] UDS
Dodatkowy program rozruchowy CDI[1] Główny program rozruchowy
Uruchamianie TEE CDI[2] Dodatkowy program rozruchowy
KeyMint TA boot CDI[3] (liść) TEE

Aby wdrożyć zaufaną aplikację KeyMint (TA), użyj jednej z tych opcji:

  • Pojedyncza instancja KeyMint dla wszystkich maszyn wirtualnych SDV: musisz wyznaczyć pojedynczy interfejs CDI dla wszystkich maszyn wirtualnych.

lub

  • Jedna instancja KeyMint na każdą maszynę wirtualną SDV: musisz przypisać inną wartość CDI do każdej maszyny wirtualnej. Poszczególne wartości CDI MUSZĄ zawierać nazwę instancji komponentu, która jest zgodna z nazwą instancji komponentu maszyny wirtualnej.

Łańcuch SDV DICE na Androidzie

Łańcuch SDV DICE w Androidzie certyfikuje oprogramowanie działające na ścieżce rozruchu, która prowadzi przez hipernadzorcę do systemu operacyjnego Android HLOS działającego na maszynach wirtualnych SDV.

Ta tabela przedstawia przykładowy łańcuch SDV DICE na Androidzie:

Etap uruchamiania Warstwa DICE CDI Wystawiony przez
Główny program rozruchowy CDI[0] UDS
Dodatkowy program rozruchowy CDI[1] Główny program rozruchowy
Hipernadzorca CDI[2] Dodatkowy program rozruchowy
Android HLOS CDI[3] (liść) (moduł wczytujący Androida w) hipernadzorcy1

1 Hiperwizor certyfikuje program rozruchowy Androida w systemie gościa jako warstwę. Program rozruchowy Androida certyfikuje system Android HLOS.

Certyfikat CDI HLOS Androida

Program rozruchowy Androida (lub hiperwizor, jeśli nie ma programu rozruchowego Androida, tylko program „ładowania” Androida, który wczytuje maszynę wirtualną w hiperwizorze) podpisuje certyfikat CDI HLOS Androida i obejmuje HLOS Androida. Na przykład obejmuje cały kod, który program rozruchowy Androida weryfikuje zgodnie z weryfikacją podczas uruchamiania na Androidzie (AVB).

Certyfikat CDI HLOS Androida musi zawierać wartości systemu operacyjnego Android specyficzne dla SDV, które ograniczają luki w zabezpieczeniach. Na przykład potencjalny wyciek obiektów tajnych przez blokowanie maszyn wirtualnych ze znanymi lukami w zabezpieczeniach w bezpiecznej sieci typu mesh SDV. Weryfikacja AVB zapewnia większość tych wartości.

Są one też przekazywane do KeyMint w TEE, gdzie certyfikat jest podpisywany przez końcowy identyfikator CDI łańcucha SecureWorld DICE i przekazywany do Androida w DeviceInfo, aby włączyć funkcje takie jak atestowanie kluczy i identyfikatorów w podstawowym Androidzie.

Pola certyfikatu codeInput i codeHash

Skrót VBMeta (dane wyjściowe programu rozruchowego Androida na potrzeby weryfikacji AVB) obejmuje oprogramowanie systemu Android HLOS. Dlatego służy on jako android-dice-input-values do uzyskiwania obiektów tajnych CDI i jest wpisywany w polu dice-cert-fields certyfikatu CDI.

Zalecanym algorytmem skrótu dla AVB jest SHA-256, który generuje 32-bajtowy skrót VBMeta. W przeciwieństwie do profilu otwartego dla DICE profil Androida dla DICE umożliwia android-dice-hash-algos przy użyciu 32-bajtowego android-dice-input-values w przypadku przepływu DICE, a także umieszczenie tej samej 32-bajtowej wartości jako codeHash w certyfikacie DICE.

Deskryptor konfiguracji: pola w profilu Androida dla DICE

Oprócz informacji opisanych w przypadku wszystkich warstw CDI w przypadku pól deskryptora konfiguracji z profilu Androida dla DICE obowiązują te szczegółowe informacje:

Nazwa Klucz Typ Opis
Wersja komponentu -70003 int Wersja systemu operacyjnego z AVB version-info-avb. Jest to też to samo co android.os.Build.VERSION.release.
Wersja zabezpieczeń -70005 uint Poziom aktualizacji zabezpieczeń partycji system w formacie YYYYMMDD.
Znacznik maszyny wirtualnej RKP -70006 null Marker maszyny wirtualnej RKP uniemożliwia zdalne udostępnianie kluczy wydawanie certyfikatów dla łańcucha DICE SDV Androida.

Marker maszyny wirtualnej RKP musi występować w pierwszym certyfikacie CDI w łańcuchu DICE SDV Androida, który nie jest wspólny z łańcuchem DICE Secure World. Nie może też występować w żadnych kolejnych certyfikatach CDI, aby serwer RKP rkp-avf-support nie uznał łańcucha DICE za pochodzący z maszyny wirtualnej RKP.

Deskryptor konfiguracji: nowe pola

Deskryptor konfiguracji certyfikatu CDI HLOS Androida musi zawierać wartości specyficzne dla SDV wykraczające poza te, które opisuje profil Androida dla DICE. Profil SDV dla DICE rezerwuje zakres wartości kluczy [-71000, -71999] na ten cel. Możesz dodać pola specyficzne dla implementacji, używając wartości kluczy spoza zarezerwowanego zakresu. Wartości specyficzne dla SDV to:

Nazwa Klucz Typ Opis
Stan weryfikacji podczas uruchamiania -71000 tstr Może to być green, yellow lub orange.
build fingerprint -71001 tstr Zrozumiały dla człowieka ciąg tekstowy, który jednoznacznie identyfikuje tę kompilację, taki sam jak ro.build.fingerprint. Definiuje to dokument CDD dla Androida, 3.2.2 Parametry kompilacji,cdd-3-2-2. VBMeta przechowuje tę wartość jako właściwość o nazwie com.android.build.system.fingerprint.
system_ext poziom aktualizacji zabezpieczeń -71002 uint Poziom aktualizacji zabezpieczeń partycji system_ext w formacie YYYYMMDD.
product poziom aktualizacji zabezpieczeń -71003 uint Poziom aktualizacji zabezpieczeń partycji product w formacie YYYYMMDD.
vendor poziom aktualizacji zabezpieczeń -71004 uint Poziom aktualizacji zabezpieczeń partycji vendor w formacie YYYYMMDD.
boot poziom aktualizacji zabezpieczeń -71005 uint Poziom aktualizacji zabezpieczeń partycji boot (zawierającej jądro systemu Linux) w formacie YYYYMMDD.
Tryb uruchamiania SDV -71006 tstr locked lub unlocked. Więcej informacji znajdziesz w artykule Stan i konfigurowanie sieci Mesh.

Wybór wartości wejściowej trybu interfejsu CDI HLOS Androida

android-dice-mode certyfikatu CDI HLOS Androida ma następującą definicję:

AVB UNLOCKED AVB LOCKED
Tryb uruchamiania SDV ODblokowany Debugowanie Debugowanie
Tryb uruchamiania SDV ZABLOKOWANY Nie skonfigurowano (nieprawidłowe) Normalny

Funkcja derywacji klucza

Funkcja android-dice-kdf, która wyprowadza parę kluczy publicznego i prywatnego z tajnego klucza CDI_Attest na potrzeby interfejsu CDI systemu Android HLOS, musi być funkcją HKDF z SHA512 jako funkcją skrótu.