Stan sieci mesh i obsługa administracyjna

Tryb rozruchu SDV określa, jak agent wykrywania usług SDV na maszynie wirtualnej SDV zachowuje się podczas próby połączenia z innymi agentami wykrywania usług (działającymi na innych maszynach wirtualnych SDV) w celu utworzenia bezpiecznej sieci mesh. Jest to podobne do obecnej koncepcji device state w weryfikacji podczas uruchamiania w Androidzie.

Tryb rozruchu SDV jest używany podczas udostępniania lub aktualizowania magazynu zaufanych certyfikatów maszyny wirtualnej pojazdu (VVM Trust Store, nazywanego też vvmtruststore).

Działanie bezpiecznej siatki SDV

Siatka wykrywania usług może mieć jeden z tych stanów w zależności od otrzymanych wartości rozruchu: Normal, Warning lub Fatal.

W pojazdach produkcyjnych dostarczanych klientom SDV Secure Mesh musi być w stanie Normal. Aby przełączyć sieć mesh ze stanu Normal na stan Warning, konieczna jest interwencja diagnostyczna. W środowisku produkcyjnym (np. nie w środowisku deweloperskim ani debugowania) stan Warning występuje tylko podczas udostępniania.

Fatal to poważny błąd, podobny do system_ext obrazu, który nie przechodzi weryfikacji podpisu w programie rozruchowym Androida. Jeśli SDV Secure Mesh przechodzi ze stanu Normal do Fatal wyłącznie z powodu aktualizacji bezprzewodowej (OTA), aktualizacja jest uznawana za nieudaną, a sieć wraca do pierwotnej wersji Normal.

Więcej informacji o poszczególnych stanach znajdziesz w kolejnych sekcjach.

 Normalny

  • Z perspektywy Service Discovery uruchomienie systemu jest SECURE.
  • Usługa wykrywania łączy się tylko z urządzeniami, które zostały bezpiecznie uruchomione. Bezpiecznie uruchomiony węzeł oznacza, że bezpieczna siatka SDV jest również bezpieczna.

 Ostrzeżenie

  • Uruchomienie systemu mogło zostać naruszone, ponieważ niektóre weryfikacje są wyłączone.
  • Usługa Service Discovery łączy się tylko z węzłami, które mają dokładnie taki sam zestaw wyłączonych weryfikacji. Dzięki temu wszystkie węzły w bezpiecznej siatce SDV mają identyczne właściwości zabezpieczeń.
  • Nie można zweryfikować powodzenia rozruchu równorzędnego z powodu lokalnych błędów lub wyłączonych funkcji.
  • Poza środowiskiem programistycznym lub sytuacją deweloperską ma to następujące implikacje:
    • Dane użytkownika nie mogą być dostępne. Oznacza to, że nie może być przesyłana ani modyfikowana przez komunikację w bezpiecznej sieci SDV.
    • Gdy sieć mesh jest w tym stanie, powinny być dostępne tylko usługi potrzebne do procesów udostępniania.

 Krytyczny

  • Krytyczny błąd podczas etapów uruchamiania systemu.
  • Wystąpił co najmniej jeden podstawowy błąd, który uniemożliwia agentowi Service Discovery utworzenie siatki. Usługi lokalne nie mogą komunikować się z usługami zdalnymi.
  • Z perspektywy Service Discovery uruchomienie systemu jest UNSECURE.

Tryb uruchamiania SDV

Tryb uruchamiania SDV może mieć 2 wartości: LOCKEDUNLOCKED. W przypadku tworzenia siatki Service Discovery symbol LOCKED oznacza, że błędy weryfikacji są krytyczne, a symbol UNLOCKED oznacza, że nie są.

Warunek Tryb uruchamiania SDV
UNLOCKED LOCKED
Lokalny sklep z zaufanymi weryfikacjami tożsamości w pobliżu jest pusty  Ostrzeżenie  Krytyczny
Brak lokalnego łańcucha DICE  Krytyczny  Krytyczny
Nie udało się zweryfikować lokalnego łańcucha DICE  Ostrzeżenie  Krytyczny
Dopasowanie lokalnego trybu SDV i AVB Patrz tabela w sekcji Dopasowanie w trybie lokalnego SDV i AVB
Porównanie wartości trybu urządzenia zdalnego Zobacz tabelę w sekcji Porównanie wartości trybu urządzenia zdalnego
Nie udało się dopasować pilota uds_pubs  Ostrzeżenie  Krytyczny
Nie udało się zweryfikować zdalnego łańcucha DICE (przy użyciu zasad DICE)  Ostrzeżenie  Krytyczny
Nieudane uzgadnianie uwierzytelniania zdalnego  Krytyczny  Krytyczny

Dopasowanie lokalnego trybu SDV i AVB

W tabeli poniżej pokazujemy, jak tryb AVB i tryb rozruchu SDV wpływają na działanie bezpiecznej siatki SDV. Kolory są zdefiniowane w sekcji Integracja z Androidem w dokumentacji AVB.

Tryb AVB x tryb uruchamiania SDV Tryb uruchamiania SDV
UNLOCKED LOCKED
AVB LOCKED Zielony  Ostrzeżenie  Normalny
Żółty  Krytyczny  Krytyczny
AVB UNLOCKED Orange  Ostrzeżenie  Krytyczny

Wartość trybu urządzenia

W łańcuchu DICE każdy certyfikat CDI ma wartość trybu. Ta wartość określa stan bezpieczeństwa tej warstwy na podstawie danych wejściowych konfiguracji. Aby określić stan zabezpieczeń całego oprogramowania na urządzeniu, specyfikacja SDV definiuje wartość trybu urządzenia. Ta wartość pochodzi z wartości trybu wszystkich etapów CDI w łańcuchach DICE związanych z daną maszyną wirtualną SDV (czyli Android HLOS i Secure World) i korzysta z tego wyliczenia:

enum DeviceMode {
  NotConfigured = 0,
  Recovery = 1,
  Debug = 2,
  Normal = 3,
}
wartości trybu z otwartego profilu DICE.

Algorytm

Algorytm obliczania wartości trybu urządzenia jest następujący:

  1. Określ deviceMode jako DeviceMode::Normal.
  2. Określ diceChainList jako listę łańcuchów DICE odpowiednich dla maszyny wirtualnej SDV.
  3. Dla każdego elementu diceChaindiceChainList:
    1. diceChain podaj cdiList jako listę certyfikatów CDI:
    2. Dla każdego elementu cdiCertcdiList:
      1. Określ cdiDeviceMode jako DeviceMode odpowiadające cdiCert.mode.
      2. Ustaw deviceMode na min(deviceMode, cdiDeviceMode).
  4. Powrót: deviceMode.

Porównanie wartości trybu urządzenia zdalnego

Agent wykrywania usług łączy się tylko z innymi agentami, którzy mają taką samą wartość trybu urządzenia.

Wartość trybu urządzenia zapewnia, że sieć typu mesh nie może mieć elementów o różnych właściwościach zabezpieczeń. Powstała w ten sposób sieć ma jednolite zasady bezpieczeństwa dla wszystkich jej członków.

Wartość trybu urządzenia Zdalne
Nie skonfigurowano Debugowanie Odzyskiwanie Normalny
Lokalnie Nie skonfigurowano  Krytyczny  Krytyczny  Krytyczny  Krytyczny
Debugowanie  Krytyczny  Ostrzeżenie  Krytyczny  Krytyczny
Odzyskiwanie  Krytyczny  Krytyczny  Ostrzeżenie  Krytyczny
Normalny  Krytyczny  Krytyczny  Krytyczny  Normalny

Proces obsługi administracyjnej w fabryce

Jest to proces udostępniania na linii montażowej pojazdów, w którym zakłada się, że infrastruktura kluczy publicznych nie jest dostępna. Ten proces zależy od 32-bajtowej wartości przechowywanej w pamięci OTP (one-time-programmable) o nazwie Vehicle VM (VVM) Factory Trust lub vvmfactorytrust. Gdy ta wartość jest ustawiona, jest przekazywana do jądra jako parametr o nazwie androidboot.sdv.vvmfactorytrust.

Wszystkie maszyny wirtualne w ECU muszą mieć ten sam tryb rozruchu SDV i zaufanie fabryczne VVM.

Stan początkowy

Wszystkie ECU są początkowo w trybie rozruchu SDV w trybie UNLOCKED z pustym zaufaniem fabrycznym VVM i magazynem zaufania maszyny wirtualnej pojazdu, z wyjątkiem wszystkich uds_certs obecnych na vvmtruststore. Na rysunku 1 przedstawiono przykład, w którym 3 maszyny wirtualne SDV (VM-A, VM-B i VM-C) są rozmieszczone w 2 oddzielnych jednostkach ECU (ECU-0 i ECU-1):

Przykład wstępnej konfiguracji fabrycznej

Rysunek 1. Obsługa administracyjna w fabryce, stan początkowy.

Krok 1. Uruchom narzędzie sdv_provisioning_tool

Uruchom wszystkie maszyny wirtualne ze wszystkich jednostek ECU.

Na każdej maszynie wirtualnej uruchom polecenie sdv_provisioning_tool.

  1. Narzędzie komunikuje się z lokalnym agentem wykrywania usług i czeka, aż zasygnalizuje on, że bezpieczna siatka SDV jest gotowa, a agent zapisał listę kluczy publicznych UDS w /vvmtruststore/uds_pubs.
  2. W takiej sytuacji narzędzie pobiera hash właśnie zapisanego pliku/vvmtruststore/uds_pubs i go wyświetla.

Konfigurowanie fabryczne, krok 1

Rysunek 2. Konfigurowanie fabryczne, krok 1.

Krok 2. Zapisz VVM Factory Trust

Na jednej maszynie wirtualnej każdego ECU:

  1. Zapisz w VVM Factory Trust skrót /vvmtruststore/uds_pubs wygenerowany przez sdv_provisioning_tool w poprzednim kroku. Sposób zapisu jest zależny od producenta OEM lub dostawcy i nie jest objęty tą specyfikacją.

Konfigurowanie fabryczne, krok 2

Rysunek 3. Konfigurowanie fabryczne, krok 2.

Krok 3. Uruchom ponownie urządzenie w trybie rozruchu SDV z blokadą

Uruchom ponownie wszystkie maszyny wirtualne we wszystkich jednostkach ECU w trybie uruchamiania SDV w trybie LOCKED.

Agent Service Discovery ufa maszynom wirtualnym w jednostkach ECU z kluczami publicznymi UDS wymienionymi w uds_pubs, ponieważ skrót tego pliku pasuje do zaufania fabrycznego VVM.

Ponieważ moduły ECU zostały udostępnione razem, są trwale powiązane i z perspektywy weryfikacji łańcucha DICE można je traktować jako jeden element sprzętowy.

Konfigurowanie fabryczne, krok 3

Rysunek 4. Konfigurowanie fabryczne, krok 3.

Proces wymiany części

Jest to proces rejestracji w autoryzowanym warsztacie samochodowym lub garażu, w którym uszkodzony ECU musi zostać wymieniony na nowy, niezarejestrowany.

Ten proces zależy od certyfikatów UDS wydanych bezpośrednio przez główny urząd certyfikacji podany w vvmconfig lub pośrednio, przez łańcuch pośrednich urzędów certyfikacji.

Stan początkowy

Wszystkie maszyny wirtualne są już fabrycznie skonfigurowane i działają w trybie rozruchu SDV w trybie LOCKED.

Rysunek 5 przedstawia przykład, w którym ECU-0 działa nieprawidłowo i wymaga wymiany:

Wymiana części, stan początkowy

Rysunek 5. Wymiana części, stan początkowy.

Krok 1. Zainstaluj nowy ECU

Zainstaluj nowy ECU, który jest w stanie pustym i nie został jeszcze skonfigurowany.

Na rysunku 6 po włączeniu zasilania ECU-2 (wymienianego ECU) występują 2 rozłączne bezpieczne sieci SDV: jedna w stanie Warning, a druga w stanie Normal. Obie bezpieczne siatki SDV są niekompletne.

Wymiana części, krok 1

Rysunek 6. Wymiana części, krok 1.

Krok 2. Uruchom ponownie urządzenie w trybie SDV Boot Mode odblokowanym

Uruchom ponownie wszystkie maszyny wirtualne wszystkich ECU w trybie uruchamiania SDV w trybie UNLOCKED.

Na rysunku 7 maszyny wirtualne B i C dołączają do Warning bezpiecznej siatki SDV, która jest kompletna.

Wymiana części, krok 2

Rysunek 7. Wymiana części, krok 2.

Krok 3. Uruchom narzędzie sdv_provisioning_tool

Na każdej maszynie wirtualnej uruchom polecenie sdv_provisioning_tool.

Narzędzie komunikuje się z lokalnym agentem wykrywania usług i czeka, aż zasygnalizuje on, że bezpieczna siatka SDV jest gotowa, a agent zapisał listę kluczy publicznych UDS w /vvmtruststore/uds_pubs.

W takim przypadku narzędzie pobiera hash dopiero co zapisanego pliku /vvmtruststore/uds_pubs i go wyświetla, ale ten hash nie jest używany w tym procesie.

Wymiana części, krok 3

Rysunek 8. Wymiana części, krok 3.

Krok 4. Zainstaluj certyfikaty UDS

  • Wyodrębnij /vvmtruststore/uds_pubs z dowolnej maszyny wirtualnej SDV. Nie ma to znaczenia, ponieważ jest taki sam dla wszystkich maszyn wirtualnych w tej samej bezpiecznej sieci SDV.
  • Pobierz certyfikaty aprowizacji dla wszystkich kluczy publicznych UDS wymienionych w tym /vvmtruststore/uds_pubs.
    • Ten krok zwykle obejmuje wysłanie wyodrębnionych kluczy publicznych UDS (lub pliku /vvmtruststore/uds_pubs) na zdalny serwer aprowizacji. Serwer pobiera istniejące certyfikaty lub generuje nowe, sprawdzając otrzymane klucze publiczne w bazie danych znanych kluczy publicznych UDS utworzonej podczas produkcji ECU.
  • Zapisz /vvmtruststore/uds_certs każdej maszyny wirtualnej SDV.

Wymiana części, krok 4

Rysunek 9. Wymiana części, krok 4.

Krok 5. Uruchom ponownie urządzenie w trybie SDV Boot Mode locked

Uruchom ponownie wszystkie maszyny wirtualne w trybie uruchamiania SDV w trybie LOCKED.

Jeśli bezpieczna siatka SDV jest niekompletna, wróć do kroku 2.

Wymiana części, krok 5

Rysunek 10. Wymiana części, krok 5.