Fundamentos de Criptografia Simétrica em Criptografia

LinuxBeginner
Pratique Agora

Introdução

A criptografia simétrica é um conceito fundamental em criptografia onde uma única chave é usada tanto para criptografar quanto para descriptografar informações. Este método é rápido e eficiente, tornando-o ideal para criptografar grandes volumes de dados.

Neste laboratório, você ganhará experiência prática com criptografia simétrica usando a poderosa ferramenta de linha de comando openssl em um ambiente Linux. Você percorrerá o processo completo: gerando uma chave secreta, criptografando um arquivo de texto, descriptografando-o e, finalmente, verificando se o arquivo descriptografado é idêntico ao original.

Conceito de Criptografia Simétrica

Nesta etapa, revisaremos brevemente o conceito central da criptografia simétrica. A parte "simétrica" significa que a mesma chave que tranca (criptografa) os dados é usada também para destrancá-los (descriptografá-los).

Imagine que você tem um cofre físico. Você usa uma chave para trancá-lo. Para abri-lo novamente, você deve usar exatamente a mesma chave. Na criptografia simétrica, essa chave é um pedaço de informação digital e deve ser compartilhada de forma segura entre as partes que precisam criptografar e descriptografar os dados. Se essa chave única for comprometida, a segurança dos dados criptografados é perdida.

Para este laboratório, trabalharemos com um arquivo de texto simples. Um arquivo chamado original.txt foi pré-criado para você no diretório ~/project. Você pode visualizar seu conteúdo e confirmar que é um arquivo de texto simples e legível.

Vamos listar os arquivos no diretório atual para visualizá-lo:

ls -l

Você deverá ver o arquivo original.txt na saída:

-rw-rw-r-- 1 labex labex 26 Oct 20 08:56 original.txt

Agora, vamos visualizar seu conteúdo:

cat original.txt

A saída será a mensagem de texto simples contida no arquivo:

This is a secret message.

Nas próximas etapas, criptografaremos este arquivo para torná-lo ilegível e, em seguida, o descriptografaremos de volta à sua forma original.

Gerar Chave AES

Nesta etapa, você gerará uma chave aleatória e segura para o nosso processo de criptografia. A força da criptografia simétrica depende muito do sigilo e da aleatoriedade da chave. Uma chave previsível é fácil de adivinhar, tornando a criptografia inútil.

Usaremos o comando openssl rand para gerar uma chave aleatória criptograficamente forte. Geraremos uma chave de 256 bits, que é um comprimento padrão para o algoritmo AES (Advanced Encryption Standard).

Execute o seguinte comando para gerar uma chave de 32 bytes (256 bits) em formato hexadecimal e salvá-la em um arquivo chamado aes.key:

openssl rand -hex 32 > aes.key

Vamos analisar este comando:

  • openssl rand: O comando para gerar dados aleatórios.
  • -hex: Formata a saída como uma string hexadecimal.
  • 32: Especifica o número de bytes de dados aleatórios a serem gerados. Como cada caractere hexadecimal representa 4 bits (ou meio byte), 32 bytes de dados resultarão em uma string hexadecimal de 64 caracteres.
  • > aes.key: Redireciona a saída do comando e a salva no arquivo aes.key.

Agora, vamos visualizar a chave gerada. Lembre-se, sua chave será diferente do exemplo abaixo, pois é gerada aleatoriamente.

cat aes.key

Você verá uma longa sequência de caracteres hexadecimais, que é a sua chave secreta de 256 bits:

2da75d4f284618ed6933d0e743757ed014ba39a1a8aa1879ebbbfe53b92d519a

Este arquivo, aes.key, agora contém o segredo que usaremos tanto para criptografar quanto para descriptografar nossos dados.

Criptografar Arquivo com AES

Nesta etapa, você usará a chave que gerou para criptografar o arquivo original.txt. Usaremos o comando openssl enc, que é uma ferramenta versátil para criptografia e descriptografia.

Utilizaremos o cipher AES-256-CBC.

  • AES-256: Refere-se ao Advanced Encryption Standard com uma chave de 256 bits.
  • CBC: Significa Cipher Block Chaining (Encadeamento de Blocos de Cifra), um modo de operação que adiciona aleatoriedade e garante que blocos idênticos de texto simples não resultem em blocos idênticos de texto cifrado.

Execute o seguinte comando para criptografar o arquivo:

openssl enc -aes-256-cbc -pbkdf2 -salt -in original.txt -out encrypted.dat -pass file:./aes.key

Vamos examinar as opções do comando:

  • openssl enc: O comando para ciphers de criptografia.
  • -aes-256-cbc: Especifica o algoritmo de criptografia a ser usado.
  • -pbkdf2: Usa uma função de derivação de chave baseada em padrão moderna (PBKDF2) para evitar avisos de descontinuação (deprecation warnings).
  • -salt: Adiciona um salt aleatório à chave antes da criptografia. Esta é uma prática de segurança crucial que protege contra certos tipos de ataques.
  • -in original.txt: Especifica o arquivo de entrada a ser criptografado.
  • -out encrypted.dat: Especifica o nome do arquivo de saída que armazenará os dados criptografados.
  • -pass file:./aes.key: Indica ao OpenSSL para ler a senha (no nosso caso, a chave simétrica) do arquivo aes.key.

Após executar o comando, um novo arquivo chamado encrypted.dat será criado. Vamos tentar visualizar seu conteúdo:

cat encrypted.dat

A saída será uma confusão de caracteres ilegíveis, confirmando que o arquivo está criptografado.

Salted___Mi72j)NU_nJ_h9s(0]%

Você agora criptografou com sucesso sua mensagem secreta. Qualquer pessoa que obtenha este arquivo sem o aes.key não conseguirá ler seu conteúdo.

Descriptografar Arquivo com AES

Nesta etapa, você irá descriptografar o arquivo encrypted.dat para recuperar a mensagem original. Como esta é uma criptografia simétrica, usaremos a mesma chave (aes.key) e o mesmo comando base (openssl enc) que usamos para a criptografia.

A principal diferença é a adição da flag -d, que instrui o OpenSSL a realizar a descriptografia em vez da criptografia.

Execute o seguinte comando para descriptografar o arquivo:

openssl enc -d -aes-256-cbc -pbkdf2 -in encrypted.dat -out decrypted.txt -pass file:./aes.key

Este comando é muito semelhante ao comando de criptografia:

  • -d: Esta flag especifica que queremos descriptografar o arquivo de entrada.
  • -aes-256-cbc: Devemos especificar o mesmo cipher que foi usado para a criptografia.
  • -pbkdf2: Você deve usar a mesma função de derivação de chave (key derivation function) que foi usada para a criptografia.
  • -in encrypted.dat: O arquivo de entrada é agora o nosso dado criptografado.
  • -out decrypted.txt: O arquivo de saída onde o texto descriptografado e legível será salvo.
  • -pass file:./aes.key: Fornecemos a mesma chave que foi usada para criptografar o arquivo.

Após a conclusão do comando, um novo arquivo chamado decrypted.txt será criado. Vamos visualizar seu conteúdo para verificar se a descriptografia foi bem-sucedida.

cat decrypted.txt

A saída deve ser a mensagem original, exatamente como estava em original.txt:

This is a secret message.

Parabéns! Você concluiu com sucesso um ciclo completo de criptografia e descriptografia.

Verificar Integridade do Arquivo

Nesta etapa final, verificaremos se o processo de descriptografia foi perfeito e se o arquivo decrypted.txt é uma cópia exata do arquivo original.txt. Embora possamos confirmar isso visualmente para uma mensagem curta, uma verificação programática é necessária para arquivos maiores ou scripts automatizados.

O comando diff no Linux é a ferramenta perfeita para este trabalho. Ele compara dois arquivos linha por linha e relata quaisquer diferenças. Se os arquivos forem idênticos, o diff não produzirá nenhuma saída.

Execute o comando diff para comparar os arquivos original e descriptografado:

diff original.txt decrypted.txt

Se o comando for executado e você retornar ao prompt de comando sem mensagens, isso significa que os arquivos são idênticos. Este silêncio é a confirmação do sucesso. Isso prova que seus dados mantiveram sua integridade durante todo o ciclo de criptografia e descriptografia.

Para ver todos os arquivos com os quais você trabalhou neste laboratório, você pode executar ls -l mais uma vez:

ls -l

Você verá o arquivo original, a chave, os dados criptografados e o arquivo final descriptografado:

-rw-rw-r-- 1 labex labex 65 Oct 20 08:57 aes.key
-rw-rw-r-- 1 labex labex 26 Oct 20 08:57 decrypted.txt
-rw-rw-r-- 1 labex labex 48 Oct 20 08:57 encrypted.dat
-rw-rw-r-- 1 labex labex 26 Oct 20 08:56 original.txt

Isso confirma que você gerenciou com sucesso todo o ciclo de vida da criptografia simétrica.

Resumo

Neste laboratório, você adquiriu experiência prática com os fundamentos da criptografia simétrica usando o openssl em um ambiente Linux.

Você realizou com sucesso um fluxo de trabalho completo de criptografia e descriptografia:

  • Você aprendeu o conceito central de uma única chave compartilhada tanto para criptografia quanto para descriptografia.
  • Você usou openssl rand para gerar uma chave AES forte de 256 bits.
  • Você usou openssl enc para criptografar um arquivo de texto, tornando-o ilegível.
  • Você usou o mesmo comando com a flag -d para descriptografar o arquivo de volta ao seu estado original.
  • Finalmente, você usou o comando diff para verificar programaticamente que os dados descriptografados eram idênticos aos originais, confirmando a integridade dos dados.

Este exercício prático fornece uma base sólida para entender como os ciphers simétricos funcionam e como são aplicados na prática para proteger dados.