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

Na tej stronie znajdziesz informacje o włączaniu funkcji wiążącego szyfrowania na podstawie seeda w samochodzie.

Omówienie

Głównym celem funkcji wiązania z pojazdem jest zapewnienie większej ochrony prywatności użytkownika poprzez zabezpieczenie danych w systemie informacyjno-rozrywkowym w pojazdach (IVI) przed usunięciem z pojazdu. Osiąga się to przez powiązanie kluczy szyfrowania pamięci z innym modułem sterowania elektronicznego (ECU), tak aby w przypadku wyjęcia i umieszczenia modułu IVI w innym pojeździe (lub uruchomienia go na stanowisku testowym) zaszyfrowane dane użytkownika na tym module nie mogły zostać odszyfrowane.

Aby powiązać klucze szyfrowania plików, Vold łączy siedziba z kluczem szyfrowania klucza, dzięki czemu klucze są unikalne i fizycznie powiązane z pojazdem. Wartość początkowa to tablica bajtów, która jest udostępniana przez producenta OEM jako nowa właściwość warstwy abstrakcji sprzętu pojazdu (VHAL).STORAGE_ENCRYPTION_BINDING_SEED Uprawnienia tej usługi są ograniczone, tak aby mogły z niej korzystać tylko uprawnione demony systemowe.

Schemat architektury

Rysunek przedstawia architekturę integracji z pojazdem:

Rysunek 1. Architektura związana z pojazdem.

Włączanie wiązania na podstawie pojazdu

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

Ta funkcja jest włączona dzięki obsłudze właściwości STORAGE_ENCRYPTION_BINDING_SEED w interfejsie HAL pojazdu dostarczonym przez dostawcę. Ta właściwość przechowuje ciąg bajtów o długości 16 bajtów i powinna być zapisywana w ECU oddzielnie od IVI. Właściwość jest początkowo ustawiana przez system operacyjny Android Automotive (AAOS), który generuje ją za pomocą kryptograficznie bezpiecznego generatora liczb losowych (CSRNG). Następnie AAOS odczytuje właściwości podczas kolejnych rozruchów.

Sposób przechowywania przez VHAL wartości STORAGE_ENCRYPTION_BINDING_SEED zależy od dostawcy. Oto ogólne zalecenia dotyczące ochrony nasienia:

  1. (zalecane) Klucz jest przechowywany przez ECU w samochodzie, który jest dobrze chroniony fizycznie. W przeciwnym razie wyjęcie IVI i ECU z pojazdu jest bardzo proste.
  2. (zalecane) IVI i ECU powinny nawzajem uwierzytelniać się, aby wymieniać informacje na temat klucza początkowego i zapobiegać fałszowaniu żądań dotyczących klucza początkowego z ECU.
  3. (zalecane) Dane nasionowe powinny być przesyłane przez bezpieczny kanał, aby zapobiec podsłuchiwaniu magistrali CAN.

Dodatkowo dodaj te informacje, aby zapewnić, że dostawca init.target.rclate-fs przed mount_all --late:

# feed vehicle binding seed to vold
exec_start vold_seed_binding

HAL pojazdu powinien być uruchamiany w trybie early_hal, a nie hal now. Nie można uzyskać dostępu do żadnej właściwości systemu persist.* w systemie early-hal, ponieważ partycja /data nie jest jeszcze zamontowana.

Konfigurowanie powiązania na podstawie pojazdu

Jeśli nasiono ECU się nie zgadza, urządzenie uruchamia się ponownie w trybie odzyskiwania i prosi użytkownika o skasowanie partycji /data lub ponowną próbę.

Zachowanie prompt i wipe można zmienić w pliku builtins.cpp:

  1. Zmień prompt_and_wipe_data na wipe_data. Urządzenie zostanie wyczyszczone, a następnie zrestartowane bez wyświetlania monitu.
  2. Komunikat prośby znajduje się w pliku recovery.cpp.

    Rysunek 2. Komunikat.

Testowanie powiązania z pojazdem

Testowanie próbne

Przykładowy test znajdziesz w dokumentacji packages/services/Car/cpp/security/vehicle_binding_util/tests.

Aby przeprowadzić test symulowany:

attest libvehicle_binding_util_test

Testowanie integracji

Test atest znajdziesz w pliku packages/services/Car/cpp/security/vehicle_binding_util/tests.

Aby przeprowadzić ten test integracji:

atest vehicle_binding_integration_test