Todos os artigos
130 artigos · atualizado semanalmente Veja nossas Ferramentas
Todos os artigos
Comparativos

Criptografia simétrica vs assimétrica: a diferença que confunde todo mundo

Simétrica usa uma chave, assimétrica usa um par public/private, e hashing não é criptografia. Entenda quando usar cada uma e por que o TLS usa as duas.

Criptografia simétrica vs assimétrica: a diferença que confunde todo mundo
COVER · Comparativos

Toda semana alguém aparece no canal de engenharia dizendo que vai "criptografar a senha no banco com uma chave secreta". E quase sempre o que a pessoa quer não é criptografia nenhuma. A confusão clássica é tratar tudo como "uma chave" só: TLS, senha de usuário, token de sessão, tudo no mesmo balaio. Mas existem dois modelos de criptografia que funcionam de formas opostas, e há um terceiro conceito que nem chave usa — e que é justamente onde a maioria escorrega.

Este artigo separa os três: criptografia simétrica, criptografia assimétrica e hashing. Quando usar cada um, por que o mundo real usa os dois primeiros juntos, e por que o terceiro não é criptografia coisa nenhuma.

A diferença em uma frase

Criptografia simétrica usa uma única chave para cifrar e decifrar. A mesma chave que tranca, destranca. Criptografia assimétrica usa um par de chaves: uma public key e uma private key, matematicamente ligadas, em que o que uma faz só a outra desfaz.

Parece detalhe, mas muda tudo sobre quem pode ler o quê e, principalmente, sobre como você entrega a chave para a outra ponta.

Simétrica: rápida, e o problema é a chave

Na criptografia simétrica você tem uma chave (uma sequência de bytes, tipicamente 256 bits no AES) e a usa nas duas pontas. O emissor cifra com a chave, o receptor decifra com a mesma chave. O algoritmo padrão hoje é o AES, de preferência no modo AES-GCM, que além de cifrar também autentica (detecta se o ciphertext foi adulterado).

A grande vantagem é velocidade. AES é absurdamente rápido, geralmente acelerado por hardware (instruções AES-NI na CPU). Para cifrar um arquivo de 5 GB, um backup, um volume de disco ou um stream de vídeo, simétrica é a única opção sensata.

# cifrar um arquivo com AES-256 (simétrico)
openssl enc -aes-256-gcm -in dados.txt -out dados.enc -pbkdf2
# decifrar usa exatamente a mesma senha/chave
openssl enc -d -aes-256-gcm -in dados.enc -out dados.txt -pbkdf2

O problema não é cifrar. O problema é a key distribution: como você entrega aquela chave para quem precisa decifrar, sem que um terceiro intercepte no caminho? Se você manda a chave por e-mail junto com o arquivo, parabéns, você não protegeu nada. Esse é o calcanhar de Aquiles da simétrica — e é exatamente o problema que a assimétrica resolve.

Assimétrica: lenta, mas resolve a distribuição de chave

Na criptografia assimétrica você gera um par: public key e private key. A public key você pode espalhar para o mundo inteiro, colar no GitHub, mandar por e-mail. A private key você guarda como ouro e nunca compartilha. A matemática garante duas propriedades úteis:

  • O que é cifrado com a public key só é decifrado com a private key correspondente. Qualquer um pode te mandar algo cifrado; só você lê.
  • O que é assinado com a private key pode ser verificado por qualquer um com a public key. Essa é a base da assinatura digital: prova que a mensagem veio de você e não foi alterada.

Os algoritmos clássicos são o RSA e, cada vez mais, criptografia de curva elíptica (ECC), que entrega a mesma segurança com chaves bem menores e mais rápida.

O preço é a lentidão. Operações assimétricas são ordens de magnitude mais caras que AES. Ninguém cifra um arquivo de 5 GB com RSA, seria absurdo. Então para que serve? Para resolver justamente o key distribution da simétrica.

Cifrar não é a mesma coisa que assinar

Vale martelar esse ponto porque confunde: cifrar para sigilo e assinar para autenticidade são usos diferentes do mesmo par de chaves. Para sigilo, você cifra com a public key do destinatário (só ele lê). Para autenticidade, você assina com a sua private key (todos verificam que foi você). São objetivos opostos e não se substituem.

O mundo real usa os dois: criptografia híbrida

Aqui está o ponto que derruba a ideia de que TLS é "só uma chave". O TLS, que protege todo HTTPS, é um sistema híbrido. Ele usa os dois modelos, cada um no que faz melhor:

  1. Handshake (assimétrico): o cliente e o servidor usam criptografia assimétrica para fazer o key exchange e combinar, de forma segura, uma chave de sessão simétrica. Ninguém no meio do caminho consegue capturar essa chave.
  2. Sessão (simétrico): a partir daí, todo o tráfego real — os bytes da página, as requests, o vídeo — é cifrado com AES usando aquela chave de sessão. Rápido.

Ou seja: a assimétrica resolve o problema difícil (entregar a chave com segurança) e a simétrica faz o trabalho pesado (cifrar volume). Cada uma cobre a fraqueza da outra. Praticamente todo protocolo sério de criptografia, do TLS ao SSH ao PGP, segue esse padrão híbrido.

Simétrica Assimétrica
Chaves Uma compartilhada Par (public/private)
Velocidade Muito rápida Lenta
Boa para Volume de dados Key exchange, assinatura
Problema Distribuir a chave Custo computacional
Exemplos AES, ChaCha20 RSA, ECC

O terceiro conceito: hashing não é criptografia

Agora o ponto que mais confunde, e a raiz daquele pedido de "criptografar a senha". Hashing não é criptografia. Criptografia é reversível por definição: existe uma chave que desfaz. Hashing é mão única e não usa chave nenhuma. Você joga os dados numa função de hash e recebe um valor de tamanho fixo; não existe operação que devolva o dado original a partir do hash.

É por isso que hash é o jeito certo de guardar senha. Você nunca quer poder "decifrar" a senha do usuário, porque, se você consegue, um atacante que roubar a sua chave também consegue. Você guarda o hash, e na hora do login faz o hash do que o usuário digitou e compara. Para senhas, use funções desenhadas para isso, como bcrypt ou Argon2, que são deliberadamente lentas para resistir a ataques de força bruta — nunca um hash rápido cru como SHA-256 sozinho.

Se você quiser ver na prática a diferença entre uma transformação de mão única e cifragem, dá para brincar com um gerador de hash: mude um caractere da entrada e veja a saída inteira mudar, sem nenhuma chave envolvida e sem volta.

Quando usar cada um

A regra prática:

  • Cifrar volume de dados (arquivos, backups, payloads grandes): simétrica, AES-GCM.
  • Trocar uma chave com segurança por um canal aberto ou provar identidade: assimétrica, ECC ou RSA, ou um protocolo híbrido pronto como TLS.
  • Guardar senha ou verificar integridade: hashing. Senha = bcrypt/Argon2. Integridade/checksum = SHA-256.

E a opinião que você já deve estar esperando: não invente sua própria criptografia. Crypto é uma das áreas em que código "que funciona nos testes" pode estar completamente quebrado contra um atacante. Use bibliotecas auditadas (libsodium, a stdlib de crypto da sua linguagem, o TLS do sistema), prefira AES-GCM e ECC modernos como default, e deixe modo de operação, nonce e padding para quem já resolveu isso direito. Se você está gerando seu próprio nonce na mão, já parou para olhar o que está fazendo?

Para o pano de fundo de por que tudo isso importa — confidencialidade, integridade, autenticidade — vale ler os conceitos básicos de segurança da informação, que enquadram onde cada uma dessas técnicas se encaixa.

Perguntas frequentes

Criptografia simétrica ou assimétrica é melhor?

Nenhuma é "melhor"; elas resolvem problemas diferentes. A simétrica é rápida e ideal para cifrar grandes volumes de dados, mas você precisa distribuir a chave com segurança. A assimétrica é lenta, porém permite trocar chaves por um canal aberto e assinar dados. Por isso os sistemas reais combinam as duas.

Por que o TLS usa os dois tipos de criptografia?

Porque cada uma cobre a fraqueza da outra. A criptografia assimétrica cuida do handshake e do key exchange com segurança, e em seguida uma chave simétrica rápida cifra o tráfego real da sessão. Usar assimétrica para tudo seria lento demais; usar só simétrica deixaria você sem um jeito seguro de compartilhar a chave.

Hashing é um tipo de criptografia?

Não. Criptografia é reversível com uma chave; hashing é uma função de mão única, sem chave, então não há como recuperar a entrada original a partir do hash. É exatamente por isso que hashing (com bcrypt ou Argon2) é o jeito certo de guardar senha, e não criptografia.

Quais algoritmos devo usar hoje?

Para simétrica, AES-GCM (ou ChaCha20-Poly1305). Para assimétrica, criptografia de curva elíptica (ECC) moderna ou RSA com tamanhos de chave adequados. Para armazenar senha, bcrypt ou Argon2. E use uma biblioteca auditada em vez de implementar qualquer um desses por conta própria.

Resumo prático

Simétrica é uma chave só, rápida, ótima para volume, e o problema é distribuir a chave. Assimétrica é um par public/private, lenta, e resolve a distribuição de chave e a assinatura digital. O mundo real usa as duas juntas (TLS faz o handshake assimétrico e a sessão simétrica). E hashing não é criptografia: é mão única, sem chave, e é o jeito certo de guardar senha. Decore essa separação e você já para de cometer o erro mais comum em segurança. E, de novo: não escreva sua própria crypto.

RD
Autor
Rafael Duarte
Desenvolvedor backend com passagem por fintech e SaaS B2B — trabalhou em times que escalaram APIs de zero a milhões de requisições. Carrega cicatrizes de produção suficientes para ter opiniões fortes sobre ferramentas, padrões e decisões de arquitetura. Não é acadêmico: leu a RFC do UUID quando precisou escolher entre v4 e v7 para uma tabela de alta escrita.
Ver perfil