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.
O conceito central
Section titled “O conceito central”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 ──┘Por que “assimétrica”?
Section titled “Por que “assimétrica”?”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).
Os dois usos fundamentais
Section titled “Os dois usos fundamentais”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:
- Alice obtém a chave pública de Bob (que pode estar em um diretório público, site, servidor de chaves)
- Alice cifra a mensagem usando essa chave pública
- Alice envia o texto cifrado para Bob
- 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 BobBob: Texto cifrado + Chave Privada de Bob → Mensagem originalUso 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:
- Alice calcula um hash da mensagem
- Alice cifra esse hash com sua chave privada, produzindo a assinatura digital
- Alice envia a mensagem junto com a assinatura
- 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álidaNote que, na assinatura, o uso das chaves é invertido: a chave privada cifra, e a chave pública decifra. Esse é o segundo lado da assimetria.
Os elementos essenciais
Section titled “Os elementos essenciais”Para que o esquema funcione, alguns componentes bem definidos precisam estar em jogo.
O par de chaves
Section titled “O par de chaves”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)
O algoritmo
Section titled “O algoritmo”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
Infraestrutura de chaves públicas (PKI)
Section titled “Infraestrutura de chaves públicas (PKI)”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.
Um exemplo prático em Linux
Section titled “Um exemplo prático em Linux”Vamos gerar um par de chaves RSA, cifrar uma mensagem para o próprio usuário e depois decifrá-la, usando o openssl.
1. Gerar o par de chaves
Section titled “1. Gerar o par de chaves”openssl genpkey -algorithm RSA \ -pkeyopt rsa_keygen_bits:2048 \ -out chave_privada.pemSignificado de cada opção:
genpkey: subcomando doopensslpara 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”openssl pkey -in chave_privada.pem -pubout -out chave_publica.pemSignificado 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”echo "Mensagem secreta para o Bob" > mensagem.txt
openssl pkeyutl -encrypt \ -pubin -inkey chave_publica.pem \ -in mensagem.txt -out mensagem.encSignificado 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
4. Decifrar com a chave privada
Section titled “4. Decifrar com a chave privada”openssl pkeyutl -decrypt \ -inkey chave_privada.pem \ -in mensagem.enc -out mensagem_recuperada.txtSignificado 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
cat mensagem_recuperada.txt# saída: Mensagem secreta para o Bob5. Assinar e verificar
Section titled “5. Assinar e verificar”Para demonstrar o uso em assinaturas:
# Alice assina a mensagem com sua chave privadaopenssl dgst -sha256 -sign chave_privada.pem \ -out assinatura.bin mensagem.txtSignificado 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á salvamensagem.txt: arquivo cujo conteúdo será assinado
# Bob verifica a assinatura com a chave pública de Aliceopenssl dgst -sha256 -verify chave_publica.pem \ -signature assinatura.bin mensagem.txtSignificado de cada opção:
-verify chave_publica.pem: chave pública usada para verificar-signature assinatura.bin: arquivo da assinatura a ser verificadamensagem.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.
Vantagens e limitações do modelo
Section titled “Vantagens e limitações do modelo”Vantagens
Section titled “Vantagens”- 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
Limitações
Section titled “Limitações”- 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
O impacto histórico
Section titled “O impacto histórico”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.
Considerações Finais
Section titled “Considerações Finais”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.
