Ir para o conteúdo

Como verifico as assinaturas geradas pelas chaves assimétricas do AWS KMS?

3 minuto de leitura
0

Quero usar o AWS Key Management Service (AWS KMS) para assinar um arquivo. Em seguida, quero compartilhar o arquivo, sua assinatura e a chave pública para verificar se a assinatura é válida. Não quero fornecer acesso à API para que os usuários acessem minha chave do AWS KMS.

Resolução

O exemplo a seguir usa o AWS KMS com um par de chaves assimétricas ECC_NIST_P256 (secp256r1). Quando o AWS KMS usa esse par de chaves para gerar um arquivo de assinatura, o arquivo é criado de acordo com o NIST FIPS 168-4. Uma assinatura digital ECDSA que contém valores (r, s) é gerada conforme especificado na ANS X9.62. Por causa do padrão aberto, é possível usar o OpenSSL para verificar a assinatura.

Para obter o formato de assinatura para pares de chaves RSA, consulte as especificações de chaves RSA para assinatura e verificação.

Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Assinar um arquivo local

Depois de criar a chave assimétrica do AWS KMS em sua conta da AWS, use a AWS CLI para se referir à chave ao assinar um arquivo. A resposta que você recebe da API do AWS KMS é codificada em base64. O exemplo a seguir usa o parâmetro --query para obter o valor da assinatura da resposta e colocá-lo no arquivo sign.b64:

[ec2-user@ip-172-31-23-22 ~]$ aws kms sign --key-id arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab --message fileb://message.txt --signing-algorithm ECDSA_SHA_256 --query 'Signature' --output text > sign.b64

Observação: É possível enviar mensagens de até 4096 B. Para assinar uma mensagem maior, gere um resumo em hash da mensagem. Em seguida, forneça o resumo do hash no parâmetro da mensagem. Para mostrar se a mensagem é completa ou resumida, use o parâmetro MessageType. Observe o algoritmo de assinatura para verificar a assinatura posteriormente.

Como a assinatura está no formato base64, execute o seguinte comando de codificação Linux base64 para converter o formato em binário:

[ec2-user@ip-172-31-23-22 ~]$ base64 -d sign.b64 > sign.bin

Execute o seguinte comando para decodificar arquivos base64 para o sistema operacional (SO) Windows:

certutil -decode C:\Temp\sign.b64 C:\Temp\sign.bin

Agora é possível compartilhar o arquivo de assinatura sign.b64.

Verifique a assinatura do AWS KMS

Para verificar o arquivo de assinatura, você deve ter a chave pública. Para obter a chave pública, execute o comando get-public-key da AWS CLI:

[ec2-user@ip-172-31-23-22 ~]$ aws kms get-public-key --key-id arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab --output text --query 'PublicKey' > KMSPublic.b64

Execute o comando a seguir para converter o arquivo base64 em um arquivo codificado em DER chamado KMSPublic.key:

[ec2-user@ip-172-31-23-22 ~]$ base64 -d KMSPublic.b64 > KMSPublic.key

Agora você tem a chave pública e a assinatura em formato binário com o arquivo message.txt.

Para verificar a assinatura, execute o comando dgst do OpenSSL:

[ec2-user@ip-172-31-23-22 ~]$ openssl dgst -sha256 -verify KMSPublic.key -keyform DER -signature sign.bin message.txtVerified OK

A verificação é bem-sucedida quando a saída mostra “Verificado OK”.

Se você não receber uma resposta de verificação, verifique o seguinte:

  • O algoritmo de assinatura do OpenSSL é o mesmo usado para assinar o arquivo.
  • Seus arquivos não são codificados em base64.

Informações relacionadas

Primitivas criptográficas

Conceitos do AWS KMS

AWS OFICIALAtualizada há um ano