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.