État et provisionnement du réseau maillé

Le mode de démarrage SDV définit le comportement de l'agent SDV Service Discovery dans une VM SDV lorsqu'il tente de se connecter à d'autres agents Service Discovery (s'exécutant dans d'autres VM SDV) pour établir un maillage sécurisé. Ce concept est semblable à celui de l'état de l'appareil existant dans le démarrage validé Android.

Le mode de démarrage SDV est utilisé lors du provisionnement ou de la mise à jour du magasin de confiance de la VM du véhicule (VVM Trust Store, également appelé vvmtruststore).

Comportement du maillage sécurisé SDV

Le maillage Service Discovery se trouve dans l'un des états suivants, en fonction des valeurs de démarrage qu'il reçoit : Normal, Warning ou Fatal.

Dans les véhicules de production livrés aux clients, le maillage sécurisé SDV doit être à l'état Normal. Le maillage nécessite une intervention de diagnostic pour passer de l'état Normal à l'état Warning. Dans un environnement de production (par exemple, pas de développement ni de débogage), l'état Warning ne se produit que lors du provisionnement.

Fatal est une défaillance fondamentale, semblable à une image system_ext qui échoue à la validation de la signature dans le bootloader Android. Si le maillage sécurisé SDV passe de l'état Normal à l'état Fatal uniquement en raison d'une mise à jour OTA (Over-The-Air), la mise à jour est considérée comme incorrecte et le maillage revient à la version Normal d'origine.

Les sections suivantes décrivent les états plus en détail.

Normal

  • Le démarrage du système est SECURE du point de vue de Service Discovery.
  • Service Discovery ne se connecte qu'aux pairs qui ont démarré de manière sécurisée. Une pair démarrée de manière sécurisée implique que le maillage sécurisé SDV est également sécurisé.

Warning

  • Le démarrage du système a peut-être été compromis, car certaines validations sont désactivées.
  • Service Discovery ne se connecte qu'aux pairs qui partagent exactement le même ensemble de validations désactivées, ce qui garantit que toutes les pairs du maillage sécurisé SDV partagent des propriétés de sécurité identiques.
  • Le succès du démarrage d'une pair ne peut pas être vérifié en raison de défaillances locales ou de fonctionnalités désactivées.
  • En dehors d'un environnement ou d'une situation de développement, cela a les implications suivantes :
    • Les données utilisateur ne doivent pas être disponibles. Autrement dit, elles ne doivent pas être transmises ni affectées par la communication sur le maillage sécurisé SDV.
    • Seuls les services nécessaires aux flux de provisionnement doivent être disponibles lorsque le maillage est dans cet état.

Fatal

  • Une erreur critique lors des étapes de démarrage du système.
  • Il existe au moins une défaillance ou une erreur fondamentale qui empêche l'agent de découverte des services d'établir un réseau maillé. Les services locaux ne peuvent pas communiquer avec les services à distance.
  • Le démarrage du système est UNSECURE du point de vue de Service Discovery.

Mode de démarrage SDV

Le mode de démarrage SDV peut prendre deux valeurs : LOCKED et UNLOCKED. Pour l'établissement du maillage Service Discovery, LOCKED indique que les erreurs de validation sont fatales, et UNLOCKED signifie qu'elles ne le sont pas.

Condition Mode de démarrage SDV
UNLOCKED LOCKED
Magasin de confiance VVM local vide Warning Fatal
Chaîne DICE locale manquante Fatal Fatal
Échec de la validation de la chaîne DICE locale Warning Fatal
Correspondance entre le mode SDV local et le mode AVB Consultez le tableau dans Correspondance entre le mode SDV local et le mode AVB
Comparaison de la valeur du mode de l'appareil à distance Consultez le tableau dans Comparaison de la valeur du mode de l'appareil à distance
Échec de la correspondance uds_pubs à distance Warning Fatal
Échec de la validation de la chaîne DICE à distance (à l'aide de stratégies DICE) Warning Fatal
Échec de l'établissement de liaison d'authentification à distance Fatal Fatal

Correspondance entre le mode SDV local et le mode AVB

Le tableau suivant montre comment le mode AVB et le mode de démarrage SDV affectent le comportement du maillage sécurisé SDV. Les couleurs sont définies dans la section d'intégration spécifique à Android de la documentation AVB.

Mode AVB x mode de démarrage SDV Mode de démarrage SDV
UNLOCKED LOCKED
AVB LOCKED Vert Warning Normal
Jaune Fatal Fatal
AVB UNLOCKED Orange Warning Fatal

Valeur du mode de l'appareil

Dans une chaîne DICE, chaque certificat CDI possède une valeur de mode. Cette valeur décrit l'état de sécurité de cette couche en fonction de son entrée de configuration. Pour exprimer la position de sécurité de tous les logiciels de l'appareil, la spécification SDV définit une valeur de mode de l'appareil. Cette valeur dérive de la valeur de mode de toutes les étapes CDI dans les chaînes DICE pertinentes pour une VM SDV donnée (c'est-à-dire Android HLOS et Secure World) et utilise l'énumération suivante :

enum DeviceMode {
  NotConfigured = 0,
  Recovery = 1,
  Debug = 2,
  Normal = 3,
}

Algorithme

L'algorithme de calcul de la valeur du mode de l'appareil est le suivant :

  1. Spécifiez deviceMode comme DeviceMode::Normal.
  2. Spécifiez diceChainList comme la liste des chaînes DICE pertinentes pour une VM SDV.
  3. Pour chaque diceChain dans diceChainList:
    1. Spécifiez cdiList comme la liste des certificats CDI dans diceChain :
    2. Pour chaque cdiCert dans cdiList :
      1. Spécifiez cdiDeviceMode comme le DeviceMode correspondant à cdiCert.mode.
      2. Définissez deviceMode sur min(deviceMode, cdiDeviceMode).
  4. Renvoyez deviceMode.

Comparaison de la valeur du mode de l'appareil à distance

Un agent Service Discovery ne se connecte qu'à d'autres agents qui ont la même valeur de mode de l'appareil.

La valeur du mode Appareil garantit qu'un réseau maillé ne peut pas avoir de membres avec des propriétés de sécurité différentes. Le maillage résultant présente une position de sécurité uniforme entre tous ses membres.

Valeur du mode de l'appareil À distance
Non configuré Déboguer Récupération Normal
Local Non configuré Fatal Fatal Fatal Fatal
Déboguer Fatal Warning Fatal Fatal
Récupération Fatal Fatal Warning Fatal
Normal Fatal Fatal Fatal Normal

Flux de provisionnement en usine

Il s'agit du flux de provisionnement sur la chaîne de montage du véhicule, où l'infrastructure à clé publique est supposée ne pas être disponible. Ce flux dépend d'une valeur de 32 octets stockée dans une mémoire programmable unique (OTP) appelée "VVM Factory Trust" ou vvmfactorytrust. Lorsqu'elle est définie, cette valeur est transmise au noyau en tant que paramètre nommé androidboot.sdv.vvmfactorytrust.

Toutes les VM d'une ECU doivent avoir le même mode de démarrage SDV et la même VVM Factory Trust.

État initial

Au départ, toutes les ECU sont en mode de démarrage SDV UNLOCKED mode, avec une VVM Factory Trust et un VVM Trust Store vides, à l'exception des uds_certs présents sur le vvmtruststore. La figure 1 montre un exemple dans lequel trois VM SDV (VM-A, VM-B et VM-C) sont distribuées dans deux ECU distinctes (ECU-0 et ECU-1) :

Exemple de provisionnement en usine, état initial

Figure 1. Provisionnement en usine, état initial.

Étape 1 : Exécutez sdv_provisioning_tool

Démarrez toutes les VM de toutes les ECU.

Sur chaque VM, exécutez sdv_provisioning_tool.

  1. L'outil communique avec l'agent Service Discovery local et attend qu'il signale que le maillage sécurisé SDV est terminé et que l'agent a écrit la liste des clés publiques UDS dans /vvmtruststore/uds_pubs.
  2. Lorsque cela se produit, l'outil obtient le hachage du /vvmtruststore/uds_pubs qui vient d'être écrit et l'affiche.

Provisionnement en usine, étape 1

Figure 2. Provisionnement en usine, étape 1.

Étape 2 : Écrivez la VVM Factory Trust

Sur une VM de chaque ECU :

  1. Écrivez le hachage de /vvmtruststore/uds_pubs qui a été généré par sdv_provisioning_tool à l'étape précédente dans la VVM Factory Trust. La manière dont cette écriture est effectuée est spécifique à l'OEM ou au fournisseur et ne fait pas partie du champ d'application de cette spécification.

Provisionnement en usine, étape 2

Figure 3. Provisionnement en usine, étape 2.

Étape 3 : Redémarrez en mode de démarrage SDV verrouillé

Redémarrez toutes les VM de toutes les ECU en mode de démarrage SDV LOCKED.

L'agent Service Discovery fait confiance aux VM des ECU avec les clés publiques UDS listées dans uds_pubs, car le hachage de ce fichier correspond à la VVM Factory Trust.

Étant donné que les ECU ont été provisionnées ensemble, elles sont liées de manière permanente et peuvent être considérées comme un seul élément matériel du point de vue de la validation de la chaîne DICE.

Provisionnement en usine, étape 3

Figure 4. Provisionnement en usine, étape 3.

Flux de remplacement de pièces

Il s'agit du flux de provisionnement dans un atelier de réparation automobile ou un garage agréé, où une ECU défectueuse doit être remplacée par une nouvelle ECU non provisionnée.

Ce flux dépend des certificats UDS émis directement par l'autorité racine indiquée dans vvmconfig ou indirectement, via une chaîne d'autorités intermédiaires.

État initial

Toutes les VM sont déjà provisionnées en usine et s'exécutent en mode de démarrage SDV LOCKED.

La figure 5 montre un exemple dans lequel l'ECU-0 fonctionne mal et doit être remplacée :

Remplacement de pièces, état initial

Figure 5. Remplacement de pièces, état initial.

Étape 1 : Installez la nouvelle ECU

Installez la nouvelle ECU, qui est dans un état vide et non provisionné.

Sur la figure 6, lorsque l'ECU-2 (l'ECU de remplacement) est mise sous tension, il existe deux maillages sécurisés SDV disjoints : l'un à l'état Warning et l'autre à l'état Normal. Les deux maillages sécurisés SDV sont incomplets.

Remplacement de pièces, étape 1

Figure 6. Remplacement de pièces, étape 1.

Étape 2 : Redémarrez en mode de démarrage SDV déverrouillé

Redémarrez toutes les VM de toutes les ECU en mode de démarrage SDV UNLOCKED.

Sur la figure 7, la VM-B et la VM-C rejoignent le maillage sécurisé SDV Warning, qui est complet.

Remplacement de pièces, étape 2

Figure 7. Remplacement de pièces, étape 2.

Étape 3 : Exécutez sdv_provisioning_tool

Sur chaque VM, exécutez sdv_provisioning_tool.

L'outil communique avec l'agent de découverte des services local et attend qu'il signale que le réseau maillé sécurisé SDV est terminé et que l'agent a écrit la liste des clés publiques UDS dans /vvmtruststore/uds_pubs.

Lorsque cela se produit, l'outil obtient le hachage du /vvmtruststore/uds_pubs qui vient d'être écrit et l'affiche, mais ce hachage n'est pas utilisé dans ce flux.

Remplacement de pièces, étape 3

Figure 8. Remplacement de pièces, étape 3.

Étape 4 : Installez les certificats UDS

  • Extrayez /vvmtruststore/uds_pubs d'une VM SDV arbitraire. Peu importe laquelle, car elle est identique pour toutes les VM du même maillage sécurisé SDV.
  • Récupérez les certificats de provisionnement pour toutes les clés publiques UDS listées dans ce /vvmtruststore/uds_pubs.
    • Cette étape implique généralement l'envoi des clés publiques UDS extraites (ou du fichier /vvmtruststore/uds_pubs) à un serveur de provisionnement à distance. Le serveur récupère des certificats préexistants ou en génère de nouveaux en comparant les clés publiques reçues à une base de données de clés publiques UDS connues, créée lors de la fabrication de l'ECU.
  • Écrivez le /vvmtruststore/uds_certs de chaque VM SDV.

Remplacement de pièces, étape 4

Figure 9. Remplacement de pièces, étape 4.

Étape 5 : Redémarrez en mode de démarrage SDV verrouillé

Redémarrez toutes les VM en mode de démarrage SDV LOCKED.

Si le maillage sécurisé SDV est incomplet, revenez à l'étape 2.

Remplacement de pièces, étape 5

Figure 10. Remplacement de pièces, étape 5.