Verwenden der fahrzeuggebundenen Dateiverschlüsselung

In diesem Inhalt wird beschrieben, wie fahrzeugbasierte Bindungsverschlüsselungs-Seed-Funktionen aktiviert werden.

Überblick

Das Hauptziel der Fahrzeugbindungs-Seed-Funktion besteht darin, die Privatsphäre des Benutzers weiter zu schützen, indem Daten im In-Vehicle Infotainment (IVI)-System vor Entfernung aus dem Fahrzeug geschützt werden. Dies geschieht durch die Bindung von Speicherverschlüsselungsschlüsseln an eine andere elektronische Steuereinheit (ECU), sodass verschlüsselte Benutzerdaten auf dem IVI nicht entschlüsselt werden können, wenn das IVI entfernt und in ein anderes Fahrzeug eingebaut (oder auf einem Prüfstand betrieben) wird.

Um Dateiverschlüsselungsschlüssel zu binden, mischt Vold einen fahrzeugspezifischen Seed mit der Ableitung von Schlüsselverschlüsselungsschlüsseln, sodass die Schlüssel eindeutig und physisch an das Fahrzeug gebunden sind. Der Seed ist ein Byte-Array, das vom OEM als neue VHAL-Eigenschaft (Vehicle Hardware Abstraction Layer) bereitgestellt wird, STORAGE_ENCRYPTION_BINDING_SEED . Die Berechtigungen dieser Eigenschaft sind eingeschränkt, sodass sie nur von privilegierten Systemdämonen abgefragt werden kann.

Architekturdiagramm

Diese Abbildung veranschaulicht die Architektur der fahrzeuggebundenen Integration:

Abbildung 1. Fahrzeuggebundene Architektur

Fahrzeugbasierte Bindung ermöglichen

Die Bindung der Speicherverschlüsselung an das Fahrzeug muss explizit aktiviert werden und kann ohne einen Werksreset nicht aktiviert oder deaktiviert werden. Dies bedeutet, dass ein Over-the-Air (OTA)-Update die Funktion nicht aktivieren kann, ohne auch das Gerät zu löschen. Ein OEM könnte die Funktion beim Upgrade aktivieren, wenn er auch das Gerät auf die Werkseinstellungen zurücksetzt. Zum Beispiel bei einem Servicebesuch.

Diese Funktion wird durch die Unterstützung der Eigenschaft STORAGE_ENCRYPTION_BINDING_SEED im vom Anbieter bereitgestellten Fahrzeug-HAL aktiviert. Diese Eigenschaft enthält eine Bytefolge mit einer Länge von 16 Bytes und soll auf einem vom IVI getrennten Steuergerät gespeichert werden. Die Eigenschaft wird zunächst vom Android Automotive OS (AAOS) festgelegt, das sie mithilfe eines kryptographisch sicheren Zufallszahlengenerators (CSRNG) generiert. AAOS liest die Eigenschaft dann bei nachfolgenden Startvorgängen.

Wie die VHAL den Wert von STORAGE_ENCRYPTION_BINDING_SEED speichert, ist herstellerspezifisch. Wir haben allgemeine Empfehlungen zum Schutz des Saatguts:

  1. ( Empfohlen ) Das Saatgut wird von einem Steuergerät im Fahrzeug gespeichert, das physisch gut geschützt ist. Wenn nicht, ist es einfach, sowohl das IVI als auch das Steuergerät aus dem Fahrzeug zu entfernen.
  2. ( Empfohlen ) IVI und ECU sollten sich gegenseitig authentifizieren, um den Seed auszutauschen, um Spoofing-Anfragen für den Seed von der ECU zu verhindern.
  3. ( Empfohlen ) Seed sollte über einen sicheren Kanal übertragen werden, um CAN-Bus-Sniffing zu verhindern.

Fügen Sie außerdem Folgendes hinzu, um sicherzustellen, dass Vendor init.target.rc auf late-fs vor mount_all --late steht:

# feed vehicle binding seed to vold
exec_start vold_seed_binding

Die Fahrzeug-HAL sollte in early_hal statt in hal now gestartet werden. Auf alle persist.* Systemeigenschaften kann in early-hal nicht zugegriffen werden, da die /data Partition noch nicht gemountet ist.

Fahrzeugbasierte Bindung konfigurieren

Wenn der ECU-Seed nicht übereinstimmt, startet das Gerät im Wiederherstellungsmodus neu und fordert den Benutzer auf, die /data Partition zu löschen oder es erneut zu versuchen.

Das Verhalten beim Auffordern und Löschen von Daten kann in der Datei „builtins.cpp“ geändert werden:

  1. Ändern Sie prompt_and_wipe_data in wipe_data . Das Gerät löscht die Daten und startet dann ohne Aufforderung neu.
  2. Die Eingabeaufforderungsmeldung ist in der Datei „recovery.cpp“ enthalten.

    Abbildung 2. Aufforderungsnachricht

Testen der fahrzeugbasierten Bindung

Scheintests

Ein Mock-Test wird in packages/services/Car/cpp/security/vehicle_binding_util/tests bereitgestellt.

So führen Sie diesen Testtest aus:

attest libvehicle_binding_util_test

Integrationstests

Ein Testtest wird in packages/services/Car/cpp/security/vehicle_binding_util/tests bereitgestellt.

So führen Sie diesen Integrationstest aus:

atest vehicle_binding_integration_test