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
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.
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.
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
Crea una clave de desencriptación asimétrica de Cloud HSM y descarga su clave pública.
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
Crea una clave de firma asimétrica de Cloud HSM.
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.