Nota SeguraBR

ChaCha20-Poly1305: o que é e como funciona

Uma cifra moderna e autenticada que é rápida em qualquer processador, mesmo sem instruções especiais para o AES.

O que é

ChaCha20-Poly1305 é uma cifra autenticada: ela esconde o texto e, ao mesmo tempo, permite detectar qualquer alteração. Ela combina duas peças criadas pelo criptógrafo Daniel J. Bernstein. O ChaCha20, de 2008, é uma cifra de fluxo, e o Poly1305, de 2005, é um código de autenticação.

A combinação foi padronizada pela IETF, o grupo que define os protocolos da internet. A versão atual do padrão é o RFC 8439, de 2018. Hoje ela é a principal alternativa ao AES-GCM, e as duas cumprem o mesmo papel.

Como funciona

O ChaCha20 parte de uma chave de 256 bits, de um nonce de 12 bytes e de um contador. Ele mistura esses valores em 20 rodadas que usam só três operações: soma, rotação de bits e XOR. O resultado é um fluxo de bytes que parece aleatório, e esse fluxo é combinado com o texto usando XOR.

Em seguida, o Poly1305 calcula uma etiqueta (tag) de 16 bytes sobre o texto cifrado, usando uma chave de uso único derivada da própria chave e do nonce. Na hora de decifrar, a tag é conferida antes de tudo. Se um bit mudou, a operação falha.

O nonce (number used once, ou número usado uma vez) não precisa ser secreto, mas nunca pode se repetir com a mesma chave.

  • Chave: 256 bits aleatórios, secretos.
  • Nonce: 12 bytes, públicos e únicos para cada mensagem.
  • Tag: 16 bytes que provam que nada foi alterado.

Exemplo

No playground desta página, escolha ChaCha20-Poly1305 e cifre a palavra "segredo". Ela tem 7 bytes, e o resultado tem 23: 7 bytes de texto cifrado e 16 bytes de tag. O playground mostra a chave e o nonce, gerados de novo a cada clique.

Clique em "Decifrar" e a palavra volta. A implementação deste playground foi conferida com o exemplo oficial do RFC 8439, que cifra uma frase sobre protetor solar e publica o resultado byte a byte.

Onde é usado

O ChaCha20-Poly1305 é uma das cifras recomendadas do TLS 1.3, o protocolo do HTTPS. O Google passou a usá-lo em 2014 para acelerar o HTTPS em celulares Android, que na época não tinham instruções de hardware para o AES.

Ele também é a única cifra do WireGuard, uma VPN moderna, e uma das opções padrão do SSH. Muitas bibliotecas de criptografia, como a libsodium, o oferecem como primeira escolha.

Pontos fortes e fracos

Pontos fortes: é rápido em software, inclusive em processadores simples. Como usa só soma, rotação e XOR, roda em tempo constante com facilidade, o que dificulta ataques que medem o tempo de execução. A chave de 256 bits está fora do alcance de qualquer ataque por força bruta.

Pontos fracos: como no AES-GCM, repetir o nonce com a mesma chave é grave. Um atacante passa a combinar os textos cifrados e pode forjar mensagens. Um nonce de 12 bytes aleatórios é seguro para muitas mensagens, mas não para bilhões com a mesma chave; para isso existe a variante XChaCha20, com nonce de 24 bytes. Em processadores com instruções de AES, o AES-GCM costuma ser mais rápido.

Quando usar

Use o ChaCha20-Poly1305 quando precisar de criptografia autenticada em dispositivos sem aceleração de AES, como celulares antigos e placas pequenas, ou quando quiser uma implementação simples e em tempo constante.

Use uma biblioteca conhecida, gere um nonce novo para cada mensagem e guarde-o junto com o texto cifrado. Se o sistema já usa AES-GCM com aceleração de hardware, não há motivo de segurança para trocar: os dois são considerados seguros.

Teste os algoritmos

Escolha um algoritmo, escreva um texto e veja como ele fica. Tudo acontece no seu navegador e nada é salvo.

Criptografia

Hash

Autenticação e assinatura

Troca e derivação de chaves

Codificação

Cifras clássicas

ChaCha20-Poly1305

Seguro

Criptografia simétrica

Cifra moderna de fluxo com autenticação, criada para ser rápida mesmo sem aceleração de hardware. Como o AES-GCM, detecta se o texto cifrado foi alterado. É usada no TLS 1.3, no WireGuard e no SSH.

Ver todos os algoritmos

0/500

Veja também

Precisa enviar um segredo?

Use uma nota segura: o texto é criptografado com AES-256-GCM e se apaga sozinho.

Criar uma nota