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
SECUREdu 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
UNSECUREdu 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 :
- Spécifiez
deviceModecommeDeviceMode::Normal. - Spécifiez
diceChainListcomme la liste des chaînes DICE pertinentes pour une VM SDV. - Pour chaque
diceChaindansdiceChainList:- Spécifiez
cdiListcomme la liste des certificats CDI dansdiceChain: - Pour chaque
cdiCertdanscdiList:- Spécifiez
cdiDeviceModecomme leDeviceModecorrespondant àcdiCert.mode. - Définissez
deviceModesurmin(deviceMode, cdiDeviceMode).
- Spécifiez
- Spécifiez
- 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) :
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.
- 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. - Lorsque cela se produit, l'outil obtient le hachage du
/vvmtruststore/uds_pubsqui vient d'être écrit et l'affiche.
Figure 2. Provisionnement en usine, étape 1.
Étape 2 : Écrivez la VVM Factory Trust
Sur une VM de chaque ECU :
- Écrivez le hachage de
/vvmtruststore/uds_pubsqui a été généré parsdv_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.
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.
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 :
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.
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.
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.
Figure 8. Remplacement de pièces, étape 3.
Étape 4 : Installez les certificats UDS
- Extrayez
/vvmtruststore/uds_pubsd'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.
- Cette étape implique généralement l'envoi des clés publiques UDS extraites (ou du fichier
- Écrivez le
/vvmtruststore/uds_certsde chaque VM SDV.
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.
Figure 10. Remplacement de pièces, étape 5.