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.