Utilizza la crittografia dei file associati al veicolo

Questa pagina descrive come abilitare le funzionalità di seed di crittografia vincolante basata sul veicolo.

Panoramica

L'obiettivo principale della funzione seed vincolante del veicolo è proteggere ulteriormente la privacy dell'utente proteggendo i dati sul sistema di infotainment di bordo (IVI) dalla rimozione dal veicolo. Ciò viene fatto vincolando le chiavi di crittografia dell'archiviazione a qualche altra unità di controllo elettronico (ECU) in modo tale che se l'IVI viene rimosso e posizionato in un altro veicolo (o eseguito su un banco di prova), i dati utente crittografati sull'IVI non possono essere decrittografati.

Per associare le chiavi di crittografia dei file, Vold mescola un seme specifico del veicolo con una chiave di crittografia derivata in modo che le chiavi siano univoche e legate fisicamente al veicolo. Il seed è un array di byte, esposto come nuova proprietà VHAL (Vehicle Hardware Abstraction Layer) dall'OEM, STORAGE_ENCRYPTION_BINDING_SEED . I permessi di questa proprietà sono limitati in modo tale che possa essere interrogata solo da demoni di sistema privilegiati.

Diagramma dell'architettura

Questa figura illustra l'architettura dell'integrazione legata al veicolo:

Figura 1. Architettura legata al veicolo.

Abilita l'associazione basata sul veicolo

Il collegamento della crittografia di archiviazione al veicolo deve essere abilitato esplicitamente e non può essere attivato o disattivato senza eseguire un ripristino delle impostazioni di fabbrica. Ciò significa che un aggiornamento Over-the-Air (OTA) non può abilitare la funzionalità senza cancellare anche i dati del dispositivo. Un OEM può scegliere di abilitare la funzionalità al momento dell'aggiornamento se ripristina anche il dispositivo in fabbrica. Ad esempio, durante una visita di servizio.

Questa funzionalità è abilitata supportando la proprietà STORAGE_ENCRYPTION_BINDING_SEED nell'HAL del veicolo fornito dal fornitore. Questa proprietà contiene una stringa di byte lunga 16 byte e si prevede che venga mantenuta su un'ECU separata dall'IVI. La proprietà viene inizialmente impostata dal sistema operativo Android Automotive (AAOS), che la genera utilizzando un generatore di numeri casuali crittograficamente sicuro (CSRNG). AAOS legge quindi la proprietà agli avvii successivi.

Il modo in cui VHAL memorizza il valore di STORAGE_ENCRYPTION_BINDING_SEED dipende dal fornitore. Abbiamo raccomandazioni generali per proteggere il seme:

  1. ( Consigliato ) Il seme viene immagazzinato da un'ECU nel veicolo fisicamente ben protetto. In caso contrario, è banale estrarre sia l'IVI che l'ECU dal veicolo.
  2. ( Consigliato ) IVI ed ECU dovrebbero autenticarsi reciprocamente per scambiare il seme per evitare richieste di spoofing del seme dall'ECU.
  3. ( Consigliato ) Il seed deve essere trasmesso utilizzando un canale sicuro per proteggersi dallo sniffing del bus CAN.

Inoltre, aggiungi quanto segue per garantire 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 dovrebbe 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.

Configura l'associazione basata sul veicolo

Se il seed dell'ECU non corrisponde, il dispositivo si riavvia in modalità di ripristino e richiede all'utente di cancellare la partizione /data o riprovare.

Il comportamento di richiesta e cancellazione dei dati può essere modificato in builtins.cpp :

  1. Cambia prompt_and_wipe_data in wipe_data . Il dispositivo cancella i dati e quindi si riavvia senza alcuna richiesta.
  2. Il messaggio di richiesta è contenuto in recovery.cpp .

    Figura 2. Messaggio di richiesta.

Testare l'associazione basata sul veicolo

Test simulati

Un test simulato è fornito in packages/services/Car/cpp/security/vehicle_binding_util/tests .

Per eseguire questo test simulato:

attest libvehicle_binding_util_test

Test d'integrazione

Un test atest è fornito in packages/services/Car/cpp/security/vehicle_binding_util/tests .

Per eseguire questo test di integrazione:

atest vehicle_binding_integration_test