Utiliser le cryptage des fichiers liés au véhicule

Cette page décrit comment activer les fonctionnalités de départ de chiffrement de liaison basées sur le véhicule.

Aperçu

L'objectif principal de la fonction d'amorçage de liaison du véhicule est de protéger davantage la vie privée de l'utilisateur en protégeant les données du système d'infodivertissement embarqué (IVI) contre tout retrait du véhicule. Cela se fait en liant les clés de cryptage de stockage à une autre unité de contrôle électronique (ECU), de sorte que si l'IVI est retiré et placé dans un autre véhicule (ou exécuté sur un banc d'essai), les données utilisateur cryptées sur l'IVI ne peuvent pas être déchiffrées.

Pour lier les clés de chiffrement de fichiers, Vold mélange une graine spécifique au véhicule avec une dérivation de clé de chiffrement afin que les clés soient uniques et liées physiquement au véhicule. La graine est un tableau d'octets, exposé en tant que nouvelle propriété VHAL (Vehicle Hardware Abstraction Layer) par l'OEM, STORAGE_ENCRYPTION_BINDING_SEED . Les autorisations de cette propriété sont limitées de telle sorte qu'elle ne peut être interrogée que par des démons système privilégiés.

Schéma d'architecture

Cette figure illustre l'architecture de l'intégration liée au véhicule :

Figure 1. Architecture liée au véhicule.

Activer la liaison basée sur le véhicule

La liaison du cryptage du stockage au véhicule doit être explicitement activée et ne peut pas être activée ou désactivée sans effectuer une réinitialisation d'usine. Cela signifie qu'une mise à jour Over-the-Air (OTA) ne peut pas activer la fonctionnalité sans également effacer l'appareil. Un OEM peut choisir d'activer la fonctionnalité lors de la mise à niveau s'il réinitialise également l'appareil aux paramètres d'usine. Par exemple, lors d'une visite de service.

Cette fonctionnalité est activée en prenant en charge la propriété STORAGE_ENCRYPTION_BINDING_SEED dans le HAL du véhicule fourni par le fournisseur. Cette propriété contient une chaîne d'octets d'une longueur de 16 octets et devrait être conservée sur un ECU distinct de l'IVI. La propriété est initialement définie par le système d'exploitation Android Automotive (AAOS), qui la génère à l'aide d'un générateur de nombres aléatoires cryptographiquement sécurisé (CSRNG). AAOS lit ensuite la propriété lors des démarrages suivants.

La manière dont le VHAL stocke la valeur de STORAGE_ENCRYPTION_BINDING_SEED dépend du fournisseur. Nous avons des recommandations générales pour protéger les semences :

  1. ( Recommandé ) Les semences sont stockées par une ECU dans le véhicule qui est physiquement bien protégé. Dans le cas contraire, il est trivial de retirer l'IVI et l'ECU du véhicule.
  2. ( Recommandé ) IVI et ECU doivent s'authentifier mutuellement pour échanger la graine afin d'éviter les demandes d'usurpation d'identité pour la graine provenant de l'ECU.
  3. ( Recommandé ) Les graines doivent être transmises en utilisant un canal sécurisé pour se prémunir contre le reniflage du bus CAN.

De plus, ajoutez ce qui suit pour garantir que le fournisseur init.target.rc sur late-fs avant mount_all --late :

# feed vehicle binding seed to vold
exec_start vold_seed_binding

Le véhicule HAL devrait être démarré dans early_hal au lieu de hal now . Aucune propriété système persist.* n'est accessible au early-hal car la partition /data n'est pas encore montée.

Configurer la liaison basée sur le véhicule

Si la valeur de départ de l'ECU ne correspond pas, l'appareil redémarre en mode récupération et invite l'utilisateur à effacer la partition /data ou à réessayer.

Le comportement des invites et de l'effacement des données peut être modifié dans Builtins.cpp :

  1. Remplacez prompt_and_wipe_data par wipe_data . L'appareil efface puis redémarre sans invite.
  2. Le message d'invite est contenu dans recovery.cpp .

    Figure 2. Message d'invite.

Liaison basée sur un véhicule de test

Tests simulés

Un test simulé est fourni dans packages/services/Car/cpp/security/vehicle_binding_util/tests .

Pour exécuter ce test simulé :

attest libvehicle_binding_util_test

Tests d'intégration

Un test de test est fourni dans packages/services/Car/cpp/security/vehicle_binding_util/tests .

Pour exécuter ce test d'intégration :

atest vehicle_binding_integration_test