Estou usando o OpenSSL para importar minha chave para o AWS KMS, mas estou recebendo um erro “InvalidCiphertext”. Como faço para corrigir isso?

5 minuto de leitura
0

Criei uma chave do AWS KMS no AWS Key Management Service (AWS KMS). Especifiquei a origem do material da chave KMS como externa, escolhi RSAES_OAEP_SHA_256 como algoritmo para a chave de empacotamento e, em seguida, usei o OpenSSL para criptografar meu material de chave com a chave de empacotamento. No entanto, quando eu importo meu material de chave criptografado, a solicitação falha e eu recebo uma mensagem de erro sobre “InvalidCiphertext”. Como faço para evitar esse erro de importação?

Breve descrição

Por padrão, o OpenSSL usa a função de hash SHA-1.

Para evitar erros de importação ao usar o algoritmo RSAES_OAEP_SHA_256 (função de hash SHA-256), criptografe seu material importante com o OpenSSL usando o comando openssl pkeyutl e especifique os parâmetros –pkeyopt rsa_padding_mode:oaep e –pkeyopt rsa_oaep_md:sha256.

O procedimento completo para importar material de chave para o AWS KMS usando OpenSSL e RSAES_OAEP_SHA_256 é o seguinte:

1.    Crie uma chave KMS usando External para a origem do material de chave .

2.    Faça o download da chave de empacotamento (pública) e do token de importação.

3.    Gere uma chave simétrica de 256 bits.

4.    Verifique se sua versão do OpenSSL é compatível com openssl pkeyutl.

5.    Criptografe o material de chave com a chave de empacotamento.

6.    Importe seu material de chave criptografado.

Observação: se você estiver usando o algoritmo de criptografia RSAES_OAEP_SHA_1 para sua chave de empacotamento, consulte Como importar o material de chave.

Resolução

Criar uma chave KMS usando External para a origem do material de chave

Execute os seguintes comandos da AWS Command Line Interface (AWS CLI) para criar um KMS para material de chave externo.

Observação:

export REGION=us-east-1
export KEY_ALIAS=kms_key_with_externalmaterial
export KEY_ID=`aws kms create-key --region $REGION --origin EXTERNAL --description $KEY_ALIAS --query KeyMetadata.KeyId --output text`
aws kms --region $REGION create-alias --alias-name alias/$KEY_ALIAS --target-key-id $KEY_ID

O status da chave KMS recém-criada é Pending Import até que você importe o material de chave. Execute o comando a seguir para ver o status da chave.

aws kms --region $REGION describe-key --key-id $KEY_ID

Faça download da chave de empacotamento (pública) e do token de importação

Execute os seguintes comandos da AWS CLI para obter os valores PublicKey (chave de empacotamento) e ImportToken, decodifique os dois valores usando base64 e, em seguida, armazene esses valores em arquivos separados. Observe que o algoritmo de encapsulamento RSAES_OAEP_SHA_256 está especificado no comando get-parameters-for-import.

export KEY_PARAMETERS=`aws kms --region $REGION get-parameters-for-import --key-id $KEY_ID --wrapping-algorithm RSAES_OAEP_SHA_256 --wrapping-key-spec RSA_2048`
echo $KEY_PARAMETERS | awk '{print $7}' | tr -d '",' | base64 --decode > PublicKey.bin
echo $KEY_PARAMETERS | awk '{print $5}' | tr -d '",' | base64 --decode > ImportToken.bin

Esses comandos armazenam a chave de empacotamento em PublicKey.bin e o token de importação em ImportToken.bin.

Gerar uma chave simétrica de 256 bits

O material de chave deve ser uma chave simétrica de 256 bits (32 bytes). Execute um dos comandos a seguir para gerar a chave:

OpenSSL

openssl rand -out PlaintextKeyMaterial.bin 32

-ou-

dd

dd if=/dev/urandom of=PlaintextKeyMaterial.bin bs=32 count=1

Verifique se sua versão do OpenSSL é compatível com openssl pkeyutl

Para criptografar seu material de chave com RSAES_OAEP_SHA_256 como algoritmo de empacotamento, use o comando openssl pkeyutl.

Importante: esse comando está disponível somente no OpenSSL 1.0.2 e em versões posteriores.

Se você estiver usando um computador Linux baseado em RHEL, como uma instância do Amazon Elastic Compute Cloud (Amazon EC2) lançada com uma Amazon Linux AMI, siga estas etapas.

1.    Execute o comando a seguir para verificar sua versão do OpenSSL.

openssl version

2.    Para atualizar o OpenSSL, execute o comando a seguir.

sudo yum –y update openssl

Se você estiver usando o macOS, siga estas etapas.

1.    Execute os seguintes comandos do Homebrew.

brew update
brew upgrade openssl
brew info openssl

2.    O último comando mostra que o OpenSSL está instalado em /usr/local/opt/openssl/bin/. Confirme a versão do OpenSSL executando este comando.

/usr/local/opt/openssl/bin/openssl version

3.    Para sempre usar a versão mais recente do OpenSSL, edite ~/.bash_profile e adicione a seguinte linha no final do arquivo:

export PATH="/usr/local/opt/openssl/bin:$PATH"

4.    Depois de adicionar a linha, execute o comando a seguir.

source ~/.bash_profile

5.    Para verificar a alteração em seu ambiente macOS, execute o comando a seguir.

echo $PATH
openssl version

Criptografar seu material de chave com a chave de empacotamento

Execute o comando a seguir para criptografar seu material de chave usando a versão mais recente do OpenSSL e a chave de empacotamento que você baixou anteriormente.

Observação: a chave de empacotamento é armazenada em PublicKey.bin.

openssl pkeyutl -in PlaintextKeyMaterial.bin -out EncryptedKeyMaterial.bin -inkey PublicKey.bin -keyform DER \
            -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256

O comando gera EncryptedKeyMaterial.bin. Você importa esse valor como material de chave criptografado para o KMS.

Importar seu material de chave criptografado

Execute o seguinte comando da AWS CLI para importar o material da chave criptografado para a chave KMS.

aws kms --region $REGION import-key-material --key-id $KEY_ID --encrypted-key-material fileb://EncryptedKeyMaterial.bin --import-token fileb://ImportToken.bin --expiration-model KEY_MATERIAL_DOES_NOT_EXPIRE

Após a conclusão da importação, o status da chave muda para Enabled. Execute o comando a seguir para verificar o status da chave.

aws kms --region $REGION describe-key --key-id $KEY_ID

Informações relacionadas

Sobre o material de chave importado

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos