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

Cette page explique comment activer les fonctionnalités de graine de chiffrement de liaison basé sur les véhicules.

Présentation

L'objectif principal de la fonctionnalité de liaison de véhicule est de mieux protéger la confidentialité de l'utilisateur en protéger les données du système d'infoloisirs embarqués (IVI) contre le retrait du véhicule ; C'est en liant les clés de chiffrement du stockage à une autre unité de contrôle électronique (ECU), de sorte que si le IVI est retiré et placé dans un autre véhicule (ou exécuté sur un banc d'essai), les données utilisateur chiffrées sur le Impossible de déchiffrer l'IVI.

Pour lier des clés de chiffrement de fichiers, Vold associe une graine spécifique au véhicule au chiffrement par clé. des clés de sorte qu'elles soient uniques et liées physiquement au véhicule. La graine est un tableau d'octets, exposées 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 sorte que il ne peut être interrogé que par des daemons système privilégiés.

Schéma de l'architecture

Cette figure illustre l'architecture d'intégration liée à un véhicule:

Figure 1 : Architecture liée aux véhicules.

Activer la liaison basée sur les véhicules

L'association du chiffrement du stockage au véhicule doit être explicitement activée et ne peut pas être activée sans avoir à rétablir la configuration d'usine. Cela signifie qu'une mise à jour Over The Air (OTA) ne peut pas activer la fonctionnalité sans aussi effacer les données de l’appareil. Un OEM peut choisir d'activer la fonctionnalité au moment s'il rétablit également la configuration d'usine de l'appareil. (lors d'une visite de service, par exemple).

Cette fonctionnalité est compatible avec 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 de 16 octets. devraient être conservés sur un ECU distinct de l’IVI. La propriété est initialement définie par Android Automotive OS (AAOS), qui le génère à l'aide d'un nombre aléatoire sécurisé de manière cryptographique Générateur (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 est spécifique au fournisseur. Voici quelques recommandations générales pour protéger la graine:

  1. (Recommandé) La graine est stockée par une UCU dans le véhicule physiquement bien protégées. Si ce n'est pas le cas, il est triviale que l'IVI et l'ECU soient tous deux retirés du véhicule.
  2. (Recommandé) IVI et ECU doivent s'authentifier mutuellement pour échanger la graine vers empêcher les requêtes de spoofing pour la source à partir de l’ECU.
  3. (Recommandé) La graine doit être transmise via un canal sécurisé pour empêcher reniflage du bus CAN.

Ajoutez également ce qui suit pour vous assurer 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 HAL du véhicule doit être démarré dans early_hal au lieu de hal now. Impossible d'accéder à une propriété système persist.* dans early-hal, car le La partition /data n'est pas encore installée.

Configurer la liaison basée sur un véhicule

Si la graine de l'ECU ne correspond pas, l'appareil redémarre et lance la récupération, et l'utilisateur est invité à effacer la partition /data ou réessayez.

Vous pouvez modifier le comportement de requête et d'effacement des données dans builtins.cpp:

  1. Remplacez prompt_and_wipe_data par wipe_data. L’appareil efface et puis redémarre sans invite.
  2. Le message de requête est contenu recovery.cpp.

    Figure 2. Message d'invite.

Tester la liaison basée sur un véhicule

Tests de simulation

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

Pour exécuter ce test fictif:

attest libvehicle_binding_util_test

Tests d'intégration

Un test d'attestation 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