Valider des attestations

Cette rubrique explique comment valider les attestations des clés Cloud HSM, qui sont toujours stockées dans un module de sécurité matérielle (HSM).

Présentation

En cryptographie, une attestation est une instruction lisible par un ordinateur et vérifiable par programmation, opérée par un logiciel sur lui-même. Les attestations constituent un élément important de l'informatique de confiance et peuvent être requises pour des raisons de conformité.

Pour afficher et valider les attestations, vous demandez au HSM une instruction d'attestation avec signature cryptographique, ainsi que les chaînes de certificats utilisées pour la signer. L'instruction d'attestation est produite par le matériel HSM et signée par les certificats détenus par Google et par le fabricant du HSM.

Après avoir téléchargé l'instruction d'attestation et les chaînes de certificats, vous pouvez vérifier ses attributs ou vérifier la validité de l'attestation à l'aide des chaînes de certificats.

Le script d'attestation est un script Python Open Source développé par Google. Vous pouvez afficher le code source du script pour en savoir davantage sur le format d'attestation et le fonctionnement de la validation, ou l'utiliser comme modèle pour une solution personnalisée.

Les exemples de cette rubrique sont conçus pour les environnements Linux, y compris Cloud Shell. Pour suivre les clients macOS ou Windows, vous devrez peut-être apporter des modifications.

Avant de commencer

Valider l'attestation

Le processus de validation des attestations peut être effectué automatiquement via la console Google Cloud, ou manuellement en téléchargeant le groupe d'attestations et le script de validation des attestations et en les exécutant localement ou dans Cloud Shell.

Vérifier les attestations via la console Google Cloud

Vous pouvez valider l'attestation via la console Google Cloud, qui ouvre une session Cloud Shell et le préremplit avec les extraits de code nécessaires à l'ensemble du processus de validation de l'attestation.

  1. Accédez à la page Gestion des clés dans la console Google Cloud.

    Accéder à la page "Gestion des clés"

  2. Sélectionnez le trousseau de clés contenant la clé que vous souhaitez attester, puis sélectionnez la clé.

  3. Cliquez sur Plus  pour obtenir la version de clé que vous souhaitez attester, puis sélectionnez Valider l'attestation.

  4. Dans la boîte de dialogue Valider l'attestation, cliquez sur Ouvrir Cloud Shell. Cloud Shell s'ouvre et effectue le préremplissage avec l'extrait de code nécessaire pour suivre l'intégralité du processus de validation.

  5. Inspectez l'extrait de code prérempli dans Cloud Shell. L'extrait télécharge le script de validation d'attestation et ses dépendances, exécute les commandes gcloud pour télécharger les chaînes d'attestation et de certificat, puis exécute le script pour valider l'attestation.

  6. Exécutez l'extrait de code pour valider l'attestation.

Valider manuellement l'attestation

L'attestation, les chaînes de certificats et le script de validation d'attestation doivent être téléchargés avant de procéder à la validation manuelle de l'attestation.

  1. Téléchargez les chaînes d'attestation et de certificat.

    Console

    1. Accédez à la page Gestion des clés dans la console Google Cloud.

      Accéder à la page "Gestion des clés"

    2. Sélectionnez le trousseau de clés contenant la clé que vous souhaitez attester, puis sélectionnez la clé.

    3. Cliquez sur Plus  pour obtenir la version de clé que vous souhaitez attester, puis sélectionnez Valider l'attestation.

    4. Dans la boîte de dialogue Valider l'attestation, cliquez sur Télécharger le groupe d'attestations. Un fichier ZIP contenant les chaînes d'attestation et de certificat est alors téléchargé.

    5. Extrayez les chaînes d'attestation et de certificat du groupe d'attestations.

    gcloud

    1. Cliquez sur Activer Cloud Shell en haut de la fenêtre de la console.

      Activer Cloud Shell Une session Cloud Shell s'ouvre dans un nouveau cadre en bas de la console et affiche une invite de ligne de commande. L'initialisation de la session de shell peut prendre quelques secondes.

      Session Cloud Shell

    2. Lorsque l'invite de ligne de commande Cloud Shell s'affiche, exécutez la commande gcloud kms keys versions describe pour récupérer l'attestation de la clé à attester. L'option --attestation-file spécifie le chemin d'accès et le nom du fichier de destination de l'attestation récupérée.

      gcloud kms keys versions describe key-version \
       --key key-name \
       --location location \
       --keyring keyring-name \
       --attestation-file [attestation-file] \
      
    3. Lorsque l'invite de ligne de commande Cloud Shell s'affiche, exécutez la commande gcloud kms keys versions get-certificate-chain pour récupérer les chaînes de certificat de la clé à attester. L'option --output-file spécifie le chemin d'accès et le nom du fichier de destination des certificats récupérés.

      gcloud kms keys versions get-certificate-chain key-version \
       --key key-name \
       --location location \
       --keyring keyring-name \
       --output-file [certificates-file] \
      
  2. Téléchargez le script permettant de valider les attestations et ses conditions préalables, puis consultez la documentation du script pour valider l'attestation dans le fichier d'attestation à l'aide des certificats contenus dans le fichier de certificats.

Analyser les valeurs de l'attestation

La documentation du fabricant du HSM inclut des instructions complètes sur l'utilisation de ses scripts pour analyser les valeurs d'une attestation et valider la clé publique pour une paire de clés asymétrique. Avant de pouvoir être analysée, l'attestation doit être décompressée à l'aide de la commande suivante.

  • Décompressez l'attestation compressée.

    gzip -d < compressed_attestation.dat > attestation.dat
    

Ces liens renvoient directement aux instructions spécifiques du fabricant du HSM :

Les instructions d'analyse de la valeur de l'attestation incluent une référence aux champs généraux de l'attestation, non spécifique aux clés HSM dans Cloud HSM.

Les sections suivantes montrent comment valider les informations de vos clés spécifiques à Cloud HSM.

Valider l'ID de version de la clé

Vous pouvez vérifier si le hachage SHA-256 de l'ID de ressource de la version de clé est présent dans l'attestation. Le nom de ressource de la clé fait partie du champ 0x0102 ou du champ d'ID de clé figurant dans le fichier d'attestation. L'ID de clé se compose de deux condensés de hachage SHA-256 concaténés au format hexadécimal. Le second condensé doit correspondre au nom de ressource de la clé.

  1. Obtenez l'ID de ressource de la version de clé. Vous pouvez utiliser la console Google Cloud pour obtenir l'ID de ressource de la version de clé ou exécuter la commande suivante:

    gcloud kms keys versions list \
       --location location \
       --keyring key-ring-name \
       --key key-name
    
  2. Sur la ligne de commande, attribuez resource_name à l'ID de ressource de la version de clé que vous venez de récupérer.

    RESOURCE_NAME="projects/project-id/locations/location/keyRings/key-ring-name/cryptoKeys/key-name/cryptoKeyVersions/key-version"
    
  3. Puisque le script d'analyse vide tous les champs d'attestation au format hexadécimal, l'ID de clé aurait été formaté deux fois au format hexadécimal (une première fois lors de sa création, puis une seconde lors de l'analyse de l'attestation). Pour vérifier que le nom de ressource correspond à l'ID de clé, convertissez ce nom en un condensé hexadécimal SHA-256, annulez une conversion hexadécimale de l'ID de clé spécifié dans le fichier d'attestation, puis comparez les deux.

    RESOURCE_NAME_HEX="$(echo -n ${RESOURCE_NAME} | openssl dgst -sha256 -hex | awk '{print $2}')"
    
  4. Le script d'analyse vide tous les champs d'attestation au format hexadécimal, et l'ID de clé est encodé en hexadécimal une seconde fois en interne. Définissez la variable d'environnement KEYID_HEX sur la valeur de l'ID de clé avec une couche d'encodage hexadécimal décodé :

    KEYID_HEX=$(grep -m 1 0x0102 /path/to/parsed/attestation.dat | awk '{print $2}' | xxd -p -r)
    
  5. Comparez les valeurs de RESOURCE_NAME_HEX et de KEYID_HEX en tant que chaînes :

    test  ${RESOURCE_NAME_HEX} == ${KEYID_HEX:(-64)} || echo "Values don't match"
    

    Si les valeurs correspondent, aucune sortie n'est renvoyée et la commande se termine avec le code 0.

Valider d'autres propriétés de la clé

Vous pouvez afficher diverses propriétés des clés, qui correspondent aux champs de la norme PKCS #11. Utilisez les exemples suivants comme guides pour valider d'autres propriétés de la clé.

  • Le fait qu'une clé soit extractible est stocké dans le champ 0x0102 du résultat analysé. Pour déterminer si une clé peut être extraite, examinez le champ 0x0162. Une valeur \x01 est true et une valeur \x00 est false.

    Les clés Cloud HSM ne peuvent pas être extraites.

    grep '0x0162:' /path/to/parsed/attestation.dat
    
  • La manière dont la clé a été introduite dans le HSM (qu'elle ait été créée directement ou importée) est stockée dans le champ 0x0163. Si la clé a été créée localement sur le HSM, le champ est défini sur \x01. Le champ d'une clé importée est défini sur \x00.

    Vous pouvez déduire un certain nombre d'informations de la façon dont la clé a été introduite sur le HSM. Si la clé a été créée dans Cloud HSM, cela signifie qu'elle n'a jamais été stockée de manière non chiffrée en dehors d'un HSM. Si la clé a été importée, le mécanisme d'importation garantit que la clé est protégée lors du transit pendant le processus d'importation, et par la suite dans Cloud HSM.

    grep '0x0163:' /path/to/parsed/attestation.dat
    
  • Le type d'une clé est stocké dans le champ 0x0100. Les types de clés sont documentés dans la norme PCKS#11 avec le préfixe CKK_*. Par exemple, une clé AES est de type \x1f.

    grep '0x0100:' /path/to/parsed/attestation.dat
    

Informations supplémentaires

Vous validez une attestation pour déterminer si une version de clé a été créée dans un HSM.