Questa pagina descrive come attivare le funzionalità del seed di crittografia dell'associazione basata sul veicolo.
Panoramica
Lo scopo principale della funzionalità del seed di associazione del veicolo è proteggere ulteriormente la privacy dell'utente proteggendo i dati del sistema di infotainment in-vehicle (IVI) dalla rimozione dal veicolo. Questo viene fatto associando le chiavi di crittografia dello spazio di archiviazione ad un'altra unità di controllo elettronico (ECU) in modo che, se l'IVI viene rimosso e posizionato in un altro veicolo (o eseguito su un banco di prova), i dati utente criptati sull'IVI non possano essere decriptati.
Per associare le chiavi di crittografia dei file, Vold mescola un seed specifico del veicolo con la derivazione della chiave di crittografia delle chiavi in modo che le chiavi siano univoche e associate fisicamente al veicolo. Il seed è un array di byte, exposto come nuova proprietà VHAL (Vehicle Hardware Abstraction Layer) dall'OEM,STORAGE_ENCRYPTION_BINDING_SEED
. Le autorizzazioni di questa proprietà sono limitate in modo che possa essere eseguita una query solo da demoni di sistema con privilegi.
Diagramma dell'architettura
Questa figura illustra l'architettura dell'integrazione vincolata al veicolo:
Figura 1. Architettura legata al veicolo.
Attivare l'associazione in base al veicolo
L'associazione della crittografia dello spazio di archiviazione al veicolo deve essere attivata esplicitamente e non può essere attivata o disattivata senza eseguire un ripristino dei dati di fabbrica. Ciò significa che un aggiornamento over-the-air (OTA) non può attivare la funzionalità senza resettare il dispositivo. Un OEM potrebbe scegliere di attivare la funzionalità al momento dell'upgrade se esegue anche il ripristino dei dati di fabbrica del dispositivo. Ad esempio, durante una visita di servizio.
Questa funzionalità è attivata supportando la proprietà STORAGE_ENCRYPTION_BINDING_SEED
nell'HAL del veicolo fornito dal fornitore. Questa proprietà contiene una stringa di byte di 16 byte ed è prevista per essere mantenuta su un'ECU separata dall'IVI. La proprietà viene impostata inizialmente dal sistema operativo Android Automotive (AAOS), che la genera utilizzando un generatore di numeri casuali crittograficamente sicuro (CSRNG). AAOS legge quindi la proprietà ai successivi avvii.
Il modo in cui VHAL memorizza il valore di STORAGE_ENCRYPTION_BINDING_SEED
è specifico del fornitore.
Ecco alcuni consigli generali per proteggere il seme:
- (Consigliato) Il seed viene memorizzato da un'ECU nel veicolo che è fisicamente ben protetta. In caso contrario, è facile rimuovere sia l'IVI sia l'ECU dal veicolo.
- (Consigliato) L'IVI e l'ECU devono autenticarsi reciprocamente per scambiarsi il seed al fine di impedire le richieste di spoofing del seed da parte dell'ECU.
- (Consigliato) Il seed deve essere trasmesso utilizzando un canale sicuro per proteggersi dall'analisi del bus CAN.
Inoltre, aggiungi quanto segue per assicurarti che il fornitore init.target.rc
su
late-fs
prima di mount_all --late
:
# feed vehicle binding seed to vold
exec_start vold_seed_binding
L'HAL del veicolo deve essere avviato in early_hal
anziché in hal now
.
Non è possibile accedere a qualsiasi proprietà di sistema persist.*
in early-hal
perché la partizione /data
non è ancora montata.
Configurare l'associazione basata sul veicolo
Se il seed ECU non corrisponde, il dispositivo si riavvia in modalità di ripristino e chiede all'utente di cancellare la partizione /data
o di riprovare.
Il comportamento dei dati di richiesta e di reset può essere modificato in builtins.cpp:
prompt_and_wipe_data
modificato inwipe_data
. Il dispositivo viene resettato e riavviato senza richiesta.- Il messaggio della richiesta è contenuto in
recovery.cpp.
Figura 2. Messaggio di richiesta.
Testare l'associazione basata sul veicolo
Test di simulazione
In packages/services/Car/cpp/security/vehicle_binding_util/tests
è disponibile un test simulato.
Per eseguire questo test simulato:
attest libvehicle_binding_util_test
Test di integrazione
In packages/services/Car/cpp/security/vehicle_binding_util/tests
è disponibile un test di atest.
Per eseguire questo test di integrazione:
atest vehicle_binding_integration_test