Utiliser une clé Cloud HSM avec pkcs11-tool

Ce guide fournit des exemples de commandes pkcs11-tool permettant d'utiliser une clé Cloud HSM sur Debian 11 (Bullseye) à l'aide de la bibliothèque PKCS #11. Les commandes incluses dans ces instructions peuvent nécessiter des modifications en fonction de votre système d'exploitation ou de votre distribution Linux.

Avant de commencer

Avant de poursuivre, suivez la procédure décrite dans la section Utiliser une clé Cloud HSM avec OpenSSL.

Utiliser le chiffrement et le déchiffrement symétriques

Les sections suivantes expliquent comment chiffrer et déchiffrer des données à l'aide d'une clé de chiffrement symétrique, d'OpenSSL et de pkcs11-tool.

Prérequis

  1. Créez une clé de chiffrement symétrique brute Cloud HSM. Pour créer une clé Cloud HSM, définissez le niveau de protection sur HSM lors de la création d'une clé.

  2. Notez l'algorithme de chiffrement symétrique brut que vous choisissez pour la clé. Chaque algorithme a ses propres exigences en termes de remplissage, de vecteurs d'initialisation et de données authentifiées supplémentaires.

  3. Créez un fichier d'entrée contenant les données que vous souhaitez chiffrer.

Chiffrer

Pour chiffrer un fichier texte, exécutez la commande suivante:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO --encrypt \
    --mechanism MECHANISM \
    --slot 0 \
    --label HSM_KEY_NAME \
    --iv INITIALIZATION_VECTOR \
    --input-file INPUT_TEXT_FILE_PATH \
    --output-file ENCRYPTED_TEXT_FILE_PATH

Remplacez les éléments suivants :

  • PATH_TO_LIBKMSP11_SO: chemin d'accès au module PKCS#11 (par exemple, /usr/local/lib/libkmsp11.so).
  • MECHANISM: mécanisme à utiliser, en fonction de l'algorithme de clé (par exemple, AES-CBC-PAD).
  • HSM_KEY_NAME: nom de la clé Cloud HSM à utiliser pour le chiffrement.
  • INITIALIZATION_VECTOR: valeur du vecteur d'initialisation à utiliser dans le cadre du chiffrement.
  • INPUT_TEXT_FILE_PATH: chemin d'accès au fichier d'entrée que vous souhaitez chiffrer.
  • ENCRYPTED_TEXT_FILE_PATH: chemin d'accès où vous souhaitez enregistrer le fichier texte chiffré.

Déchiffrer

Pour déchiffrer un fichier texte, exécutez la commande suivante:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO --decrypt \
    --mechanism MECHANISM \
    --slot 0 \
    --label HSM_KEY_NAME \
    --iv INITIALIZATION_VECTOR \
    --input-file ENCRYPTED_TEXT_FILE_PATH \
    --output-file DECRYPTED_TEXT_FILE_PATH

Remplacez les éléments suivants :

  • PATH_TO_LIBKMSP11_SO: chemin d'accès au module PKCS#11 (par exemple, /usr/local/lib/libkmsp11.so).
  • MECHANISM: mécanisme à utiliser, en fonction de l'algorithme de clé (par exemple, ECDSA).
  • HSM_KEY_NAME: nom de la clé Cloud HSM utilisée pour chiffrer le fichier à déchiffrer.
  • INITIALIZATION_VECTOR: valeur du vecteur d'initialisation à utiliser dans le cadre du chiffrement.
  • ENCRYPTED_TEXT_FILE_PATH: chemin d'accès au fichier que vous souhaitez déchiffrer.
  • DECRYPTED_TEXT_FILE_PATH: chemin d'accès où vous souhaitez enregistrer le fichier texte déchiffré.

Utiliser le chiffrement et le déchiffrement asymétriques

Les sections suivantes expliquent comment chiffrer et déchiffrer des données à l'aide d'une clé de chiffrement asymétrique, d'OpenSSL et de pkcs11-tool.

Prérequis

  1. Créez une clé de déchiffrement asymétrique Cloud HSM, puis téléchargez sa clé publique.

  2. Créez un fichier d'entrée avec du texte.

    echo Hello World! >> input.txt
    

Chiffrer

Pour chiffrer un fichier texte, exécutez la commande suivante:

openssl pkeyutl -in INPUT_TEXT_FILE_PATH -encrypt -pubin \
    -inkey PUBLIC_KEY \
    -pkeyopt rsa_padding_mode:oaep \
    -pkeyopt rsa_oaep_md:sha256 \
    -pkeyopt rsa_mgf1_md:sha256 > ENCRYPTED_TEXT_FILE_PATH

Remplacez les éléments suivants :

  • INPUT_TEXT_FILE_PATH: chemin d'accès au fichier d'entrée que vous souhaitez chiffrer.
  • PUBLIC_KEY: chemin d'accès à la clé publique.
  • ENCRYPTED_TEXT_FILE_PATH: chemin d'accès où vous souhaitez enregistrer le fichier texte chiffré.

Déchiffrer

Pour déchiffrer un fichier texte, exécutez la commande suivante:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO \
    --decrypt --mechanism RSA-PKCS-OAEP --slot 0 --hash-algorithm=sha256 \
    --mgf MGF1-SHA256 --label HSM_KEY_NAME --type privkey \
    -i ENCRYPTED_TEXT_FILE_PATH \
    -o OUTPUT_TEXT_FILE_PATH

Remplacez les éléments suivants :

  • PATH_TO_LIBKMSP11_SO: chemin d'accès au module PKCS#11 (path/to/libkmsp11.so).
  • HSM_KEY_NAME: nom de la clé Cloud HSM qui correspond à la clé publique utilisée pour chiffrer le fichier texte.
  • ENCRYPTED_TEXT_FILE_PATH: chemin d'accès au fichier que vous souhaitez déchiffrer.
  • OUTPUT_TEXT_FILE_PATH: chemin d'accès où vous souhaitez enregistrer la sortie déchiffrée.

Signer et valider

Les sections suivantes expliquent comment signer et valider à l'aide d'une clé de signature asymétrique et de l'outil pkcs11-tool.

Prérequis

  1. Créez une clé de signature asymétrique Cloud HSM.

  2. Créez un fichier contenant les données d'entrée hachées que vous souhaitez signer.

Signer

Pour signer un fichier texte, exécutez la commande suivante:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO --sign \
   --mechanism MECHANISM \
   --slot 0 \
   --label HSM_KEY_NAME \
   -i INPUT_TEXT_FILE_PATH \
   -o OUTPUT_SIGNATURE_FILE_PATH

Remplacez les éléments suivants :

  • PATH_TO_LIBKMSP11_SO: chemin d'accès au module PKCS#11, par exemple path/to/libkmsp11.so.
  • HSM_KEY_NAME: nom de la clé Cloud HSM que vous souhaitez utiliser pour la signature.
  • MECHANISM: mécanisme à utiliser, en fonction de l'algorithme de la clé. Exemple :ECDSA
  • INPUT_TEXT_FILE_PATH: chemin d'accès au fichier d'entrée que vous souhaitez signer.
  • OUTPUT_SIGNATURE_FILE_PATH: chemin d'accès où vous souhaitez enregistrer le fichier de signature.

Valider

Pour vérifier un fichier de signature, exécutez la commande suivante:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO --verify \
   --mechanism MECHANISM \
   --slot 0 \
   --label HSM_KEY_NAME \
   -i INPUT_TEXT_FILE_PATH \
   --signature-file SIGNATURE_FILE_PATH

Remplacez les éléments suivants :

  • PATH_TO_LIBKMSP11_SO: chemin d'accès au module PKCS#11, par exemple path/to/libkmsp11.so.
  • HSM_KEY_NAME: nom de la clé Cloud HSM utilisée pour générer la signature à vérifier.
  • MECHANISM: mécanisme à utiliser, en fonction de l'algorithme de la clé. Exemple :ECDSA
  • INPUT_TEXT_FILE_PATH: chemin d'accès au fichier précédemment signé.
  • SIGNATURE_FILE_PATH: chemin d'accès au fichier de signature.