Escolha um algoritmo, digite uma mensagem e acompanhe o que acontece com ela. Os passos mostram o começo e o fim de cada cálculo; a parte repetitiva do meio fica de fora.
CRC-32 soma de verificação
Uma soma de verificação serve para saber se um dado chegou inteiro sem precisar compará-lo por completo com o original. Quem envia calcula um número curto, quem recebe o calcula de novo e, se os dois conferem, o mais provável é que nada tenha se estragado no caminho. Arquivos ZIP, imagens PNG e redes Ethernet a usam.
O CRC-32 trata a mensagem como um número binário enorme e o divide por um polinômio fixo; o resto, de 32 bits, é o resultado. Na prática, o cálculo é feito byte a byte com uma tabela preparada de antemão, e por isso é tão rápido.
Fraquezas
Ele protege contra erros acidentais, não contra alguém que muda a mensagem de propósito. Qualquer pessoa pode ajustar quatro bytes para que uma mensagem falsa tenha o mesmo CRC da verdadeira, como mostra o último passo. Para detectar mudanças intencionais, é preciso um hash criptográfico ou, melhor ainda, uma assinatura.
Durante anos, o MD5 foi o hash de uso geral. Ele transforma qualquer mensagem em 128 bits, sempre os mesmos para a mesma mensagem e sem relação visível com ela. Era usado para guardar senhas, verificar downloads e assinar certificados.
Ele preenche a mensagem até completar blocos de 512 bits e mistura cada um em 64 passos de somas, rotações e funções lógicas sobre quatro registradores de 32 bits.
Fraquezas
Desde 2004 é possível fabricar colisões, duas mensagens diferentes com o mesmo MD5, em segundos e num computador comum. Em 2012, o malware Flame usou uma colisão de MD5 para falsificar um certificado da Microsoft. Além disso, ele é tão rápido que uma placa de vídeo testa bilhões de senhas por segundo. Hoje só serve como soma de verificação contra erros acidentais, igual a um CRC.
O SHA-256 sustenta boa parte da internet, dos certificados HTTPS e das assinaturas de software até o Git e o Bitcoin. Ele produz 256 bits e, ao contrário do MD5, ninguém encontrou uma colisão nem um jeito de voltar do resultado para a mensagem.
Funciona de forma parecida com o MD5, com oito registradores, 64 rodadas e uma expansão do bloco em que cada palavra nova depende de quatro anteriores. Mudar um único bit da mensagem muda, em média, metade dos bits do resultado.
Fraquezas
É um hash seguro, mas rápido, e por isso não basta para guardar senhas: quem ataca pode testar bilhões de candidatas por segundo. Para isso existem algoritmos lentos de propósito, como o Argon2id. Um computador quântico só reduziria pela metade sua resistência em bits (o algoritmo de Grover), o que ainda deixa uma margem enorme.
O SHA-3 é o padrão que o NIST escolheu em 2015 por meio de um concurso aberto. Não porque o SHA-256 estivesse quebrado, mas para ter uma alternativa construída de forma completamente diferente, caso algum dia apareça uma fraqueza na família SHA-2.
Em vez de blocos encadeados, ele usa uma “esponja”, um estado de 1600 bits que absorve a mensagem aos pedaços e depois é espremido para dar o resultado. Cada rodada aplica cinco passos, θ, ρ, π, χ e ι, e só χ não é linear. Com a mesma esponja são construídos o SHAKE128 e o SHAKE256, que o ML-KEM e o ML-DSA usam por dentro.
Fraquezas
Não se conhecem fraquezas práticas. Assim como o SHA-256, é rápido demais para guardar senhas.
Para guardar senhas não convém um hash rápido, e sim um lento de propósito. O Argon2id venceu a Password Hashing Competition em 2015 e é o que a OWASP recomenda hoje. Além de tempo, ele exige memória: cada tentativa preenche vários megabytes em que cada bloco depende de outros anteriores.
O sal é um valor aleatório guardado junto com o resultado. Com ele, duas pessoas com a mesma senha obtêm resultados diferentes, e quem ataca precisa ir atrás de cada conta separadamente. O que o servidor guarda é a linha completa que você vê no fim, com o algoritmo, o custo, o sal e o resultado, mas nunca a senha.
Mude a memória e veja o tempo crescer. Para você é um instante no login; para quem testa um bilhão de senhas é um custo enorme.
Fraquezas
Uma senha curta ou comum é adivinhada do mesmo jeito, só que mais devagar. Aqui a memória é pequena para que a demonstração funcione em qualquer aparelho; num servidor usam-se pelo menos 19 MiB, como recomenda a OWASP.
Júlio César cifrava suas mensagens militares deslocando cada letra um número fixo de posições no alfabeto. Com 3, A vira D e “hola” vira “krod”. Para decifrar, desloca-se de volta.
Fraquezas
Só existem 25 chaves possíveis, então basta testar todas, como no último passo; só uma dá um texto legível. Além disso, uma letra é sempre cifrada do mesmo jeito, e as letras mais frequentes do idioma entregam a chave.
Vigenère cifra histórica
A cifra de Vigenère usa uma palavra como chave, e cada letra da chave indica quanto deslocar a letra correspondente da mensagem. A mesma letra da mensagem pode ser cifrada de modo diferente conforme a posição, e por isso ela foi chamada de “a cifra indecifrável” durante uns três séculos.
Fraquezas
A chave se repete. No século XIX, Charles Babbage e Friedrich Kasiski descobriram como encontrar o seu comprimento a partir de sequências repetidas no texto cifrado. Com o comprimento conhecido, o texto se divide em colunas, e cada coluna é uma cifra de César simples que cai com uma análise de frequências. O último passo mostra essas colunas.
AES-256-GCM criptografia simétrica
O AES é a cifra simétrica padrão desde 2001: a mesma chave cifra e decifra. Usam-no o HTTPS, o Wi-Fi com WPA2 e WPA3, os discos criptografados e quase todo aplicativo de mensagens. Ele trabalha com blocos de 16 bytes numa grade 4×4 que passa por 14 rodadas de substituição, deslocamento, mistura e soma da chave.
O GCM é o modo em que ele é usado: o AES cifra um contador, o resultado é combinado com a mensagem por XOR e, no fim, calcula-se uma etiqueta que detecta qualquer alteração. O nonce é um número que nunca deve se repetir com a mesma chave; aqui um novo é gerado a cada vez, por isso o resultado muda mesmo que a mensagem não mude.
Fraquezas
Com uma chave aleatória de 256 bits não há ataque prático, nem mesmo com computadores quânticos. O perigo é usá-lo mal: repetir um nonce com a mesma chave permite recuperar mensagens e falsificar etiquetas. O problema de fundo é outro: como duas pessoas que nunca se viram compartilham a chave? Para isso existe a criptografia de chave pública.
O ChaCha20-Poly1305 faz o mesmo trabalho que o AES-GCM com outra construção. Foi criado por Daniel J. Bernstein e só usa somas, rotações e XOR (o que se chama ARX), então é rápido até em celulares sem instruções especiais para AES. O TLS 1.3, o WireGuard e o SSH o usam.
O ChaCha20 mistura uma grade de 16 palavras (constantes, a chave, um contador e o nonce) durante 20 rodadas e produz um fluxo de bytes que é combinado com a mensagem. O Poly1305 calcula a etiqueta avaliando um polinômio módulo 2¹³⁰ − 5.
Fraquezas
Não se conhece ataque prático, nem com computadores quânticos. Assim como no AES-GCM, um nonce nunca deve se repetir com a mesma chave.
O RSA (1977) foi a primeira cifra de chave pública prática. Qualquer pessoa pode cifrar com a chave pública, mas só quem tem a chave privada consegue decifrar. Sua segurança se apoia no fato de que multiplicar dois primos enormes é fácil, e separá-los de novo, não.
Cifrar é elevar a mensagem, convertida em número, à potência e módulo n; decifrar é elevar o resultado a d. O OAEP é um preenchimento aleatório aplicado antes, para que a mesma mensagem nunca dê o mesmo resultado. Numa chave de 2048 bits cabem só 190 bytes; na prática, o RSA cifra uma chave AES e o AES cifra os dados.
Fraquezas
Um computador quântico grande o bastante fatoraria n com o algoritmo de Shor e obteria a chave privada. Por isso o NIST propõe deixar de permitir o RSA em 2035. Além disso, alguém pode guardar hoje mensagens cifradas para decifrá-las quando esse computador existir.
O X25519 resolve como compartilhar uma chave sem enviá-la. Alice e Bob escolhem cada um um número secreto e publicam o resultado de multiplicar um ponto de uma curva elíptica por esse número; depois, cada um multiplica o resultado do outro pelo próprio segredo. Os dois chegam ao mesmo ponto, e quem só viu os valores públicos não consegue calculá-lo.
É a troca de chaves mais usada hoje, no TLS 1.3, no Signal, no WhatsApp e no SSH. Aqui, o segredo compartilhado vira uma chave AES-256-GCM que cifra a sua mensagem.
Fraquezas
Assim como o RSA, o algoritmo de Shor o quebraria num computador quântico grande. Por isso os navegadores já o combinam com o ML-KEM (X25519MLKEM768), que é o que mostra a próxima categoria.
O ML-KEM (FIPS 203, 2024) é o substituto pós-quântico da troca de chaves. Sua segurança vem de um problema de reticulados chamado “aprendizado com erros”. A chave pública é uma matriz aleatória A multiplicada por um segredo de números pequenos, mais um pouco de ruído. Sem o ruído, seria um sistema de equações fácil de resolver; com ele, ninguém conhece um jeito eficiente, nem com computadores quânticos.
Alice escolhe 32 bytes aleatórios, esconde-os em polinômios usando a chave pública de Bob e envia o resultado para ele. Bob usa o seu segredo para tirar quase todo o ruído; cada coeficiente fica perto de 0 ou de 1665, e ao arredondar os bits são recuperados. A partir daí, os dois derivam o mesmo segredo de 32 bytes, que aqui cifra a sua mensagem com AES-256-GCM.
Fraquezas
Ele é jovem comparado ao RSA e às curvas elípticas, por isso hoje é usado junto com o X25519: se um dos dois cair, o outro continua protegendo. As chaves e os textos cifrados são bem maiores, 1184 e 1088 bytes contra 32 do X25519.
O ML-DSA (FIPS 204, 2024) é a assinatura digital pós-quântica. Uma assinatura prova que uma mensagem vem de quem tem a chave privada e que ninguém a alterou; qualquer pessoa com a chave pública pode conferi-la.
Para assinar, escolhe-se um vetor aleatório y e ele é deslocado com o segredo conforme um desafio c que sai de um hash da mensagem. Se o resultado z puder revelar algo do segredo por ser grande demais, ele é descartado e tenta-se de novo; em média são necessárias umas cinco tentativas. Para verificar, repete-se o cálculo com a chave pública e confere-se que sai o mesmo desafio. No fim, você vai ver que basta mudar um caractere da mensagem para a assinatura deixar de ser válida.
Fraquezas
As assinaturas ocupam 3309 bytes, contra 64 do Ed25519, e isso pesa nos certificados e nos protocolos com muitas assinaturas. Assim como o ML-KEM, ele é recente, então a transição está sendo feita com cuidado e por etapas.