Użyj szyfrowania plików powiązanych z pojazdem

Na tej stronie opisano, jak włączyć funkcje początkowe szyfrowania powiązań oparte na pojazdach.

Przegląd

Podstawowym celem funkcji początkowego powiązania pojazdu jest dalsza ochrona prywatności użytkownika poprzez ochronę danych znajdujących się w systemie informacyjno-rozrywkowym w pojeździe (IVI) przed usunięciem z pojazdu. Odbywa się to poprzez powiązanie kluczy szyfrowania przechowywania z inną elektroniczną jednostką sterującą (ECU) w taki sposób, że w przypadku wyjęcia IVI i umieszczenia go w innym pojeździe (lub uruchomieniu na stanowisku testowym) zaszyfrowanych danych użytkownika w IVI nie można odszyfrować.

Aby powiązać klucze szyfrujące pliki, Vold łączy ziarno specyficzne dla pojazdu z wyprowadzeniem klucza szyfrującego, dzięki czemu klucze są unikalne i fizycznie powiązane z pojazdem. Materiałem siewnym jest tablica bajtów ujawniona jako nowa właściwość warstwy abstrakcji sprzętu pojazdu (VHAL) przez producenta OEM, STORAGE_ENCRYPTION_BINDING_SEED . Uprawnienia tej właściwości są ograniczone w taki sposób, że mogą odpytywać ją jedynie uprzywilejowane demony systemowe.

Schemat architektury

Rysunek ilustruje architekturę integracji związanej z pojazdem:

Rysunek 1. Architektura związana z pojazdem.

Włącz powiązanie oparte na pojeździe

Powiązanie szyfrowania pamięci z pojazdem musi być wyraźnie włączone i nie można go włączyć ani wyłączyć bez przywrócenia ustawień fabrycznych. Oznacza to, że aktualizacja OTA nie może włączyć tej funkcji bez wyczyszczenia urządzenia. Producent OEM może włączyć tę funkcję po aktualizacji, jeśli dodatkowo przywróci urządzenie do ustawień fabrycznych. Na przykład podczas wizyty serwisowej.

Ta funkcja jest włączana poprzez obsługę właściwości STORAGE_ENCRYPTION_BINDING_SEED w pojeździe dostarczonym przez dostawcę HAL. Ta właściwość przechowuje ciąg bajtów o długości 16 bajtów i oczekuje się, że będzie utrwalona w ECU innym niż IVI. Właściwość jest początkowo ustawiana przez system operacyjny Android Automotive (AAOS), który generuje ją przy użyciu kryptograficznie bezpiecznego generatora liczb losowych (CSRNG). Następnie AAOS odczytuje tę właściwość podczas kolejnych rozruchów.

Sposób, w jaki VHAL przechowuje wartość STORAGE_ENCRYPTION_BINDING_SEED , zależy od dostawcy. Mamy ogólne zalecenia dotyczące ochrony nasion:

  1. ( Zalecane ) Nasiona są przechowywane przez ECU w pojeździe, który jest fizycznie dobrze chroniony. Jeśli nie, wyciągnięcie z pojazdu zarówno IVI, jak i ECU jest banalne.
  2. ( Zalecane ) IVI i ECU powinny wzajemnie uwierzytelniać się w celu wymiany nasion, aby zapobiec fałszywym żądaniom dotyczącym nasion z ECU.
  3. ( Zalecane ) Materiał siewny powinien być przesyłany bezpiecznym kanałem w celu ochrony przed podsłuchiwaniem magistrali CAN.

Ponadto dodaj następujące polecenie, aby upewnić się, że dostawca init.target.rc na late-fs przed mount_all --late :

# feed vehicle binding seed to vold
exec_start vold_seed_binding

Pojazd HAL powinien teraz zostać uruchomiony w early_hal zamiast hal now . We early-hal nie można uzyskać dostępu do żadnej właściwości systemowej persist.* ponieważ partycja /data nie jest jeszcze zamontowana.

Skonfiguruj powiązanie oparte na pojeździe

Jeśli ziarno ECU nie pasuje, urządzenie uruchomi się ponownie w trybie odzyskiwania i wyświetli monit o wymazanie partycji /data lub ponowną próbę.

Zachowanie monitowania i czyszczenia danych można zmienić w plikubuiltins.cpp :

  1. Zmień prompt_and_wipe_data na wipe_data . Urządzenie wyczyści dane, a następnie uruchomi się ponownie bez monitu.
  2. Komunikat zachęty znajduje się w pliku recovery.cpp .

    Rysunek 2. Komunikat zachęty.

Przetestuj wiązanie oparte na pojeździe

Testowanie próbne

Test próbny znajduje się w packages/services/Car/cpp/security/vehicle_binding_util/tests .

Aby uruchomić ten próbny test:

attest libvehicle_binding_util_test

Testy integracyjne

Test atestowy jest dostępny w packages/services/Car/cpp/security/vehicle_binding_util/tests .

Aby uruchomić ten test integracji:

atest vehicle_binding_integration_test