Usa una clave de Cloud HSM con pkcs11-tool

En esta guía, se proporcionan comandos pkcs11-tool de muestra para usar una clave de Cloud HSM en Debian 11 (Bullseye) con la biblioteca PKCS #11. Es posible que los comandos incluidos en estas instrucciones requieran cambios según tu SO o distribución de Linux.

Antes de comenzar

Antes de continuar, completa los pasos que se indican en Cómo usar una clave de Cloud HSM con OpenSSL.

Usa la encriptación y desencriptación simétricas

En las siguientes secciones, se muestra cómo encriptar y desencriptar con una clave de encriptación simétrica, OpenSSL y pkcs11-tool.

Requisitos previos

  1. Crea una clave de encriptación simétrica sin procesar de Cloud HSM. Para crear una clave de Cloud HSM, establece el nivel de protección en HSM cuando crees una clave nueva.

  2. Anota el algoritmo de encriptación simétrica sin procesar que elijas para la clave. Cada algoritmo tiene sus propios requisitos para el padding, los vectores de inicialización y los datos autenticados adicionales.

  3. Crea un archivo de entrada que contenga los datos que deseas encriptar.

Encriptar

Para encriptar un archivo de texto, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • PATH_TO_LIBKMSP11_SO: La ruta de acceso al módulo PKCS#11, por ejemplo, /usr/local/lib/libkmsp11.so.
  • MECHANISM: Es el mecanismo que se usará, según el algoritmo de la clave, por ejemplo, AES-CBC-PAD.
  • HSM_KEY_NAME: Es el nombre de la clave de Cloud HSM que se usará para la encriptación.
  • INITIALIZATION_VECTOR: Es el valor del vector de inicialización que se usará como parte de la encriptación.
  • INPUT_TEXT_FILE_PATH: Es la ruta de acceso al archivo de entrada que deseas encriptar.
  • ENCRYPTED_TEXT_FILE_PATH: Es la ruta de acceso en la que deseas guardar el archivo de texto encriptado.

Decrypt

Para desencriptar un archivo de texto, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • PATH_TO_LIBKMSP11_SO: La ruta de acceso al módulo PKCS#11, por ejemplo, /usr/local/lib/libkmsp11.so.
  • MECHANISM: Es el mecanismo que se usará, según el algoritmo de la clave, por ejemplo, ECDSA.
  • HSM_KEY_NAME: Es el nombre de la clave de Cloud HSM que se usó para encriptar el archivo que deseas desencriptar.
  • INITIALIZATION_VECTOR: Es el valor del vector de inicialización que se usará como parte de la encriptación.
  • ENCRYPTED_TEXT_FILE_PATH: Es la ruta de acceso al archivo que deseas desencriptar.
  • DECRYPTED_TEXT_FILE_PATH: Es la ruta en la que deseas guardar el archivo de texto desencriptado.

Usa la encriptación y desencriptación asimétrica

En las siguientes secciones, se muestra cómo encriptar y desencriptar con una clave de encriptación asimétrica, OpenSSL y pkcs11-tool.

Requisitos previos

  1. Crea una clave de desencriptación asimétrica de Cloud HSM y descarga su clave pública.

  2. Crea un archivo de entrada con algún texto.

    echo Hello World! >> input.txt
    

Encriptar

Para encriptar un archivo de texto, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • INPUT_TEXT_FILE_PATH: Es la ruta de acceso al archivo de entrada que deseas encriptar.
  • PUBLIC_KEY: Es la ruta de acceso a la clave pública.
  • ENCRYPTED_TEXT_FILE_PATH: Es la ruta en la que deseas guardar el archivo de texto encriptado.

Decrypt

Para desencriptar un archivo de texto, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • PATH_TO_LIBKMSP11_SO: Es la ruta de acceso al módulo PKCS#11 (ruta/a/libkmsp11.so).
  • HSM_KEY_NAME: Es el nombre de la clave de Cloud HSM que corresponde a la clave pública que se usa para encriptar el archivo de texto.
  • ENCRYPTED_TEXT_FILE_PATH: Es la ruta de acceso al archivo que deseas desencriptar.
  • OUTPUT_TEXT_FILE_PATH: La ruta de acceso en la que deseas guardar el resultado desencriptado.

Firma y verifica

En las siguientes secciones, se muestra cómo firmar y verificar con una clave de firma asimétrica y pkcs11-tool.

Requisitos previos

  1. Crea una clave de firma asimétrica de Cloud HSM.

  2. Crea un archivo con los datos de entrada con hash que deseas firmar.

Firmar

Para firmar un archivo de texto, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • PATH_TO_LIBKMSP11_SO: La ruta de acceso al módulo PKCS#11, por ejemplo, path/to/libkmsp11.so.
  • HSM_KEY_NAME: Es el nombre de la clave de Cloud HSM que deseas usar para la firma.
  • MECHANISM: Es el mecanismo que se usará, según el algoritmo de claves. Por ejemplo, ECDSA
  • INPUT_TEXT_FILE_PATH: Es la ruta de acceso al archivo de entrada que deseas firmar.
  • OUTPUT_SIGNATURE_FILE_PATH: Es la ruta de acceso en la que deseas guardar el archivo de firma.

Verificar

Para verificar un archivo de firma, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • PATH_TO_LIBKMSP11_SO: La ruta de acceso al módulo PKCS#11, por ejemplo, path/to/libkmsp11.so.
  • HSM_KEY_NAME: Es el nombre de la clave de Cloud HSM que se usó para generar la firma que deseas verificar.
  • MECHANISM: Es el mecanismo que se usará, según el algoritmo de claves. Por ejemplo, ECDSA
  • INPUT_TEXT_FILE_PATH: Es la ruta de acceso al archivo que se firmó anteriormente.
  • SIGNATURE_FILE_PATH: Es la ruta de acceso al archivo de firma.