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 l'état de verrouillage du bootloader.

Les clés KeyMint doivent également être lié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 correctif 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 de confiance (TA) KeyMint doit pouvoir recevoir de manière sécurisée la version actuelle de l'OS et les niveaux de correctif, et s'assurer que les informations qu'elle reçoit correspondent à toutes les informations sur le système en cours d'exécution.

  • Appareils avec 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 enchaînées, les informations de version de la partition se trouvent dans le VBMeta enchaîné.
    • En général, les informations de version doivent se trouver dans le VBMeta struct qui contient les données de validation (hachage ou hashtree) d'une partition donnée.
  • Appareils sans AVB :
    • Les implémentations de démarrage validé doivent fournir un hachage des métadonnées de version au bootloader, afin que celui-ci 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 correctif et la version de l'OS dans des propriétés en lecture seule.
    • vendor.img stocke le niveau de correctif dans la propriété en lecture seule ro.vendor.build.version.security_patch.
    • Le bootloader peut fournir à KeyMint un hachage de toutes les données validées par le démarrage validé.

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

Les implémentations KeyMint doivent traiter tous les niveaux de correctif 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 lors de toute tentative d'utilisation de la clé. Keystore effectue ensuite IKeyMintDevice::upgradeKey pour générer un nouveau keyblob lié aux niveaux de correctif actuels (et Keystore supprime ensuite le keyblob précédent avec un appel à IKeyMintDevice::deleteKey).