Usar uma chave do Cloud HSM com a ferramenta pkcs11

Este guia fornece exemplos de comandos pkcs11-tool para usar uma chave do Cloud HSM em Debian 11 (Bullseye) usando a biblioteca PKCS #11. Os comandos incluídos em estas instruções podem exigir alterações com base na sua distribuição do SO ou Linux.

Antes de começar

Antes de continuar, conclua as etapas Como usar uma chave do Cloud HSM com o OpenSSL.

Usar criptografia e descriptografia simétricas

As próximas seções mostram como criptografar e descriptografar usando uma de criptografia de dados, OpenSSL e pkcs11-tool.

Pré-requisitos

  1. criar uma criptografia simétrica bruta do Cloud HSM; chave. Para criar uma chave do Cloud HSM, defina o nível de proteção para HSM ao criar uma chave nova.

  2. Anote o algoritmo de criptografia simétrica bruta escolhido para a chave. Cada algoritmo tem os próprios requisitos padding, vetores de inicialização e dados autenticados adicionais.

  3. Crie um arquivo de entrada que contenha os dados que você quer criptografar.

Encrypt

Para criptografar um arquivo de texto, execute o seguinte 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

Substitua:

  • PATH_TO_LIBKMSP11_SO: o caminho para o PKCS#11 módulo, por exemplo, /usr/local/lib/libkmsp11.so.
  • MECHANISM: o mecanismo a ser usado com base no algoritmo da chave, por exemplo, AES-CBC-PAD.
  • HSM_KEY_NAME: o nome da chave do Cloud HSM usar para criptografia.
  • INITIALIZATION_VECTOR: o valor de inicialização para ser usado como parte da criptografia.
  • INPUT_TEXT_FILE_PATH: o caminho para o arquivo de entrada que você quer. criptografar.
  • ENCRYPTED_TEXT_FILE_PATH: o caminho em que você quer salvar. o arquivo de texto criptografado.

Decrypt

Para descriptografar um arquivo de texto, execute o seguinte 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

Substitua:

  • PATH_TO_LIBKMSP11_SO: o caminho para o PKCS#11 módulo, por exemplo, /usr/local/lib/libkmsp11.so.
  • MECHANISM: o mecanismo a ser usado, com base na chave. algoritmo, por exemplo, ECDSA.
  • HSM_KEY_NAME: o nome da chave do Cloud HSM usado para criptografar o arquivo que você quer descriptografar.
  • INITIALIZATION_VECTOR: o valor de inicialização para ser usado como parte da criptografia.
  • ENCRYPTED_TEXT_FILE_PATH: o caminho para o arquivo que você quer descriptografar.
  • DECRYPTED_TEXT_FILE_PATH: o caminho em que você quer salvar o arquivo de texto descriptografado.

Usar criptografia e descriptografia assimétrica

As próximas seções mostram como criptografar e descriptografar usando uma de criptografia de dados, OpenSSL e pkcs11-tool.

Pré-requisitos

  1. criar uma descriptografia assimétrica do Cloud HSM; chave e faça o download da chave pública de dados.

  2. Crie um arquivo de entrada com algum texto.

    echo Hello World! >> input.txt
    

Encrypt

Para criptografar um arquivo de texto, execute o seguinte 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

Substitua:

  • INPUT_TEXT_FILE_PATH: o caminho para o arquivo de entrada que você quer. criptografar.
  • PUBLIC_KEY: o caminho para a chave pública.
  • ENCRYPTED_TEXT_FILE_PATH: o caminho em que você quer salvar. o arquivo de texto criptografado.

Decrypt

Para descriptografar um arquivo de texto, execute o seguinte 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

Substitua:

  • PATH_TO_LIBKMSP11_SO: o caminho para o módulo PKCS#11 (path/to/libkmsp11.so).
  • HSM_KEY_NAME: o nome da chave do Cloud HSM que corresponde à chave pública usada para criptografar o arquivo de texto.
  • ENCRYPTED_TEXT_FILE_PATH: o caminho do arquivo que você quer. para descriptografar.
  • OUTPUT_TEXT_FILE_PATH: o caminho em que você quer salvar. a saída descriptografada.

Assinar e verificar

As seções a seguir mostram como assinar e verificar usando um certificado chave de assinatura e pkcs11-tool.

Pré-requisitos

  1. Crie uma chave de assinatura assimétrica do Cloud HSM.

  2. Crie um arquivo com os dados de entrada com hash que você quer assinar.

Assinar

Para assinar um arquivo de texto, execute o seguinte 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

Substitua:

  • PATH_TO_LIBKMSP11_SO: o caminho para o módulo PKCS#11, por exemplo, path/to/libkmsp11.so.
  • HSM_KEY_NAME: o nome da chave do Cloud HSM que você quer usar na assinatura.
  • MECHANISM: o mecanismo a ser usado, com base na chave. algoritmo. Por exemplo, ECDSA.
  • INPUT_TEXT_FILE_PATH: o caminho para o arquivo de entrada que você quer. para assinar.
  • OUTPUT_SIGNATURE_FILE_PATH: o caminho em que você quer salve o arquivo de assinatura.

Verificar

Para verificar um arquivo de assinatura, execute o seguinte 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

Substitua:

  • PATH_TO_LIBKMSP11_SO: o caminho para o módulo PKCS#11, por exemplo, path/to/libkmsp11.so.
  • HSM_KEY_NAME: o nome da chave do Cloud HSM usado para gerar a assinatura que você quer verificar.
  • MECHANISM: o mecanismo a ser usado, com base na chave. algoritmo. Por exemplo, ECDSA.
  • INPUT_TEXT_FILE_PATH: o caminho para o arquivo que foi assinado anteriormente.
  • SIGNATURE_FILE_PATH: o caminho para o arquivo de assinatura.