AWS KMS – Envelope Encryption

Objetivo:

Encriptar arquivos no lado cliente utilizando AWS APIs e Encryption SDK.

Introdução

O KMS tem a limitação de encriptar dados com tamanho de até 4 KB, entretanto, no mundo real, é comum termos dados de tamanhos maiores que queremos encriptar.

Este post mostra como utilizar o AWS Encryption SDK (CLI )para encriptar um arquivo de qualquer tamanho, inclusive maiores que 4 KB do lado do cliente usando CLI. A AWS também disponibiliza SDKs de envelopamento para Python, JavaScript, entre outras linguagens.

Recomendo a leitura destes outros dois posts que falam sobre princípios de criptografia e funcionamento do KMS.

https://arquitetocloud.com.br/aws-kma-principios-de-criptografia/

https://arquitetocloud.com.br/aws-kms-overview/

CLI – Encrypt e Decrypt

O diagrama abaixo mostra o fluxo para encriptação de dados que utiliza a API GenerateDataKey para gerar uma chave simétrica que será usada para encriptar um arquivo de 10 MB no lado cliente.

  1. Temos um arquivo de 10 MB que queremos encriptar com o KMS.
  2. Usamos a API GenerateDataKey do KMS, especificando a CMK que será usada para criptografar o arquivo.
  3. O KMS checa as permissões IAM para garantir que podemos utilizar a chave indicada.
  4. O KMS gera uma Data Key.
  5. A partir da chave gerada no passo anterior, duas Data Keys são enviadas de volta para o cliente, a Data Encryption Key (DEK) no formato Plaintext (texto) juntamente com a uma DEK encriptada.
  6. A DEK encriptada é usada para encriptar o arquivo de 10 MB e gerar um arquivo encriptado no lado cliente. Este arquivo contém a DEK encriptada e o arquivo de 10 MB encriptado. Os dois arquivos são “envelopados” (encapsulados) juntos dentro de um único arquivo final.
LAB

A sequência a seguir mostra como realizar a encriptação de um arquivo texto de 10 MB (file10mb.txt) usando a API GenerateDataKey chamado através do AWS CLI.

O SDK usa Python no lado cliente para fazer a encriptação, assim, os pacotes Python já devem estar instalados corretamente.

Foram usadas as seguintes referências:

https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/crypto-cli-install.html

https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/crypto-cli-examples.html

https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html

https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html

A tela abaixo mostra a instalação do pacote de encriptação baseado em Python.

				
					python -V

pip install aws-encryption-sdk-cli

aws-encryption-cli --version

				
			

A seguir estão os comandos executados durante a encriptação e desencriptação de um arquivo de 10 MB. O arquivo original tem 10 MB e está localizado no diretório c:\temp. O arquivo gerado pela encriptação fica em c:\temp\encrypt e o arquivo gerado pela desencriptação fica em c:\temp\decrypt.

				
					dir

Get-Content c:\temp\file10mb.txt -Tail 5

aws-encryption-cli --encrypt --input file10mb.txt --wrapping-keys key=arn:aws:kms:sa-east-1:530960511476:key/651b6437-923d-4607-a334-400f2f269fc9 --metadata-output c:\temp\encrypt\Metadata_encrypt.txt --output c:\temp\encrypt\file10mb_encrypted

dir .\encrypt\

Get-Content c:\temp\encrypt\file10mb_encrypted -Tail 5

aws-encryption-cli --decrypt --input c:\temp\encrypt\file10mb_encrypted --wrapping-keys key=arn:aws:kms:sa-east-1:530960511476:key/651b6437-923d-4607-a334-400f2f269fc9 --metadata-output c:\temp\decrypt\Metadata.txt --output c:\temp\decrypt\file10mb

dir .\decrypt\

Get-Content c:\temp\decrypt\file10mb -Tail 5

				
			

A tela abaixo mostra a execução dos comandos.

Neste post foi possível mostrar o funcionamento do Envelope Encryption de forma simplificada. O procedimento ocorre do lado cliente e tem o objetivo de utilizar a API GenerateDataKey e o AWS Encryption SDK para executar o processo de encriptação de dados.

It’s done!

Bruno Veiga

Bruno Veiga

Arquiteto Cloud e Arquiteto de Soluções. Me dedicando em compartilhar conhecimento e ajudar empresas a encontrar as melhores soluções tecnológicas para os problemas do negócio com agilidade, segurança, equipes alinhadas e dentro do orçamento.