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 arquivoaes.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 arquivoaes.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 randpara gerar uma chave AES forte de 256 bits. - Você usou
openssl encpara criptografar um arquivo de texto, tornando-o ilegível. - Você usou o mesmo comando com a flag
-dpara descriptografar o arquivo de volta ao seu estado original. - Finalmente, você usou o comando
diffpara 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.



