État et provisionnement du réseau maillé

Le mode d'amorçage 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é. Cela ressemble au concept existant d'état de l'appareil du démarrage validé Android. Le mode de démarrage SDV peut être LOCKED ou UNLOCKED.

Le mode Boot SDV est utilisé lors du provisionnement ou de la mise à jour du magasin de confiance des VM du véhicule.

Comportement du maillage sécurisé SDV

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

Une voiture n'est remise à son propriétaire que lorsque son maillage est à l'état Normal. Le réseau maillé nécessite une intervention de diagnostic pour passer d'un état Normal à un é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 à l'échec de la validation de la signature d'une image system_ext dans le bootloader Android. Si le maillage SDV passe de Normal à Fatal uniquement en raison d'une mise à jour OTA (Over-The-Air), la mise à jour est considérée comme mauvaise 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 la découverte de services.
  • La découverte de services ne se connecte qu'aux pairs qui ont démarré de manière sécurisée. Un pair démarré de manière sécurisée implique que le maillage sécurisé SDV est également sécurisé.

 Avertissement

  • Le démarrage du système a peut-être été compromis, car certaines vérifications sont désactivées.
  • La découverte de services ne se connecte qu'aux pairs qui ont également les mêmes vérifications désactivées. Il fait partie d'un SDV Secure Mesh avec les mêmes propriétés de sécurité que lui-même.
  • Le démarrage pair à pair n'a pas pu être vérifié en raison d'échecs locaux 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, il ne doit pas être transmis ni affecté 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

  • Erreur critique lors des étapes de démarrage du système.
  • Au moins une défaillance ou une erreur fondamentale 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 NON SÉCURISÉ du point de vue de la découverte de services.

Mode démarrage SDV

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

Condition Mode démarrage SDV
UNLOCKED LOCKED
Le magasin de confiance VVM local est vide  Avertissement  Fatal
Chaîne DICE locale manquante  Fatal  Fatal
Échec de la validation de la chaîne DICE locale  Avertissement  Fatal
Correspondance du mode SDV et AVB local Consultez le tableau dans Correspondance entre le mode SDV local et le mode AVB.
Comparaison des valeurs du mode Appareil à distance Consultez le tableau Comparaison des valeurs du mode Appareil à distance.
Échec de la mise en correspondance de uds_pubs à distance  Avertissement  Fatal
Échec de la validation de la chaîne DICE à distance (à l'aide des règles DICE)  Avertissement  Fatal
Échec de l'établissement de la liaison d'authentification à distance  Fatal  Fatal

Correspondance du mode SDV et AVB local

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

Mode AVB x Mode démarrage SDV Mode démarrage SDV
UNLOCKED LOCKED
AVB LOCKED Vert  Avertissement  Normal
Jaune  Fatal  Fatal
AVB UNLOCKED Orange  Avertissement  Fatal

Valeur du mode 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 ce calque en fonction de sa configuration d'entrée. Pour exprimer la position de sécurité de tous les logiciels sur l'appareil, une valeur de mode de l'appareil est définie. Elle est dérivée de la valeur de mode de toutes les étapes CDI des chaînes DICE pertinentes pour une VM SDV donnée (c'est-à-dire Android HLOS et Secure World) et est définie comme suit :

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

Algorithme

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

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

Comparaison des valeurs du mode Appareil à distance

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

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

Valeur du mode Appareil Télécommande
Non configuré Déboguer Récupération Normale
Local Non configuré  Fatal  Fatal  Fatal  Fatal
Déboguer  Fatal  Avertissement  Fatal  Fatal
Récupération  Fatal  Fatal  Avertissement  Fatal
Normale  Fatal  Fatal  Fatal  Normal

Flux de provisionnement en usine

Il s'agit du flux de provisionnement sur la chaîne de montage des véhicules, 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 une seule fois (OTP, One-Time Programmable) appelée 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'un ECU doivent avoir le même mode de démarrage SDV et la même valeur VVMFactoryTrust.

État initial

Toutes les ECU sont initialement en mode Boot SDV en mode UNLOCKED, avec des valeurs VVMFactoryTrust et Vehicle VM Trust Store vides, à l'exception des uds_certs présents sur le VVMTrustStore.

La figure 1 illustre un exemple où trois VM SDV (VM-A, VM-B et VM-C) sont réparties dans deux ECU distincts (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. Dans ce cas, l'outil obtient le hachage du /vvmtruststore/uds_pubs qui vient d'être écrit et le génère.

Provisionnement en usine, étape 1

Figure 2. Provisionnement en usine, étape 1.

Étape 2 : Écrire VVMFactoryTrust

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 VVMFactoryTrust. La manière dont cette écriture est effectuée est spécifique à l'OEM ou au fournisseur et ne relève pas de la présente spécification.

Provisionnement en usine, étape 2

Figure 3. Provisionnement en usine, étape 2.

Étape 3 : Redémarrez en mode SDV Boot Mode locked

Redémarrez toutes les VM de toutes les ECU en mode SDV Boot en mode 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 à VVMFactoryTrust.

É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.

Procédure de remplacement de pièces

Il s'agit du processus de provisionnement dans un atelier de réparation automobile ou un garage agréé, où un calculateur défectueux doit être remplacé par un nouveau calculateur non provisionné.

Ce flux dépend des certificats UDS émis directement par l'autorité racine indiquée dans vvmconfig ou indirectement, par le biais d'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 démarrage SDV en mode LOCKED.

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

Remplacement de pièces, état initial

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

Étape 1 : Installez le nouveau calculateur

Installez le nouveau calculateur, qui est dans un état vide et non provisionné.

Dans la figure 6, lorsque l'ECU-2 (l'ECU de remplacement) est mis sous tension, il existe deux mailles sécurisées SDV disjointes : l'une à l'état Warning et l'autre à l'état Normal. Les deux mailles SDV Secure sont incomplètes.

Remplacement de pièces, étape 1

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

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

Redémarrez toutes les VM de tous les ECU en mode SDV Boot en mode UNLOCKED.

Dans la figure 7, les VM-B et 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 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.

Dans ce cas, l'outil obtient le hachage du /vvmtruststore/uds_pubs qui vient d'être écrit et le génère, 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 celui que vous choisissez, car il 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 /vvmtruststore/uds_pubs.
    • Cela signifie généralement l'envoyer à un serveur distant qui a déjà stocké les certificats ou qui les génère en vérifiant les clés publiques reçues par rapport à une base de données de clés publiques UDS connues. Cette base de données a été créée à partir des clés publiques UDS extraites lors de la fabrication de l'ECU.
  • Notez l'adresse IP (/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 SDV Boot Mode locked

Redémarrez toutes les VM en mode Boot SDV en mode 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.