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 le groupe de certificats utilisés 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 certificats, vous vérifiez la validité des certificats du groupe, puis l'instruction d'attestation elle-même.

Le format de l'instruction d'attestation est défini par le fabricant du HSM. Il est impossible de valider une attestation à l'aide de Cloud Console, de l'API Cloud KMS ou de l'outil gcloud. La validation est intentionnellement indépendante de Google.

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

Télécharger les artefacts

Avant d'attester une clé, vous devez télécharger les certificats et l'instruction d'attestation.

Télécharger les certificats

La signature d'une attestation peut être validée à l'aide d'un groupe de certificats menant aux certificats racine pour Google et le fabricant du HSM, et signée par les autorités de certification de Google et du fabricant du HSM.

  1. Téléchargez le groupe de certificats menant au certificat racine de Google.

    curl -O https://www.gstatic.com/cloudhsm/cloud-kms-prod-[location]-google.pem
    
  2. Téléchargez le groupe de certificats menant au certificat racine du fabricant du HSM.

    curl -O https://www.gstatic.com/cloudhsm/cloud-kms-prod-[location]-cavium.pem
    
  3. Téléchargez le certificat racine de Google.

    curl -O https://www.gstatic.com/cloudhsm/roots/global_1498867200.pem
    
  4. Téléchargez et extrayez le certificat racine et la clé publique du fabricant du HSM.

    curl -O https://www.marvell.com/content/dam/marvell/en/public-collateral/security-solutions/liquid_security_certificate.zip
    
    unzip liquid_security_certificate.zip
    

    Le certificat est extrait dans liquid_security_certificate.crt et la clé publique est extraite dans liquid_security_certificate.txt.

Télécharger l'instruction d'attestation

Vous pouvez télécharger l'attestation d'une version de clé cryptographique à l'aide de Google Cloud Console ou de la ligne de commande. L'instruction d'attestation est téléchargée directement à partir de l'appareil HSM contenant la clé.

Console

  1. Accédez à la page Clés de chiffrement dans Cloud Console.

    Accédez à la page Clés de chiffrement

  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 Obtenir une attestation.

  4. Dans la boîte de dialogue Obtenir une attestation, cliquez sur Télécharger. Le fichier d'attestation est téléchargé sur votre système local.

    Le nom du fichier d'attestation a le format suivant : [keyring-name]-[key-name]-[key-version]-[attestation-format]-attestation.dat. Chaque partie du nom de fichier est séparée par un trait d'union. C'est pourquoi le texte d'espace réservé est entouré de crochets ([ et ]).

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 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 le format d'attestation de la clé à attester.

    gcloud kms keys versions describe key-version \
      --key key-name \
      --location location \
      --keyring keyring-name
    

    Le résultat de cette commande affiche le format d'attestation de la version de clé dont vous aurez besoin à l'étape suivante.

  3. 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, en remplaçant attestation-format par le format d'attestation obtenu à l'étape précédente. L'indicateur --attestation-file spécifie le chemin d'accès et le nom du fichier de destination de l'attestation récupérée. Chaque partie du nom de fichier est séparée par un trait d'union. C'est pourquoi le texte d'espace réservé est entouré de crochets ([ et ]).

    gcloud kms keys versions describe key-version \
     --key key-name \
     --location location \
     --keyring keyring-name \
     --attestation-file \
     [keyring-name]-[key-name]-[key-version]-[attestation-format]-attestation.dat
    

Valider la signature de l'attestation

Pour vérifier la signature cryptographique d'une attestation, vous pouvez utiliser un script Open Source.

Vous pouvez également valider la clé publique pour une paire de clés asymétriques.

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 obtenir l'ID de ressource de la version de clé à l'aide de Cloud Console ou en exécutant 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. La validation étant intentionnellement indépendante de Google, vous ne pouvez pas valider une attestation à l'aide de Cloud Console, de l'API Cloud KMS ou de l'outil gcloud.