Auf dieser Seite wird beschrieben, wie Sie die Funktionen für die verschlüsselte Bindung an ein Fahrzeug aktivieren.
Übersicht
Das primäre Ziel der Seed-Funktion für die Fahrzeugbindung besteht darin, die Privatsphäre der Nutzer weiter zu schützen, indem Daten im Infotainmentsystem des Fahrzeugs vor dem Entfernen aus dem Fahrzeug geschützt werden. Dazu werden Speicherverschlüsselungsschlüssel an eine andere elektronische Steuereinheit (ECU) gebunden. Wenn das IVI entfernt und in ein anderes Fahrzeug eingebaut oder auf einer Testbank ausgeführt wird, können verschlüsselte Nutzerdaten auf dem IVI nicht entschlüsselt werden.
Zum Binden von Dateiverschlüsselungsschlüsseln mischt Vold einen fahrzeugspezifischen Seed in die Schlüsselableitung der Schlüsselverschlüsselung ein, damit die Schlüssel eindeutig und physisch an das Fahrzeug gebunden sind. Der Seed ist ein Byte-Array, das vom OEM als neue VHAL-Property (Vehicle Hardware Abstraction Layer) freigegeben wird,STORAGE_ENCRYPTION_BINDING_SEED
. Die Berechtigungen für diese Property sind so eingeschränkt, dass sie nur von privilegierten Systemdämonen abgefragt werden kann.
Architekturdiagramm
Diese Abbildung zeigt 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 nur aktiviert oder deaktiviert werden, wenn das Fahrzeug auf die Werkseinstellungen zurückgesetzt wird. Das bedeutet, dass die Funktion nicht über ein Over-the-Air-Update (OTA) aktiviert werden kann, ohne das Gerät zu löschen. Ein OEM kann die Funktion beim Upgrade aktivieren, wenn er das Gerät auch auf die Werkseinstellungen zurücksetzt. Beispiel: bei einem Servicebesuch.
Diese Funktion wird durch die Unterstützung der Eigenschaft STORAGE_ENCRYPTION_BINDING_SEED
in der vom Anbieter bereitgestellten HAL des Fahrzeugs aktiviert. Diese Eigenschaft enthält einen Byte-String mit 16 Byte Länge und wird voraussichtlich auf einem ECU getrennt vom IVI gespeichert. Die Property wird zuerst vom Android Automotive OS (AAOS) festgelegt, das sie mit einem kryptografisch sicheren Zufallszahlengenerator (Cryptographically Secure Random Number Generator, CSRNG) generiert. AAOS liest die Property dann bei nachfolgenden Starts.
Wie der VHAL den Wert von STORAGE_ENCRYPTION_BINDING_SEED
speichert, ist anbieterspezifisch.
Wir haben allgemeine Empfehlungen zum Schutz des Startcodes:
- (Empfohlen) Der Seed wird von einer ECU im Fahrzeug gespeichert, die physisch gut geschützt ist. Andernfalls können sowohl das IVI als auch das Steuergerät einfach aus dem Fahrzeug ausgebaut werden.
- (Empfohlen) IVI und ECU sollten sich gegenseitig authentifizieren, um den Seed auszutauschen und so Spoofing-Anfragen für den Seed von der ECU zu verhindern.
- (Empfohlen) Der Seed sollte über einen sicheren Kanal übertragen werden, um CAN-Bus-Sniffing zu verhindern.
Fügen Sie außerdem Folgendes hinzu, damit der Anbieter init.target.rc
auf late-fs
vor mount_all --late
angezeigt wird:
# feed vehicle binding seed to vold
exec_start vold_seed_binding
Die HAL des Fahrzeugs sollte in early_hal
statt in hal now
gestartet werden.
Auf keine persist.*
-Systemeigenschaft kann in early-hal
zugegriffen werden, da die /data
-Partition noch nicht bereitgestellt ist.
Fahrzeugbasierte Bindung konfigurieren
Wenn der ECU-Seed nicht übereinstimmt, wird das Gerät neu gestartet und der Nutzer wird aufgefordert, die /data
-Partition zu löschen oder es noch einmal zu versuchen.
Das Verhalten von Aufforderungen und dem Löschen von Daten kann in builtins.cpp geändert werden:
- Ändern Sie
prompt_and_wipe_data
inwipe_data
. Das Gerät wird gelöscht und dann ohne Aufforderung neu gestartet. - Die Aufforderungsnachricht befindet sich in recovery.cpp.
Abbildung 2: Prompt-Nachricht
Fahrzeugbasierte Bindung testen
Mock-Tests
In packages/services/Car/cpp/security/vehicle_binding_util/tests
finden Sie einen Übungstest.
So führen Sie diesen Simulationstest aus:
attest libvehicle_binding_util_test
Integrationstests
Ein Test ist in packages/services/Car/cpp/security/vehicle_binding_util/tests
verfügbar.
So führen Sie diesen Integrationstest aus:
atest vehicle_binding_integration_test