Verwenden der fahrzeuggebundenen Dateiverschlüsselung

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

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

Überblick

Das primäre Ziel der Seed-Funktion für die Fahrzeugbindung besteht darin, die Privatsphäre des Benutzers weiter zu schützen, indem Daten auf dem In-Vehicle Infotainment (IVI)-System gegen Entfernung aus dem Fahrzeug geschützt werden. Dies erfolgt durch Binden 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 einem anderen Fahrzeug platziert (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 einzigartig und physisch an das Fahrzeug gebunden sind. Der Seed ist ein Byte-Array, das als neue VHAL-Eigenschaft (Vehicle Hardware Abstraction Layer) vom OEM STORAGE_ENCRYPTION_BINDING_SEED wird. Die Berechtigungen dieser Eigenschaft sind so eingeschränkt, dass sie nur von privilegierten Systemdämonen abgefragt werden kann.

Architekturdiagramm

Diese Abbildung veranschaulicht die Architektur der fahrzeuggebundenen Integration:

Abbildung 1. Fahrzeuggebundene Architektur

Aktivieren der fahrzeugbasierten Bindung

Die Bindung der Speicherverschlüsselung an das Fahrzeug muss explizit aktiviert werden und kann nicht ein- oder ausgeschaltet werden, ohne einen Werksreset durchzuführen. 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 das Gerät auch auf die Werkseinstellungen zurücksetzt. Zum Beispiel bei einem Servicebesuch.

Diese Funktion wird durch die Unterstützung der Eigenschaft STORAGE_ENCRYPTION_BINDING_SEED in der vom Anbieter bereitgestellten Fahrzeug-HAL aktiviert. Diese Eigenschaft enthält eine Byte-Kette mit einer Länge von 16 Bytes und soll auf einer ECU getrennt von der IVI persistiert werden. Die Eigenschaft wird zunächst vom Android Automotive OS (AAOS) festgelegt, das sie mithilfe eines kryptografisch sicheren Zufallszahlengenerators (CSRNG) generiert. AAOS liest dann die Eigenschaft bei nachfolgenden Starts.

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

  1. ( Empfohlen ) Seed wird von einer ECU im Fahrzeug physisch gut geschützt gespeichert. Wenn nicht, ist es trivial, sowohl das IVI als auch die ECU aus dem Fahrzeug zu ziehen.
  2. ( Empfohlen ) IVI und ECU sollten sich gegenseitig authentifizieren, um den Seed auszutauschen, um Spoofing-Anforderungen für den Seed von der ECU zu verhindern.
  3. ( Empfohlen ) Seed sollte über einen sicheren Kanal übertragen werden, um sich vor CAN-Bus-Sniffing zu schützen.

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

# feed vehicle binding seed to vold
exec_start vold_seed_binding

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

Konfigurieren der fahrzeugbasierten Bindung

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

Das Verhalten von Prompt und Wipe Data kann in builtins.cpp geändert werden:

  1. Ändern prompt_and_wipe_data in wipe_data . Das Gerät löscht und startet dann ohne Aufforderung neu.
  2. Die Eingabeaufforderung ist in recovery.cpp enthalten.

    Abbildung 2. Eingabeaufforderung

Testen der fahrzeugbasierten Bindung

Mock-Tests

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

So führen Sie diesen Scheintest aus:

attest libvehicle_binding_util_test

Integrationstest

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

So führen Sie diesen Integrationstest aus:

atest vehicle_binding_integration_test