Skip to content

Criptografia Assimétrica - Conceito e Funcionamento

A criptografia assimétrica, também chamada de criptografia de chave pública, foi a maior revolução conceitual da criptografia moderna. Enquanto a criptografia simétrica depende de uma chave única compartilhada entre as partes, a assimétrica introduz um par de chaves matematicamente relacionadas, com propriedades que resolvem simultaneamente dois problemas aparentemente insolúveis: a distribuição de chaves e a prova de identidade.

Neste post exploraremos o conceito fundamental, a estrutura do par de chaves, os processos de cifragem e assinatura, as propriedades matemáticas que sustentam o modelo e a razão pela qual ele é considerado um marco histórico na segurança da informação.

Em um sistema assimétrico, cada participante possui duas chaves distintas, geradas simultaneamente como um par matematicamente relacionado:

  • Chave pública: pode ser distribuída livremente a qualquer pessoa
  • Chave privada: mantida em segredo absoluto pelo dono

A propriedade matemática central é que:

  • Dados cifrados com a chave pública só podem ser decifrados com a chave privada correspondente
  • Dados assinados com a chave privada podem ser verificados com a chave pública correspondente

Essa assimetria entre as duas operações é o que dá nome ao modelo: as chaves são diferentes para cifrar e decifrar, e cada uma só desempenha um papel.

Chave pública (Bob) → cifra ────┐
│
Chave privada (Bob) → decifra ──┘
Chave privada (Alice) → assina ────┐
│
Chave pública (Alice) → verifica ──┘

O termo vem exatamente dessa quebra de simetria. Na criptografia simétrica, a mesma chave cifra e decifra. Na assimétrica, uma chave não pode fazer o papel da outra: a chave pública não decifra o que ela mesma cifrou, e a chave privada não é usada para cifrar mensagens para o próprio dono.

Além disso, é computacionalmente inviável derivar a chave privada a partir da chave pública, mesmo tendo acesso irrestrito a esta última. Essa inviabilidade se baseia em problemas matemáticos difíceis, como a fatoração de números grandes (RSA) ou o logaritmo discreto sobre curvas elípticas (ECC).

A criptografia assimétrica oferece dois serviços primários, cada um usando o par de chaves de forma diferente.

Uso 1: Cifragem para o destinatário (confidencialidade)

Section titled “Uso 1: Cifragem para o destinatário (confidencialidade)”

Para enviar uma mensagem confidencial a Bob:

  1. Alice obtém a chave pública de Bob (que pode estar em um diretório público, site, servidor de chaves)
  2. Alice cifra a mensagem usando essa chave pública
  3. Alice envia o texto cifrado para Bob
  4. Bob usa sua chave privada para decifrar e ler a mensagem

Mesmo que um atacante intercepte o texto cifrado e tenha acesso à chave pública de Bob (afinal, ela é pública), ele não consegue decifrar a mensagem sem a chave privada correspondente.

Alice: Mensagem + Chave Pública de Bob → Texto cifrado → Envia para Bob
Bob: Texto cifrado + Chave Privada de Bob → Mensagem original

Uso 2: Assinatura digital (autenticidade e integridade)

Section titled “Uso 2: Assinatura digital (autenticidade e integridade)”

Para provar que uma mensagem foi realmente escrita por Alice:

  1. Alice calcula um hash da mensagem
  2. Alice cifra esse hash com sua chave privada, produzindo a assinatura digital
  3. Alice envia a mensagem junto com a assinatura
  4. Qualquer pessoa (Bob, Carol, etc.) pode usar a chave pública de Alice para verificar a assinatura

Se o hash calculado pelo verificador coincidir com o hash recuperado da assinatura, está provado que:

  • A mensagem foi assinada por quem detém a chave privada de Alice (autenticidade)
  • A mensagem não foi alterada desde a assinatura (integridade)
  • Alice não pode negar depois ter produzido aquela mensagem (não-repúdio)
Alice: Mensagem → Hash → Cifra com Chave Privada → Assinatura
Mensagem + Assinatura → Envia
Bob: Mensagem → Hash calculado por Bob
Assinatura → Decifra com Chave Pública de Alice → Hash original
Compara os dois hashes → se iguais, assinatura válida

Note que, na assinatura, o uso das chaves é invertido: a chave privada cifra, e a chave pública decifra. Esse é o segundo lado da assimetria.

Para que o esquema funcione, alguns componentes bem definidos precisam estar em jogo.

Gerado em uma única operação matemática, de forma que:

  • A chave pública pode ser derivada da chave privada
  • A chave privada não pode ser derivada da chave pública (dentro de tempo viável)

Define as operações matemáticas que ligam as duas chaves. Os principais algoritmos simétricos (que veremos no próximo post) são:

  • RSA, baseado na dificuldade de fatorar números grandes
  • ECC (criptografia de curvas elípticas), baseado no logaritmo discreto sobre curvas
  • Diffie-Hellman, usado para acordo de chaves (não cifragem direta)
  • Ed25519 e EdDSA, variantes modernas para assinaturas

Como qualquer pessoa pode publicar uma chave pública alegando ser Alice, surge a questão: como garantir que uma chave pública realmente pertence a quem diz? A resposta é a PKI (Public Key Infrastructure), composta por autoridades certificadoras (CA), certificados digitais e cadeias de confiança. Esse tema terá seu próprio bloco mais adiante na série.

Vamos gerar um par de chaves RSA, cifrar uma mensagem para o próprio usuário e depois decifrá-la, usando o openssl.

Terminal window
openssl genpkey -algorithm RSA \
-pkeyopt rsa_keygen_bits:2048 \
-out chave_privada.pem

Significado de cada opção:

  • genpkey: subcomando do openssl para geração de chaves privadas
  • -algorithm RSA: define o algoritmo como RSA
  • -pkeyopt rsa_keygen_bits:2048: parâmetro específico do RSA, define o tamanho da chave em 2048 bits
  • -out chave_privada.pem: arquivo de saída onde a chave privada será salva no formato PEM

2. Extrair a chave pública correspondente

Section titled “2. Extrair a chave pública correspondente”
Terminal window
openssl pkey -in chave_privada.pem -pubout -out chave_publica.pem

Significado de cada opção:

  • pkey: subcomando para manipulação de chaves no formato PKEY
  • -in chave_privada.pem: chave privada de origem
  • -pubout: indica que queremos extrair apenas a parte pública
  • -out chave_publica.pem: arquivo de saída da chave pública

Agora temos dois arquivos: chave_privada.pem (mantida em segredo) e chave_publica.pem (livremente distribuível).

3. Cifrar uma mensagem usando a chave pública

Section titled “3. Cifrar uma mensagem usando a chave pública”
Terminal window
echo "Mensagem secreta para o Bob" > mensagem.txt
openssl pkeyutl -encrypt \
-pubin -inkey chave_publica.pem \
-in mensagem.txt -out mensagem.enc

Significado de cada opção:

  • pkeyutl: subcomando genérico para operações com chaves PKEY (cifragem, decifragem, assinatura, verificação, derivação)
  • -encrypt: define a operação como cifragem
  • -pubin: informa que a chave fornecida em -inkey é uma chave pública
  • -inkey chave_publica.pem: arquivo da chave pública usada para cifrar
  • -in mensagem.txt: arquivo de entrada com o texto claro
  • -out mensagem.enc: arquivo de saída com o texto cifrado
Terminal window
openssl pkeyutl -decrypt \
-inkey chave_privada.pem \
-in mensagem.enc -out mensagem_recuperada.txt

Significado de cada opção:

  • pkeyutl -decrypt: operação de decifragem
  • -inkey chave_privada.pem: chave privada usada para decifrar (não precisa de -pubin, pois a chave privada é a padrão)
  • -in mensagem.enc: texto cifrado
  • -out mensagem_recuperada.txt: arquivo de saída com o texto claro recuperado
Terminal window
cat mensagem_recuperada.txt
# saída: Mensagem secreta para o Bob

Para demonstrar o uso em assinaturas:

Terminal window
# Alice assina a mensagem com sua chave privada
openssl dgst -sha256 -sign chave_privada.pem \
-out assinatura.bin mensagem.txt

Significado de cada opção:

  • dgst: subcomando que calcula resumos (hashes) e também assina
  • -sha256: função hash utilizada antes da assinatura
  • -sign chave_privada.pem: chave privada usada para assinar
  • -out assinatura.bin: arquivo onde a assinatura binária será salva
  • mensagem.txt: arquivo cujo conteúdo será assinado
Terminal window
# Bob verifica a assinatura com a chave pública de Alice
openssl dgst -sha256 -verify chave_publica.pem \
-signature assinatura.bin mensagem.txt

Significado de cada opção:

  • -verify chave_publica.pem: chave pública usada para verificar
  • -signature assinatura.bin: arquivo da assinatura a ser verificada
  • mensagem.txt: mensagem original cuja assinatura está sendo verificada

A saída será Verified OK se a assinatura for válida, ou Verification Failure caso a mensagem tenha sido alterada ou a chave esteja incorreta.

As propriedades matemáticas que tornam isso possível

Section titled “As propriedades matemáticas que tornam isso possível”

A criptografia assimétrica depende da existência de funções unidirecionais com alçapão (trapdoor one-way functions). São funções matemáticas que:

  • Podem ser calculadas facilmente em uma direção
  • São inviáveis de inverter sem conhecer um segredo específico (o “alçapão”)
  • Com o segredo, a inversão também fica fácil

No RSA, por exemplo, é fácil multiplicar dois primos grandes p e q para obter n = p × q, mas é extremamente difícil fatorar n de volta em p e q sem conhecer um dos fatores. A chave privada contém esse “alçapão”, a chave pública não.

  • Resolve o problema da distribuição de chaves: a chave pública pode ser enviada por qualquer canal
  • Permite assinaturas digitais e identidade verificável
  • Suporta não-repúdio: o autor não pode negar depois
  • Base para toda a PKI moderna e para certificados digitais
  • Muito mais lenta que a simétrica, tipicamente de 100 a 1000 vezes mais lenta
  • Exige chaves maiores para segurança equivalente (RSA de 3072 bits para equivaler a AES de 128 bits)
  • Não é adequada para cifrar grandes volumes de dados: na prática, cifra-se apenas a chave simétrica que será usada para o conteúdo real (criptografia híbrida)
  • Vulnerável à computação quântica (algoritmo de Shor), motivando os esforços pós-quânticos

Antes de 1976, criptografia era praticamente sinônimo de simétrica, com todas as suas limitações de distribuição. A publicação do artigo New Directions in Cryptography, por Whitfield Diffie e Martin Hellman, abriu caminho para toda uma nova família de protocolos. Em 1977, Rivest, Shamir e Adleman apresentaram o RSA, o primeiro algoritmo assimétrico prático, tornando-se por décadas o padrão.

Interessante notar que esse mesmo conceito já havia sido descoberto em sigilo pela GCHQ britânica, em 1973, por James Ellis, Clifford Cocks e Malcolm Williamson, mas o trabalho só foi declassificado nos anos 1990.

A criptografia assimétrica é a tecnologia que torna possível toda a infraestrutura moderna de comunicação segura: HTTPS, SSH, VPN, assinatura digital de documentos, bitcoin e criptomoedas, cadeias de confiança, autenticação sem senha, entre muitos outros.

A criptografia assimétrica introduz um conceito simples em sua essência (dois cálculos que se completam, mas não se invertem um pelo outro) e profundamente transformador em suas consequências. Ela permite que estranhos se comuniquem com segurança sem jamais terem trocado um segredo prévio, e que indivíduos ou organizações assinem documentos digitais com validade jurídica.

Nos próximos posts da série, veremos os principais algoritmos assimétricos em detalhe (RSA, ECC, Ed25519, Diffie-Hellman), seus casos de uso concretos em servidores Linux, e um comparativo direto com a criptografia simétrica para consolidar as diferenças entre os dois paradigmas.