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
- Si nécessaire, créez une clé Cloud HSM sur un trousseau de clés dans une région compatible avec Cloud HSM.
Téléchargez et installez les scripts d'analyse des valeurs de l'attestation du fabricant du HSM. Téléchargez chacun de ces scripts :
verify_pubkey.py
parse_v1.py
parse_v2.py
Examinez la documentation concernant l'utilisation des scripts fournie au même emplacement.
Téléchargez et installez le script permettant de valider les attestations et ses conditions préalables, puis examinez la documentation relative au script.
Valider l'attestation
Le processus de validation des attestations peut être effectué automatiquement via Google Cloud Console, ou manuellement en téléchargeant le groupe d'attestations et le script de validation des attestations, puis en l'exécutant en local ou dans Cloud Shell.
Valider des attestations via la console Google Cloud
Vous pouvez valider l'attestation via la console Google Cloud, ce qui ouvrira une fenêtre Cloud Shell et la préremplira avec les extraits de code nécessaires pour effectuer l'intégralité du processus de validation de l'attestation.
Accédez à la page Gestion des clés dans la console Google Cloud.
Sélectionnez le trousseau de clés contenant la clé que vous souhaitez attester, puis sélectionnez la clé.
Cliquez sur Plus more_vert pour obtenir la version de clé que vous souhaitez attester, puis sélectionnez Valider l'attestation.
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.
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.
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.
Téléchargez les chaînes d'attestation et de certificat.
Console
Accédez à la page Gestion des clés dans la console Google Cloud.
Sélectionnez le trousseau de clés contenant la clé que vous souhaitez attester, puis sélectionnez la clé.
Cliquez sur Plus more_vert pour obtenir la version de clé que vous souhaitez attester, puis sélectionnez Valider l'attestation.
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é.
Extrayez les chaînes d'attestation et de certificat du groupe d'attestations.
gcloud
Cliquez sur Activer Cloud Shell en haut de la fenêtre de la console.
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.
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] \
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] \
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é.
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 la console Google Cloud ou en exécutant la commande suivante:
gcloud kms keys versions list \ --location location \ --keyring key-ring-name \ --key key-name
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"
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}')"
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)
Comparez les valeurs de
RESOURCE_NAME_HEX
et deKEYID_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 champ0x0162
. Une valeur\x01
esttrue
et une valeur\x00
estfalse
.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éfixeCKK_*
. 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.