O que é criptografia? Simétrica, assimétrica e hashing
Entenda os fundamentos da criptografia moderna — cifragem simétrica, assimétrica e hashing — e saiba quando usar cada técnica para proteger dados de verdade.

Criptografia deixou de ser assunto só de matemáticos e militares: ela está no cadeado do seu navegador, na senha guardada no banco de dados e no token que autentica suas requisições. Para construir apps seguros, você não precisa inventar algoritmos, mas precisa saber qual técnica usar em cada situação. Neste artigo vamos separar de forma clara as três famílias que você vai encontrar o tempo todo — cifragem simétrica, cifragem assimétrica e hashing — e mostrar quando cada uma se aplica.
O que é criptografia, em essência
Criptografia é a ciência de transformar informação de modo que apenas as partes autorizadas consigam compreendê-la. Tradicionalmente, ela busca garantir quatro propriedades:
Um detalhe crucial: nem toda técnica criptográfica serve para "esconder" dados. Como veremos, o hashing não esconde nada de forma reversível — ele cumpre outras funções. Por isso, escolher a ferramenta errada é um erro comum e perigoso.
Um princípio fundamental: o de Kerckhoffs
Antes de mergulhar nas técnicas, vale conhecer um princípio que orienta toda a criptografia moderna: a segurança de um sistema deve depender apenas do segredo da chave, nunca do segredo do algoritmo. Formulado por Auguste Kerckhoffs no século XIX e reforçado pela máxima de Shannon ("o inimigo conhece o sistema"), ele explica por que os melhores algoritmos são públicos, abertos e exaustivamente analisados. Um algoritmo secreto não é mais seguro — é apenas menos testado.
Cifragem simétrica: uma chave para tudo
Na criptografia simétrica, a mesma chave secreta é usada tanto para cifrar quanto para decifrar. É como um cofre cuja única chave abre e fecha. Os algoritmos mais conhecidos são o AES (Advanced Encryption Standard) e, historicamente, o DES.
texto puro --[ cifrar com chave K ]--> texto cifrado
texto cifrado --[ decifrar com chave K ]--> texto puroAs vantagens são claras:
O problema também é claro: como entregar a chave à outra parte com segurança? Se você precisa mandar a chave por um canal, e esse canal não é seguro, um espião captura a chave e tudo está perdido. Esse "problema da distribuição de chaves" foi durante décadas o grande gargalo da criptografia.
Modos de operação e nonces
Um detalhe que muita gente ignora: o AES, sozinho, cifra apenas blocos de 16 bytes. Para cifrar mensagens de tamanho arbitrário, ele precisa de um modo de operação. E a escolha do modo importa muito:
A regra prática: prefira AEAD como o AES-GCM ou ChaCha20-Poly1305, que combinam confidencialidade e integridade. E lembre-se: o nonce (ou IV) precisa ser único para cada operação com a mesma chave — reutilizá-lo em GCM quebra a segurança catastroficamente.
Cifragem assimétrica: o par de chaves
A solução veio com a criptografia de chave pública, proposta no trabalho seminal de Diffie e Hellman (1976), que apontou novas direções para resolver justamente a troca segura de chaves. Em vez de uma chave única, cada participante tem um par:
A mágica está na relação entre elas: o que uma chave cifra, só a outra do par decifra. Isso habilita dois usos poderosos:
O algoritmo que popularizou esse modelo foi o RSA, descrito por Rivest, Shamir e Adleman (1978), que mostrou um método prático para assinaturas digitais e cifragem de chave pública. A contrapartida da criptografia assimétrica é que ela é bem mais lenta que a simétrica.
RSA, curvas elípticas e o futuro
Hoje, além do RSA, é muito comum o uso de criptografia de curvas elípticas (ECC). A grande vantagem da ECC é oferecer o mesmo nível de segurança do RSA com chaves muito menores: uma chave ECC de 256 bits equivale, grosso modo, a uma RSA de 3072 bits. Chaves menores significam handshakes mais rápidos e menos consumo — por isso a ECC domina o TLS moderno.
Vale ainda mencionar a criptografia pós-quântica: como computadores quânticos poderiam, em tese, quebrar RSA e ECC, o NIST tem padronizado novos algoritmos resistentes a ataques quânticos. Você não precisa migrar agora, mas é bom saber que o campo está em evolução.
O melhor dos dois mundos: criptografia híbrida
Na prática, protocolos reais combinam as duas abordagens. Usa-se a criptografia assimétrica apenas para trocar com segurança uma chave simétrica temporária, e depois toda a comunicação real é cifrada com a simétrica, que é rápida. É exatamente isso que acontece quando você acessa um site seguro — tema explorado em O que é TLS? Como o HTTPS protege suas conexões e em O que é HTTPS? A versão segura do HTTP.
Esse padrão híbrido aparece em todo lugar: no e-mail criptografado, em mensageiros, em VPNs. A lição é que simétrica e assimétrica não competem — elas se complementam, cada uma cobrindo a fraqueza da outra.
Hashing: a impressão digital dos dados
O hashing é fundamentalmente diferente das duas técnicas anteriores. Uma função de hash recebe uma entrada de qualquer tamanho e produz uma saída de tamanho fixo — o digest — e é projetada para ser unidirecional: a partir do hash, é inviável recuperar a entrada original.
"senha123" --[ SHA-256 ]--> ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94fAs propriedades desejadas de uma boa função de hash criptográfico:
Para que serve isso? Para verificar integridade (conferir se um arquivo foi alterado), para assinaturas digitais (assina-se o hash, não a mensagem inteira) e para armazenar senhas. Esse último caso é tão importante e tem tantas nuances — como o uso de salt e de funções deliberadamente lentas — que merece um artigo dedicado: Segurança de senhas: hashing, salt e bcrypt.
Algoritmos como MD5 e SHA-1 já são considerados quebrados para fins de segurança; hoje usa-se a família SHA-2 (como o SHA-256) e SHA-3 para integridade.
Hash não é o mesmo que senha-segura
Um ponto que confunde muita gente: SHA-256 é ótimo para integridade, mas péssimo para guardar senhas diretamente. Por quê? Porque ele é rápido demais. Um atacante com a base de dados vazada consegue testar bilhões de palpites por segundo. Para senhas, queremos justamente o contrário: funções deliberadamente lentas e que consomem memória, como bcrypt, scrypt e Argon2 (o vencedor da Password Hashing Competition e a recomendação atual).
HMAC: hashing com chave
Quando você precisa de integridade autenticada — provar que uma mensagem não foi alterada e veio de quem tem a chave secreta — usa-se o HMAC (Hash-based Message Authentication Code). Ele combina uma função de hash com uma chave secreta, e é o mecanismo por trás, por exemplo, da assinatura de muitos tokens. Diferente de um hash simples, sem a chave ninguém consegue forjar um HMAC válido.
Quando usar cada técnica
Para fixar, eis um guia rápido de decisão:
| Objetivo | Técnica recomendada | |---|---| | Cifrar muitos dados rapidamente | Simétrica (AES-GCM) | | Trocar chaves com segurança | Assimétrica (RSA/ECDH) | | Assinar e verificar autenticidade | Assimétrica (assinatura digital) | | Verificar integridade de um arquivo | Hashing (SHA-256) | | Autenticar uma mensagem com segredo compartilhado | HMAC | | Guardar senhas | Hashing lento com salt (bcrypt, Argon2) |
O erro mais comum de iniciantes é tentar "cifrar" senhas com algo reversível para depois "descifrar" e comparar. Isso é inseguro: senhas devem ser hasheadas, nunca cifradas de forma reversível.
Certificados e a cadeia de confiança
Saber que uma chave pública pertence mesmo a quem diz ser é um problema por si só. Se um atacante me convence de que a chave pública dele é a do banco, ele intercepta tudo. A solução é a infraestrutura de chave pública (PKI) e os certificados digitais.
Um certificado é, em essência, uma chave pública assinada por uma autoridade certificadora (CA) em quem o navegador já confia. A verificação encadeia confiança:
CA raiz (confiável pelo SO/navegador)
└─ assina → CA intermediária
└─ assina → certificado do site (sua chave pública)Quando você acessa um site HTTPS, o navegador valida essa cadeia até uma raiz confiável. Se a assinatura confere e a CA é reconhecida, ele confia que aquela chave pública é mesmo do site. É assim que a criptografia assimétrica resolve, na prática, o problema de "como sei que essa chave é de quem eu penso".
Trocando chaves sem nunca enviá-las: Diffie-Hellman
Há um truque elegante que vale entender: o acordo de chaves Diffie-Hellman permite que duas partes cheguem a um segredo compartilhado trocando apenas informações públicas, sem nunca transmitir a chave em si. Cada lado combina seu segredo privado com o valor público do outro e, pela matemática, ambos chegam ao mesmo resultado — que um espião observando o canal não consegue reproduzir.
Sua variante moderna, ECDHE (Elliptic Curve Diffie-Hellman Ephemeral), é a base do TLS atual e entrega uma propriedade valiosa: forward secrecy. Como uma chave de sessão nova e efêmera é negociada a cada conexão, mesmo que a chave privada de longo prazo do servidor vaze no futuro, as comunicações passadas continuam protegidas. É um dos motivos pelos quais o TLS moderno é tão mais robusto que versões antigas.
Criptografia em repouso e em trânsito
Na prática de aplicações, vale distinguir dois momentos em que você protege dados:
Os dois são necessários e independentes. Cifrar em trânsito não protege um banco de dados vazado; cifrar em repouso não protege uma conexão interceptada. Sistemas sérios fazem ambos.
Criptografia na prática do dia a dia de desenvolvimento
Você raramente vai implementar esses algoritmos do zero — e nem deve. A regra de ouro da área é: não invente sua própria criptografia. Use bibliotecas consagradas e bem mantidas. Seu papel é escolher a técnica certa e configurá-la corretamente.
Esses conceitos sustentam praticamente todos os mecanismos de segurança que você usa. A assinatura de um O que é JWT (JSON Web Token)?, por exemplo, depende diretamente de hashing e de chaves simétricas ou assimétricas. E entender criptografia ajuda a separar o que cada camada protege quando você estuda Autenticação vs autorização: qual a diferença? — afinal, provar identidade e verificar integridade são problemas distintos resolvidos por ferramentas distintas.
Geração de aleatoriedade: o detalhe que quebra tudo
Boa parte da segurança criptográfica depende de números imprevisíveis: chaves, nonces, salts, tokens de sessão. E aqui mora um erro fatal silencioso: usar geradores de números pseudoaleatórios comuns (como o Math.random de JavaScript ou o rand de muitas linguagens), que são previsíveis. Sempre use a fonte criptograficamente segura da sua plataforma:
JavaScript (browser) -> crypto.getRandomValues()
Node.js -> crypto.randomBytes()
Python -> secrets / os.urandom
Go -> crypto/randUm token de sessão gerado com aleatoriedade fraca pode ser adivinhado, anulando toda a proteção do resto do sistema.
Gestão de chaves: o ponto que mais falha na prática
A matemática da criptografia raramente é o elo fraco — a gestão de chaves quase sempre é. Um sistema com AES-256 impecável não vale nada se a chave está em um arquivo de configuração versionado no Git. Alguns princípios que separam um sistema seguro de um teatro de segurança:
A envelope encryption merece destaque: em vez de cifrar dados diretamente com uma chave mestra, você gera uma chave de dados por item, cifra os dados com ela e cifra essa chave de dados com a chave mestra (a KEK — Key Encryption Key). Assim, rotacionar a chave mestra significa apenas recifrar as chaves de dados, não os terabytes de dados em si.
Onde a criptografia aparece sem você notar
Para fixar o quanto isso é onipresente, repare em quantos mecanismos do dia a dia dependem das três famílias:
Saber identificar qual técnica está em jogo em cada um desses casos é metade do caminho para usá-las corretamente nos seus próprios projetos.
Erros frequentes a evitar
Perguntas frequentes
Criptografia e codificação são a mesma coisa? Não. Codificação (como Base64 ou URL encoding) só muda a representação dos dados e é totalmente reversível por qualquer um. Criptografia protege o conteúdo com uma chave. Base64 não é segurança.
Devo cifrar ou hashear uma senha? Hashear, sempre — com uma função lenta como bcrypt ou Argon2 e um salt único por usuário. Cifrar implicaria poder reverter, e você nunca deve ter como descobrir a senha original de um usuário.
Qual algoritmo simétrico usar hoje? AES-256 no modo GCM, ou ChaCha20-Poly1305 em ambientes sem aceleração de hardware para AES. Ambos são AEAD e cobrem confidencialidade e integridade.
Posso usar a mesma chave para tudo? Evite. Separe chaves por finalidade e rotacione-as periodicamente. Uma chave comprometida deve afetar o mínimo possível do sistema.
Conclusão
Criptografia moderna se apoia em três pilares que resolvem problemas diferentes: a cifragem simétrica protege grandes volumes com rapidez, a assimétrica resolve a troca de chaves e habilita assinaturas digitais, e o hashing garante integridade e protege senhas de forma irreversível. Em cima disso se constroem ferramentas como HMAC, criptografia híbrida e proteção de dados em trânsito e em repouso. Saber qual usar — e nunca tentar improvisar — é o que separa um sistema realmente seguro de uma falsa sensação de segurança. Com esses fundamentos claros, você lê o resto da segurança de aplicações com olhos muito mais críticos.