Profil SDV pour DICE

Le profil SDV pour le Device Identifier Composition Engine (DICE) est une extension du profil Android pour DICE. Dans SDV, une VM utilise deux chaînes DICE parallèles :

  • Chaîne Secure World DICE
  • Chaîne Android SDV DICE

Les champs suivants du descripteur de configuration du profil Android pour DICE sont pertinents pour chacune de ces chaînes :

Nom Clé Type Description
Nom du composant -70002 tstr Recommandé sur chaque couche CDI. Le nom du composant identifie de manière non ambiguë l'étape parmi toutes les chaînes DICE de matériel qui exécutent des VM Android SDV sur un véhicule ou une plate-forme de véhicule.
Version de sécurité -70005 uint Obligatoire à chaque étape de l'intégration CDI. Permet de définir une règle DICE qui empêche les versions de VM à distance non sécurisées de rejoindre le maillage sécurisé SDV.
Nom de l'instance du composant <0x0 -70007 tstr Obligatoire sur la première couche CDI spécifique à la VM. Par exemple, après l'hyperviseur, pour la chaîne DICE du SDV Android. Nom de l'instance SDV. Si plusieurs couches CDI contiennent le nom de l'instance de composant, chaque couche doit avoir la même valeur.

Chaîne Secure World DICE

La chaîne DICE Secure World est la même que celle que le serveur Remote Key Provisioning (RKP) d'Android reçoit des appareils Android. Le generateCertificateRequestV2() du HAL IRemotelyProvisionedComponent expose cette chaîne DICE à Android.

Ce tableau présente un exemple de chaîne DICE Secure World :

Étape de démarrage Couche DICE CDI Émis par
Bootloader principal CDI[0] UDS
Bootloader secondaire CDI[1] Bootloader principal
Démarrage TEE CDI[2] Bootloader secondaire
Démarrage de KeyMint TA CDI[3] (feuille) TEE

Pour implémenter l'application de confiance (TA) KeyMint, utilisez l'une des options suivantes :

  • Une seule instance KeyMint pour toutes les VM SDV : vous DEVEZ désigner un seul CDI pour toutes les VM.

ou

  • Une instance KeyMint pour chaque VM SDV : vous DEVEZ désigner une valeur CDI différente pour chaque VM. Chaque valeur CDI DOIT contenir un nom d'instance de composant qui correspond à celui de la VM.

Chaîne Android SDV DICE

La chaîne DICE SDV Android certifie le logiciel exécuté sur le chemin de démarrage menant de l'hyperviseur au système d'exploitation Android de haut niveau (HLOS) exécuté sur les VM SDV.

Le tableau suivant illustre un exemple de chaîne DICE SVD Android :

Étape de démarrage Couche DICE CDI Émis par
Bootloader principal CDI[0] UDS
Bootloader secondaire CDI[1] Bootloader principal
Hyperviseur CDI[2] Bootloader secondaire
Android HLOS CDI[3] (feuille) (Chargeur Android dans l') hyperviseur1

1 L'hyperviseur certifie le bootloader Android dans l'invité en tant que couche. Le bootloader Android certifie le HLOS Android.

Certificat CDI HLOS Android

Le bootloader Android (ou l'hyperviseur, s'il n'y a pas de bootloader Android, mais seulement un programme de "chargement" Android qui charge la VM dans l'hyperviseur) signe le certificat CDI HLOS Android et couvre le HLOS Android. Par exemple, il couvre tout le code que le bootloader Android valide conformément à Android Verified Boot (AVB).

Le certificat CDI HLOS Android doit contenir des valeurs spécifiques à SDV de l'OS Android qui atténuent les failles de sécurité. Par exemple, la fuite potentielle de secrets en interdisant aux VM présentant des failles connues d'accéder au maillage sécurisé SDV. La validation AVB fournit la plupart de ces valeurs.

Ils sont également transmis à KeyMint dans le TEE, où le certificat est signé par le CDI de feuille de la chaîne SecureWorld DICE et transmis à Android dans DeviceInfo pour activer des fonctionnalités telles que l'attestation de clé et d'ID dans le cœur d'Android.

Champs de saisie du code et du codeHash du certificat

Le condensé VBMeta (une sortie effectuée par le bootloader Android pour la validation AVB) couvre le logiciel du HLOS Android. Il sert donc de android-dice-input-values pour dériver les secrets CDI et est placé dans le champ dice-cert-fields du certificat CDI.

L'algorithme de hachage recommandé pour AVB est SHA-256, qui génère un résumé VBMeta de 32 octets. Contrairement au profil Open Profile for DICE, le profil Android pour DICE autorise android-dice-hash-algos à l'aide de android-dice-input-values de 32 octets pour le flux DICE, ainsi que le placement de la même valeur de 32 octets que codeHash dans le certificat DICE.

Descripteur de configuration : champs du profil Android pour DICE

En plus de ce qui est décrit pour toutes les couches CDI, les spécificités suivantes s'appliquent aux champs du descripteur de configuration du profil Android pour DICE :

Nom Clé Type Description
Version du composant -70003 int Version de l'OS du système à partir d'AVB version-info-avb. Identique à android.os.Build.VERSION.release.
Version de sécurité -70005 uint Niveau du correctif de sécurité de la partition system au format YYYYMMDD.
Marqueur de VM RKP -70006 null Le marqueur de VM RKP empêche le provisionnement de clés à distance d'émettre des certificats pour la chaîne DICE SDV Android.

Le marqueur de VM RKP doit apparaître dans le premier certificat CDI de la chaîne DICE SVD Android qui n'est pas commun avec la chaîne DICE Secure World. Il ne doit PAS apparaître dans les autres certificats CDI pour empêcher le serveur RKP rkp-avf-support de considérer la chaîne DICE comme provenant d'une VM RKP.

Descripteur de configuration : nouveaux champs

Le descripteur de configuration du certificat CDI HLOS Android doit contenir des valeurs spécifiques à SDV en plus de celles décrites par le profil Android pour DICE. Le profil SDV pour DICE réserve la plage de valeurs clés [-71000, -71999] à cet effet. Vous pouvez ajouter des champs spécifiques à l'implémentation à l'aide de valeurs clés en dehors de la plage réservée. Les valeurs spécifiques à SDV sont les suivantes :

Nom Clé Type Description
État du démarrage validé -71000 tstr green, yellow ou orange.
build fingerprint -71001 tstr Chaîne lisible qui identifie de manière unique cette version, comme ro.build.fingerprint. La section 3.2.2 "Build Parameters" du document CDD Android, cdd-3-2-2, définit ce paramètre. VBMeta stocke cette information en tant que propriété nommée com.android.build.system.fingerprint.
system_ext niveau du correctif de sécurité -71002 uint Niveau du correctif de sécurité de la partition system_ext au format YYYYMMDD.
product niveau du correctif de sécurité -71003 uint Niveau du correctif de sécurité de la partition product au format YYYYMMDD.
vendor niveau du correctif de sécurité -71004 uint Niveau du correctif de sécurité de la partition vendor au format YYYYMMDD.
boot niveau du correctif de sécurité -71005 uint Niveau du correctif de sécurité de la partition boot (qui contient le noyau Linux) au format YYYYMMDD.
Mode boot SDV -71006 tstr locked ou unlocked. Pour en savoir plus, consultez État et provisionnement du réseau maillé.

Sélection de la valeur d'entrée du mode du CDI HLOS Android

Le android-dice-mode du certificat CDI HLOS Android utilise la définition suivante :

AVB DÉVERROUILLÉ AVB LOCKED
Mode de démarrage SDV DÉVERROUILLÉ Déboguer Déboguer
Mode de démarrage SDV VERROUILLÉ Non configuré (non valide) Normale

Fonction de dérivation de clé

Le android-dice-kdf qui dérive la paire de clés publique et privée du secret CDI_Attest pour le CDI HLOS Android doit être HKDF avec SHA512 comme fonction de hachage.