Auf dieser Seite wird beschrieben, wie Sie die Seed-Funktionen für die fahrzeugbasierte Bindungsverschlüsselung aktivieren.
Ü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 aktivieren
Die Bindung der Speicherverschlüsselung an das Fahrzeug muss explizit aktiviert werden und kann nicht ohne einen Werksreset aktiviert oder deaktiviert werden. Das 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:
- ( 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.
- ( Empfohlen ) IVI und ECU sollten sich gegenseitig authentifizieren, um den Seed auszutauschen, um Spoofing-Anfragen für den Seed von der ECU zu verhindern.
- ( 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 Anbindung 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:
- Ändern Sie
prompt_and_wipe_data
inwipe_data
. Das Gerät löscht die Daten und startet dann ohne Aufforderung neu. - Die Eingabeaufforderungsmeldung ist in der Datei „recovery.cpp“ enthalten.
Abbildung 2. Aufforderungsnachricht.
Fahrzeugbasierte Bindung testen
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