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, configura el nivel de protección a HSM mientras se crea una clave nueva.

  2. Toma nota del 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 la clave. algoritmo, 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 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: Es la ruta de acceso a PKCS#11. módulo, 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: el valor de la 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 desencriptación asimétrica de Cloud HSM clave y descarga su propia clave .

  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: Es la ruta 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: Es 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 quieres usar para firmar.
  • MECHANISM: Es el mecanismo que se usará, según la clave. de codificador-decodificador. 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 a la que deseas ir. 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: La ruta de acceso al archivo que se firmados anteriormente.
  • SIGNATURE_FILE_PATH: Es la ruta de acceso al archivo de firma.