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 comoprivate.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 oopenssla 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.



