Criptografia Assimétrica com RSA em Criptografia

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você explorará os princípios da criptografia assimétrica, um pilar da criptografia moderna. Diferentemente da criptografia simétrica, que utiliza uma única chave tanto para criptografia quanto para descriptografia, a criptografia assimétrica utiliza um par de chaves: uma chave pública e uma chave privada.

A chave pública é usada para criptografar e pode ser compartilhada com qualquer pessoa. A chave privada é mantida em segredo e é usada para descriptografar. Este mecanismo permite comunicação segura sem a necessidade de compartilhar uma chave secreta previamente.

Utilizaremos o algoritmo RSA, amplamente adotado, e a poderosa ferramenta de linha de comando openssl para demonstrar este processo. Você aprenderá a gerar um par de chaves, criptografar uma mensagem com a chave pública e descriptografá-la com a chave privada. Todas as operações serão realizadas no terminal, dentro do seu diretório ~/project.

Fundamentos da Criptografia Assimétrica

Nesta etapa, você aprenderá os conceitos centrais da criptografia assimétrica, também conhecida como criptografia de chave pública. Esta é uma etapa conceitual sem comandos para executar, mas entender esses princípios é crucial para as tarefas práticas que se seguem.

A criptografia assimétrica baseia-se em duas chaves distintas, mas matematicamente ligadas:

  • Chave Pública (Public Key): Esta chave é disponibilizada a todos. Sua função principal é criptografar dados. Qualquer pessoa que possua a chave pública pode criptografar uma mensagem, mas não pode usá-la para descriptografar essa mesma mensagem. Pense nela como a abertura de uma caixa de correio: qualquer um pode depositar uma carta.

  • Chave Privada (Private Key): Esta chave deve ser mantida secreta e segura pelo seu proprietário. Sua função é descriptografar dados que foram criptografados com sua chave pública correspondente. Somente a pessoa que detém a chave privada pode descriptografar a mensagem. Em nossa analogia da caixa de correio, a chave privada é a chave única que pode abrir a caixa e recuperar as cartas.

Essa relação de mão única é a base da comunicação segura através de redes inseguras. Nas etapas seguintes, você gerará seu próprio par de chaves pública/privada e os utilizará para criptografar e descriptografar uma mensagem.

Gerar Par de Chaves RSA

Nesta etapa, você gerará um par de chaves RSA usando a ferramenta de linha de comando openssl. Este comando criará um único arquivo que contém os componentes da chave privada e da chave pública.

Execute o seguinte comando no seu terminal. Todos os comandos neste laboratório devem ser executados a partir do diretório padrão ~/project.

openssl genrsa -out private.pem 2048

Vamos analisar este comando:

  • openssl: O comando para invocar o toolkit OpenSSL.
  • genrsa: O comando específico para gerar uma chave privada RSA.
  • -out private.pem: Este flag especifica o nome do arquivo de saída para a chave. Estamos nomeando-o como private.pem.
  • 2048: Este é o comprimento da chave em bits. 2048 bits é um comprimento padrão e seguro para chaves RSA.

Agora, verifique se o arquivo private.pem foi criado no seu diretório atual usando o comando ls.

ls

Você deverá ver private.pem listado na saída.

private.pem

Extrair Chave Pública

Nesta etapa, você extrairá a chave pública do arquivo private.pem que você criou. Embora o arquivo da chave privada contenha todos os componentes necessários, você precisa de um arquivo de chave pública separado que possa compartilhar com segurança com outras pessoas para criptografar mensagens.

Use o seguinte comando para extrair a chave pública:

openssl rsa -in private.pem -pubout -out public.pem

Aqui está uma análise do comando:

  • openssl rsa: Este comando é usado para processar chaves RSA.
  • -in private.pem: Especifica o arquivo de entrada, que é a nossa chave privada.
  • -pubout: Este flag instrui o openssl a extrair e gerar a parte pública da chave.
  • -out public.pem: Especifica o nome do arquivo de saída para a chave pública.

O comando produzirá uma saída curta confirmando a operação.

writing RSA key

Agora, liste os arquivos no seu diretório novamente para ver tanto a chave privada quanto a pública.

ls

Você deverá ver agora private.pem e public.pem.

private.pem  public.pem

Você pode visualizar o conteúdo do arquivo da chave pública. É um arquivo de texto no formato PEM.

cat public.pem
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
...
-----END PUBLIC KEY-----

Criptografar Mensagem com Chave Pública

Nesta etapa, você criará uma mensagem secreta e, em seguida, a criptografará usando a chave pública que acabou de extrair. Somente alguém com a chave privada correspondente poderá descriptografá-la.

Primeiro, vamos criar um arquivo de texto simples contendo nossa mensagem secreta.

echo "This is a secret message." > message.txt

Este comando cria um arquivo chamado message.txt com o conteúdo especificado. Agora, vamos criptografar este arquivo usando a chave pública.

openssl pkeyutl -encrypt -pubin -inkey public.pem -in message.txt -out encrypted.bin

Vamos examinar este comando:

  • openssl pkeyutl: Uma utilidade para realizar operações de chave pública, como criptografia e descriptografia.
  • -encrypt: Especifica que queremos realizar uma operação de criptografia.
  • -pubin: Indica que a chave de entrada (-inkey) é uma chave pública.
  • -inkey public.pem: Especifica a chave pública a ser usada para criptografia.
  • -in message.txt: O arquivo de entrada contendo a mensagem em texto simples (plaintext).
  • -out encrypted.bin: O arquivo de saída onde os dados criptografados (ciphertext) serão armazenados.

Após executar o comando, um novo arquivo encrypted.bin será criado. Se você tentar visualizar seu conteúdo, verá dados binários ilegíveis, que é a forma criptografada da sua mensagem.

cat encrypted.bin

A saída será uma sequência de caracteres embaralhados, confirmando que a mensagem está criptografada.

Descriptografar Mensagem com Chave Privada

Nesta etapa final, você descriptografará a mensagem criptografada usando sua chave privada para recuperar o texto simples (plaintext) original. Isso demonstra que apenas o detentor da chave privada pode acessar a informação secreta.

Use o seguinte comando para descriptografar encrypted.bin:

openssl pkeyutl -decrypt -inkey private.pem -in encrypted.bin -out decrypted.txt

Vamos revisar as opções do comando:

  • openssl pkeyutl: A mesma utilidade de antes.
  • -decrypt: Desta vez, especificamos a operação de descriptografia.
  • -inkey private.pem: Especifica a chave privada a ser usada para descriptografia.
  • -in encrypted.bin: O arquivo de entrada contendo o texto cifrado (ciphertext).
  • -out decrypted.txt: O arquivo de saída onde o texto simples recuperado será salvo.

Este comando criará um novo arquivo chamado decrypted.txt. Para verificar se a descriptografia foi bem-sucedida, exiba o conteúdo deste novo arquivo.

cat decrypted.txt

Você deverá ver sua mensagem original perfeitamente restaurada.

This is a secret message.

Parabéns! Você realizou com sucesso um ciclo completo de criptografia e descriptografia assimétrica usando RSA e OpenSSL.

Resumo

Neste laboratório (lab), você adquiriu experiência prática com criptografia assimétrica usando o algoritmo RSA e o conjunto de ferramentas OpenSSL.

Você aprendeu a diferença fundamental entre chaves públicas e privadas e seus respectivos papéis na proteção de comunicações.

Especificamente, você praticou as seguintes habilidades principais:

  • Geração de um par de chaves RSA de 2048 bits usando openssl genrsa.
  • Extração de uma chave pública de um arquivo de chave privada usando openssl rsa.
  • Criptografia de uma mensagem em texto simples (plaintext) com uma chave pública usando openssl pkeyutl.
  • Descriptografia do texto cifrado resultante com a chave privada correspondente usando openssl pkeyutl.

Essas habilidades são fundamentais para entender e implementar sistemas seguros em diversas aplicações, desde a navegação web segura (HTTPS) até e-mails criptografados e assinaturas digitais.