Liaison de version

Toutes les clés KeyMint doivent être liées à une racine de confiance pour l'appareil. La racine de confiance est une chaîne de bits dérivée de la clé publique utilisée pour valider la signature de l'image de démarrage, ainsi que de l'état de verrouillage du bootloader.

Les clés KeyMint doivent également être associées à la version du système d'exploitation et au niveau de correctif de l'appareil. Pour prendre en charge la structure modulaire de Treble, cette liaison de version inclut des niveaux de correctifs distincts pour chaque partition (boot, system et vendor). Cela permet de mettre à jour chaque partition indépendamment, tout en offrant une protection contre le rollback.

Pour implémenter cette liaison de version, l'application approuvée (TA) KeyMint doit disposer d'un moyen de recevoir de manière sécurisée la version actuelle de l'OS et les niveaux de correctifs, et de s'assurer que les informations qu'elle reçoit correspondent à toutes les informations sur le système en cours d'exécution.

  • Appareils équipés du démarrage validé Android (AVB) :
    • Les niveaux de correctifs et la version de l'OS peuvent être inclus dans vbmeta.img afin que le bootloader puisse les fournir à KeyMint.
    • Pour les partitions en chaîne, les informations de version de la partition se trouvent dans le VBMeta en chaîne.
    • En général, les informations de version doivent se trouver dans le VBMeta struct qui contient les données de validation (hachage ou arbre de hachage) d'une partition donnée.
  • Appareils sans AVB :
    • Les implémentations du démarrage validé doivent fournir un hachage des métadonnées de version au bootloader, afin que le bootloader puisse fournir le hachage à KeyMint.
    • boot.img peut continuer à stocker les niveaux de correctif dans l'en-tête.
    • system.img peut continuer à stocker les niveaux de correctifs et la version de l'OS dans des propriétés en lecture seule.
    • vendor.img stocke le niveau du correctif dans la propriété en lecture seule ro.vendor.build.version.security_patch.
    • Le bootloader peut fournir un hachage de toutes les données validées par le démarrage validé à KeyMint.

Les balises suivantes décrivent les informations de version des partitions concernées:

Les implémentations KeyMint doivent traiter tous les niveaux de correctifs indépendamment. Les clés sont utilisables si toutes les informations de version correspondent aux valeurs associées à une clé. Si la version actuelle de l'appareil est plus récente que toute valeur associée à une clé, KeyMint renvoie l'erreur KEY_REQUIRES_UPGRADE à chaque tentative d'utilisation de la clé. Keystore exécute ensuite IKeyMintDevice::upgradeKey() pour générer un nouveau keyblob lié aux niveaux de correctifs actuels (et Keystore supprime ensuite le keyblob précédent avec un appel à IKeyMintDevice::deleteKey()).