Cette page explique comment activer les fonctionnalités de graine de chiffrement de liaison basées sur le véhicule.
Présentation
L'objectif principal de la fonctionnalité de grain de liaison du véhicule est de mieux protéger la confidentialité de l'utilisateur en protégeant les données du système d'infodivertissement embarqué (IVI) contre leur suppression du véhicule. Pour ce faire, les clés de chiffrement de stockage sont associées à un autre ECU (Electronic Control Unit) de sorte que si l'IVI est retirée et placée dans un autre véhicule (ou exécutée sur un banc d'essai), les données utilisateur chiffrées sur l'IVI ne peuvent pas être déchiffrées.
Pour lier les clés de chiffrement de fichiers, Vold associe un séneçon spécifique au véhicule à la dérivation de la clé de chiffrement de clé 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 sorte qu'elle ne peut être interrogée que par des démons système privilégiés.
Schéma de l'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
L'association du chiffrement de l'espace de stockage au véhicule doit être explicitement activée et ne peut pas être activée ou désactivée sans rétablir la configuration d'usine. Cela signifie qu'une mise à jour OTA (Over-The-Air) ne peut pas activer la fonctionnalité sans effacer également l'appareil. Un OEM peut choisir d'activer la fonctionnalité lors de la mise à niveau s'il rétablit également la configuration d'usine de l'appareil. (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 de 16 octets de longueur et doit être conservée sur un ECU distinct de l'IVI. La propriété est initialement définie par Android Automotive OS (AAOS), qui la génère à l'aide d'un générateur de nombres aléatoires sécurisés cryptographiquement (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 propre au fournisseur.
Voici quelques recommandations générales pour protéger la graine:
- (Recommandé) La graine est stockée par un ECU dans le véhicule, qui est physiquement bien protégé. Dans le cas contraire, il est facile de retirer l'IVI et l'ECU du véhicule.
- (Recommandé) L'IVI et l'ECU doivent s'authentifier mutuellement pour échanger le grain afin d'éviter les requêtes d'usurpation d'identité de la graine de l'ECU.
- (Recommandé) Le grain doit être transmis via un canal sécurisé pour éviter le piratage du bus CAN.
De plus, ajoutez ce qui suit pour vous assurer que le fournisseur init.target.rc
sur late-fs
précède mount_all --late
:
# feed vehicle binding seed to vold
exec_start vold_seed_binding
Le HAL du véhicule doit être démarré en early_hal
au lieu de hal now
.
Aucune propriété système persist.*
ne peut être accessible dans early-hal
, car la partition /data
n'est pas encore montée.
Configurer la liaison basée sur le véhicule
Si le grain 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.
Vous pouvez modifier le comportement des données d'invite et de suppression dans builtins.cpp:
- Remplacez
prompt_and_wipe_data
parwipe_data
. L'appareil efface les données et redémarre sans invite. - Le message d'invite est contenu dans recovery.cpp.
Figure 2. Message d'invite.
Tester la liaison basée sur le véhicule
Test 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 atest 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