En esta guía se proporcionan comandos pkcs11-tool
de ejemplo para usar una clave de Cloud HSM en Debian 11 (Bullseye) con la biblioteca PKCS #11. Es posible que tengas que modificar los comandos incluidos en estas instrucciones en función de tu sistema operativo o distribución de Linux.
Antes de empezar
Antes de continuar, sigue los pasos que se indican en Usar una clave de Cloud HSM con OpenSSL.
Usar cifrado y descifrado simétricos
En las siguientes secciones se explica cómo cifrar y descifrar con una clave de cifrado simétrica, OpenSSL y pkcs11-tool.
Requisitos previos
Crea una clave de encriptado simétrico sin formato de Cloud HSM. Para crear una clave de Cloud HSM, define el Nivel de protección como HSM al crear una clave.
Anota el algoritmo de cifrado simétrico sin formato que elijas para la clave. Cada algoritmo tiene sus propios requisitos de relleno, vectores de inicialización y datos autenticados adicionales.
Crea un archivo de entrada que contenga los datos que quieras cifrar.
Cifrar
Para cifrar 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
Haz los cambios siguientes:
PATH_TO_LIBKMSP11_SO
: la ruta al módulo PKCS#11. Por ejemplo,/usr/local/lib/libkmsp11.so
.MECHANISM
: el mecanismo que se va a usar, basado en el algoritmo de la clave. Por ejemplo,AES-CBC-PAD
.HSM_KEY_NAME
: nombre de la clave de Cloud HSM que se va a usar para el cifrado.INITIALIZATION_VECTOR
: el valor del vector de inicialización que se va a usar como parte del cifrado.INPUT_TEXT_FILE_PATH
: la ruta al archivo de entrada que quieres cifrar.ENCRYPTED_TEXT_FILE_PATH
: la ruta en la que quieres guardar el archivo de texto cifrado.
Descifrar
Para descifrar 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
Haz los cambios siguientes:
PATH_TO_LIBKMSP11_SO
: la ruta al módulo PKCS#11. Por ejemplo,/usr/local/lib/libkmsp11.so
.MECHANISM
: el mecanismo que se va a usar, basado en el algoritmo de la clave. Por ejemplo,ECDSA
.HSM_KEY_NAME
: el nombre de la clave de Cloud HSM que se usó para cifrar el archivo que quieres descifrar.INITIALIZATION_VECTOR
: el valor del vector de inicialización que se va a usar como parte del cifrado.ENCRYPTED_TEXT_FILE_PATH
: la ruta al archivo que quieres descifrar.DECRYPTED_TEXT_FILE_PATH
: la ruta en la que quieres guardar el archivo de texto descifrado.
Usar el cifrado y el descifrado asimétricos
En las siguientes secciones se muestra cómo cifrar y descifrar con una clave de cifrado asimétrica, OpenSSL y pkcs11-tool.
Requisitos previos
Crea una clave de desencriptado asimétrica de Cloud HSM y descarga su clave pública.
Google CloudCrea un archivo de entrada con texto.
echo Hello World! >> input.txt
Cifrar
Para cifrar 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
Haz los cambios siguientes:
INPUT_TEXT_FILE_PATH
: la ruta al archivo de entrada que quieres cifrar.PUBLIC_KEY
: la ruta a la clave pública.ENCRYPTED_TEXT_FILE_PATH
: la ruta en la que quieres guardar el archivo de texto cifrado.
Descifrar
Para descifrar 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
Haz los cambios siguientes:
PATH_TO_LIBKMSP11_SO
: la ruta al módulo PKCS#11 (path/to/libkmsp11.so).HSM_KEY_NAME
: el nombre de la clave de Cloud HSM que corresponde a la clave pública usada para cifrar el archivo de texto.ENCRYPTED_TEXT_FILE_PATH
: la ruta al archivo que quieres descifrar.OUTPUT_TEXT_FILE_PATH
: la ruta en la que quieres guardar el resultado descifrado.
Firmar y verificar
En las siguientes secciones se explica cómo firmar y verificar con una clave de firma asimétrica y pkcs11-tool.
Requisitos previos
Crea una clave de firma asimétrica de Cloud HSM.
Crea un archivo con los datos de entrada cifrados que quieras 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
Haz los cambios siguientes:
PATH_TO_LIBKMSP11_SO
: la ruta al módulo PKCS#11, por ejemplo,path/to/libkmsp11.so
.HSM_KEY_NAME
: el nombre de la clave de Cloud HSM que quieres usar para firmar.MECHANISM
: el mecanismo que se va a usar, en función del algoritmo de la clave. Por ejemplo,ECDSA
.INPUT_TEXT_FILE_PATH
: la ruta al archivo de entrada que quieres firmar.OUTPUT_SIGNATURE_FILE_PATH
: la ruta en la que quieres 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
Haz los cambios siguientes:
PATH_TO_LIBKMSP11_SO
: la ruta al módulo PKCS#11, por ejemplo,path/to/libkmsp11.so
.HSM_KEY_NAME
: el nombre de la clave de Cloud HSM que se ha usado para generar la firma que quieres verificar.MECHANISM
: el mecanismo que se va a usar, en función del algoritmo de la clave. Por ejemplo,ECDSA
.INPUT_TEXT_FILE_PATH
: la ruta al archivo que se firmó anteriormente.SIGNATURE_FILE_PATH
: la ruta al archivo de firma.