Publicação Técnica
Como criptografar e descriptografar seus dados com a AWS Encryption CLI
Neste post, iremos implementar um processo de encriptação e decriptação de arquivos utilizando o Encryption CLI e chaves do Amazon KMS.
Neste post, iremos implementar um processo de encriptação e decriptação de arquivos utilizando o Encryption CLI e chaves do Amazon KMS.

Criptografar o arquivo
Vamos usar o AWS Encryption CLI para criptografar um arquivo chamado secret.txt em seu diretório atual. Vamos escrever o arquivo de saída criptografada no mesmo diretório. Este arquivo secret.txt contém uma string Hello World, mas poderia perfeitamente conter dados relevantes do seu negócio.
$ ls
secret.txt
$ cat secret.txt
Hello World
Ao criptografar os dados, você irá precisar especificar uma chave mestra. Este exemplo usa um AWS KMS CMK, mas você pode usar uma chave mestra de qualquer provedor de chave mestra que seja compatível com o SDK de criptografia da AWS. O AWS Encryption CLI usa a chave mestra para gerar uma chave de dados exclusiva para cada arquivo que criptografa.
Se você usar um AWS KMS CMK como sua chave mestra, será necessário instalar e configurar a AWS Command Line Interface (AWS CLI) para que as credenciais usadas para autenticar no AWS KMS estejam disponíveis para o AWS Encryption CLI. Essas credenciais devem fornecer permissão para chamar as APIs GenerateDataKey e Decrypt do AWS KMS no CMK.
A primeira linha deste exemplo salva um AWS KMS CMK ID na variável $keyID. A segunda linha criptografa os dados no arquivo secret.txt. (A barra invertida, “\”, é o caractere de continuação de linha nos shells do Linux.)
Para executar o comando a seguir, substitua um identificador CMK válido pelo valor do espaço reservado no comando.
$ keyID = “111122223333”
$ aws-encryption-cli — encrypt — input secret.txt \
— master-keys key=$keyID \
— encryption-context purpose=test \
— metadata-output ~/metadata \
— output .
Este comando usa o parâmetro — encrypt (-e) para especificar a ação de criptografia e o parâmetro — master-keys(-m) com um atributo key para especificar um AWS KMS CMK. Se não estiver usando um AWS KMS CMK, você precisará incluir um atributo provider que identifica o provedor de chave mestra.
O comando usa o parâmetro — encryption-context (-c) para especificar um contexto de criptografia, purpose=test para a operação. O contexto de criptografia são dados não secretos que são criptograficamente vinculados aos dados criptografados e incluídos no texto simples na mensagem criptografada que a CLI retorna. Fornecer dados autenticados adicionais, como um contexto de criptografia, é uma prática recomendada.
O parâmetro — metadata-output informa ao AWS Encryption CLI onde gravar os metadados para o comando encrypt. Os metadados incluem os caminhos completos para os arquivos de entrada e saída, o contexto de criptografia, o conjunto de algoritmos e outras informações valiosas que você pode usar para revisar a operação e verificar se ela atende aos seus padrões de segurança.
Os parâmetros — input(-i) e — output(-o) são necessários em cada comando AWS Encryption CLI. Neste exemplo, o arquivo de entrada é o arquivo secret.txt. O local de saída é o diretório atual, que é representado por um ponto (“.”).
Quando o comando — encrypt é bem-sucedido, ele cria um novo arquivo que contém os dados criptografados, mas não retorna nenhuma saída. Para ver os resultados do comando, use um comando de listagem de diretório, como ls ou dir. A execução de um comando ls neste exemplo mostra que o AWS Encryption CLI gerou o arquivo secret.txt.encrypted.
$ ls
secret.txt secret.txt.encrypted
Por padrão, o arquivo de saída que o comando — encrypt cria tem o mesmo nome do arquivo de entrada, mais um sufixo .encrypted. Você pode usar o parâmetro — suffix para especificar um sufixo personalizado.
O arquivo secret.txt.encrypted contém uma mensagem criptografada única, portátil e segura. A mensagem criptografada inclui os dados criptografados, uma cópia criptografada da chave de dados que criptografou os dados e metadados, incluindo o contexto de criptografia de texto simples que eu forneci.
Você pode gerenciar um arquivo criptografado da maneira que desejar, incluindo copiá-lo para um bucket do Amazon S3 ou arquivá-lo para uso posterior.
Descriptografar um arquivo
Agora, vamos usar o AWS Encryption CLI para descriptografar o arquivo secret.txt.encrypted. Se você tiver as permissões necessárias em sua chave mestra, poderá usar qualquer versão do AWS Encryption SDK para descriptografar um arquivo que o AWS Encryption CLI criptografou, incluindo as bibliotecas AWS Encryption SDK em Java e Python.
No entanto, você não pode usar outras ferramentas, como o cliente de criptografia Amazon S3 ou o cliente de criptografia Amazon DynamoDB, para descriptografar a mensagem criptografada porque eles usam um formato de mensagem criptografada incompatível.
O comando a seguir descriptografa o conteúdo do arquivo secret.txt.encrypted.
$ aws-encryption-cli — decrypt — input secret.txt.encrypted \
— encryption-context purpose=test \
— metadata-output ~/metadata \
— output .
O comando — decrypt requer uma mensagem criptografada, como a que o comando — encrypt retornou, e os parâmetros — input e — output.
Este comando não possui parâmetro — master-keys. Um parâmetro — master-keys é necessário apenas se você não estiver usando um AWS KMS CMK.
Neste comando de exemplo, o parâmetro — input especifica o arquivo secret.txt.encrypted. O parâmetro — output especifica o diretório atual, que novamente é representado por um ponto (“.”).
O parâmetro — encryption-context fornece o mesmo contexto de criptografia que foi usado no comando encrypt. Este parâmetro não é obrigatório, mas verificar o contexto de criptografia durante a descriptografia é uma prática criptográfica recomendada.
O parâmetro — metatdata-output informa ao comando onde gravar os metadados para o comando descriptografar. Se o arquivo existir, este parâmetro anexará os metadados ao arquivo existente. O AWS Encryption CLI também tem parâmetros que substituem o arquivo de metadados ou suprimem os metadados.
Quando é bem-sucedido, o comando decrypt gera o arquivo de dados descriptografados (texto simples), mas não retorna nenhuma saída. Para ver os resultados do comando de descriptografia, use um comando que obtenha o conteúdo do arquivo, como catou Get-Content.
$ ls
secret.txt secret.txt.encrypted secret.txt.encrypted.decrypted
$ cat secret.txt.encrypted.decrypted
Hello World
O arquivo de saída que o comando — decrypt criou tem o mesmo nome do arquivo de entrada, mais um sufixo .decrypted. O parâmetro — suffix funciona em comandos — decrypt também.
Criptografar diretórios e muito mais
Além de criptografar e descriptografar um único arquivo, você pode usar o AWS Encryption CLI para criptografar e descriptografar strings que você canaliza para o CLI e todos os arquivos selecionados em um diretório e seus subdiretórios, ou volumes locais ou remotos.
O AWS Encryption CLI também oferece suporte a recursos mais avançados do AWS Encryption SDK, incluindo conjuntos de algoritmos alternativos, provedores alternativos de chave mestra baseados em Python, criptografia com várias chaves mestras, criptografando dados transmitidos, criando mensagens criptografadas com tamanhos de quadros personalizados e chave de dados cache.
Caso tenha alguma dúvida ou algum problema com esse tutorial, fique a vontade para entrar em contato. ;-)
Até o próximo post! =)
Comentários
Todo comentário passa por moderação antes de aparecer aqui. Nada é publicado automaticamente.
Carregando…