Criptografia Simétrica - Principais Algoritmos
Depois de entender o conceito e o funcionamento da criptografia simétrica, é hora de conhecer os principais algoritmos que a implementam. Alguns deles sustentam toda a segurança digital moderna, outros ainda aparecem em sistemas legados e precisam ser identificados para serem substituídos ou mantidos sob controle.
Neste post percorreremos os algoritmos mais relevantes do universo simétrico: suas origens, características técnicas, variantes, status atual e os cenários em que são utilizados. Essa visão panorâmica permitirá, nos próximos posts, compreender temas como modos de operação, derivação de chaves e protocolos construídos sobre esses algoritmos.
Como os algoritmos simétricos são classificados
Section titled “Como os algoritmos simétricos são classificados”Antes de entrar nos algoritmos específicos, vale situar as duas grandes famílias que agrupam a maioria deles.
Cifras de bloco (block ciphers)
Section titled “Cifras de bloco (block ciphers)”Processam dados em blocos de tamanho fixo, geralmente de 64 ou 128 bits. Mensagens maiores são divididas em blocos, e um modo de operação define como esses blocos se encadeiam. Exemplos: AES, DES, 3DES, Blowfish, Twofish, Serpent, Camellia, IDEA.
Cifras de fluxo (stream ciphers)
Section titled “Cifras de fluxo (stream ciphers)”Processam a informação bit a bit ou byte a byte, geralmente combinando os dados com uma sequência pseudoaleatória gerada a partir da chave. São úteis quando os dados chegam continuamente, e não em blocos completos. Exemplos: ChaCha20, Salsa20, RC4.
| Característica | Cifra de bloco | Cifra de fluxo |
|---|---|---|
| Unidade de processamento | Bloco (64 ou 128 bits) | Bit ou byte |
| Precisa de modo de operação | Sim | Geralmente não |
| Exemplo moderno | AES | ChaCha20 |
| Uso típico | Discos, arquivos, bancos | Streaming, VoIP, móvel |
Modos de operação de cifras de bloco
Section titled “Modos de operação de cifras de bloco”Como vimos, cifras de bloco processam a informação em blocos de tamanho fixo (geralmente 128 bits para o AES). Mas mensagens reais, arquivos, pacotes de rede e discos inteiros raramente têm exatamente esse tamanho. Para cifrar dados maiores do que um bloco, é preciso definir como os blocos se encadeiam. Essa definição é o chamado modo de operação.
O modo de operação é tão importante quanto o próprio algoritmo. Um AES bem implementado pode se tornar inseguro se usado em um modo inadequado. Vamos conhecer os principais modos e entender quando cada um é apropriado.
ECB (Electronic Codebook)
Section titled “ECB (Electronic Codebook)”É o modo mais simples e também o mais perigoso. Cada bloco de texto claro é cifrado de forma independente com a mesma chave. Isso significa que blocos idênticos de texto claro produzem blocos idênticos de texto cifrado, revelando padrões estruturais nos dados.
Bloco 1 → [AES + Chave] → Bloco cifrado 1Bloco 2 → [AES + Chave] → Bloco cifrado 2Bloco 3 → [AES + Chave] → Bloco cifrado 3- Vantagens: paralelizável, simples de implementar
- Desvantagens: expõe padrões dos dados, não oferece confidencialidade real para dados estruturados
- Status: inseguro para quase todos os usos, deve ser evitado
- Exemplo didático famoso: cifrar uma imagem bitmap com ECB preserva visualmente o conteúdo original, pois pixels iguais viram bytes cifrados iguais (o “pinguim ECB” é a ilustração clássica desse problema)
CBC (Cipher Block Chaining)
Section titled “CBC (Cipher Block Chaining)”Cada bloco de texto claro é combinado via XOR com o bloco cifrado anterior antes de ser cifrado. O primeiro bloco usa um vetor de inicialização (IV) aleatório. Isso garante que mensagens iguais produzam textos cifrados diferentes (desde que o IV seja distinto).
Bloco 1: XOR(Texto1, IV) → [AES] → Cifrado 1Bloco 2: XOR(Texto2, Cifrado 1) → [AES] → Cifrado 2Bloco 3: XOR(Texto3, Cifrado 2) → [AES] → Cifrado 3- Vantagens: oculta padrões dos dados, foi padrão por décadas em TLS, IPsec e outros protocolos
- Desvantagens: cifragem não é paralelizável (cada bloco depende do anterior); vulnerável a ataques de padding oracle quando usado sem autenticação (ataques Vaudenay, Lucky Thirteen, POODLE)
- Status: ainda seguro quando combinado com HMAC em modo Encrypt-then-MAC, mas superado por modos AEAD modernos como GCM
- Observação: exige padding (geralmente PKCS#7) para que a mensagem seja múltipla do tamanho do bloco
CTR (Counter)
Section titled “CTR (Counter)”Transforma uma cifra de bloco em uma cifra de fluxo. Em vez de cifrar o texto claro diretamente, o algoritmo cifra um contador incremental combinado com um nonce. O resultado é combinado via XOR com o texto claro para produzir o texto cifrado.
Contador 0 + Nonce → [AES] → Keystream 0 → XOR com Texto1 → Cifrado 1Contador 1 + Nonce → [AES] → Keystream 1 → XOR com Texto2 → Cifrado 2Contador 2 + Nonce → [AES] → Keystream 2 → XOR com Texto3 → Cifrado 3- Vantagens: altamente paralelizável, não requer padding, permite acesso aleatório a qualquer parte do texto cifrado
- Desvantagens: catastrófico se o par (chave, nonce) for reutilizado (permite recuperar o texto claro facilmente)
- Status: seguro quando o nonce é único por operação; base para o modo GCM
- Uso típico: cifragem em transmissões de áudio, vídeo e discos (variante XTS)
GCM (Galois/Counter Mode)
Section titled “GCM (Galois/Counter Mode)”É um modo AEAD (Authenticated Encryption with Associated Data): combina o modo CTR para cifragem com um código de autenticação baseado em multiplicação no campo de Galois (GHASH). Garante simultaneamente confidencialidade, integridade e autenticidade em uma única operação.
- Vantagens: autenticado por padrão, muito rápido com aceleração em hardware (AES-NI + PCLMULQDQ), paralelizável
- Desvantagens: também catastrófico se o nonce for reutilizado com a mesma chave
- Status: padrão atual para TLS 1.2, TLS 1.3, SSH, IPsec e muitos outros protocolos
- Recomendação: use AES-256-GCM sempre que possível em novos projetos
XTS (XEX-based Tweaked codebook with ciphertext Stealing)
Section titled “XTS (XEX-based Tweaked codebook with ciphertext Stealing)”Modo especializado para criptografia de disco. Projetado para cifrar setores individuais de forma independente, permitindo acesso aleatório a qualquer bloco do disco sem precisar decifrar tudo. Usa duas chaves distintas combinadas com o endereço do setor (chamado tweak).
- Vantagens: acesso aleatório, cada setor cifrado é independente, resistente a ataques por manipulação de blocos
- Desvantagens: não oferece autenticidade por si só (um atacante pode alterar bits do disco sem ser detectado), por isso é geralmente combinado com verificações de integridade em outra camada
- Status: padrão em LUKS (Linux), BitLocker (Windows) e FileVault (macOS)
- Observação: a chave AES-XTS-512 é na verdade duas chaves de 256 bits concatenadas, resultando em 256 bits de segurança efetiva
CFB (Cipher Feedback) e OFB (Output Feedback)
Section titled “CFB (Cipher Feedback) e OFB (Output Feedback)”Modos clássicos que também transformam cifras de bloco em cifras de fluxo, mas de formas diferentes do CTR. Hoje são raramente escolhidos para novos projetos, pois o CTR e o GCM oferecem desempenho e segurança superiores.
- CFB: realimenta o texto cifrado anterior na próxima operação, similar ao CBC mas sem exigir padding
- OFB: realimenta a saída do algoritmo (não o texto cifrado), gerando um keystream independente do texto
- Status: funcionais, mas em desuso
CCM (Counter with CBC-MAC)
Section titled “CCM (Counter with CBC-MAC)”Outro modo AEAD, combina CTR para cifragem com CBC-MAC para autenticação. É mais lento que o GCM, mas tem implementações compactas, úteis em dispositivos embarcados.
- Status: usado no Wi-Fi WPA2 (AES-CCMP) e em protocolos IoT como Zigbee
SIV (Synthetic Initialization Vector)
Section titled “SIV (Synthetic Initialization Vector)”Modo AEAD moderno projetado para ser resistente ao reuso de nonce. Diferentemente do GCM e do CCM, repetir o nonce com o SIV não é catastrófico (no pior caso, revela apenas que duas mensagens eram iguais).
- Status: recomendado em cenários nos quais garantir unicidade de nonce é difícil, como gerenciamento de chaves (AES-GCM-SIV é uma variante popular)
Resumo dos modos
Section titled “Resumo dos modos”| Modo | Autenticado | Paralelizável | Padding? | Status atual |
|---|---|---|---|---|
| ECB | Não | Sim | Sim | Inseguro, evitar |
| CBC | Não | Só decifragem | Sim | Legado, superado por GCM |
| CFB | Não | Só decifragem | Não | Em desuso |
| OFB | Não | Não | Não | Em desuso |
| CTR | Não | Sim | Não | Seguro, base do GCM |
| GCM | Sim | Sim | Não | Padrão recomendado |
| CCM | Sim | Parcialmente | Não | Usado em Wi-Fi WPA2 e IoT |
| XTS | Não (direto) | Sim | Não | Padrão para criptografia de disco |
| SIV | Sim | Sim | Não | Resistente a reuso de nonce |
AES, o padrão atual
Section titled “AES, o padrão atual”O AES (Advanced Encryption Standard) é hoje o algoritmo simétrico mais utilizado do mundo. Está presente em praticamente tudo: HTTPS, SSH, VPNs, LUKS, BitLocker, Wi-Fi WPA2 e WPA3, bancos de dados, mensageiros e cofres de senha.
Origem
Section titled “Origem”O AES surgiu de uma competição aberta promovida pelo NIST (Estados Unidos) entre 1997 e 2001, com o objetivo de substituir o DES, considerado defasado. Entre quinze candidatos iniciais e cinco finalistas (MARS, RC6, Rijndael, Serpent e Twofish), o algoritmo belga Rijndael, projetado por Vincent Rijmen e Joan Daemen, foi escolhido e padronizado como AES em 2001.
Estrutura técnica
Section titled “Estrutura técnica”O AES é uma cifra de bloco baseada em uma rede de substituição e permutação (SPN), que opera sobre blocos fixos de 128 bits. A chave pode ter três tamanhos, cada um definindo um número diferente de rodadas de transformação:
| Variante | Tamanho da chave | Nº de rodadas |
|---|---|---|
| AES-128 | 128 bits | 10 |
| AES-192 | 192 bits | 12 |
| AES-256 | 256 bits | 14 |
Cada rodada combina quatro operações matemáticas:
- SubBytes: substituição baseada em uma S-box
- ShiftRows: deslocamento das linhas da matriz de estado
- MixColumns: mistura das colunas
- AddRoundKey: XOR com uma subchave derivada da chave principal
Aceleração por hardware
Section titled “Aceleração por hardware”Processadores modernos da Intel e da AMD possuem instruções dedicadas chamadas AES-NI (AES New Instructions), que executam as operações internas do AES diretamente em silício. Isso permite velocidades de processamento acima de 10 GB/s em um único núcleo moderno, com baixo consumo de energia. ARM e outras arquiteturas também possuem instruções equivalentes.
Status
Section titled “Status”Após mais de 20 anos de análise pública intensa, nenhum ataque prático contra o AES foi descoberto. Ele é considerado seguro para o futuro previsível, mesmo com margem para a computação quântica no caso do AES-256 (o algoritmo de Grover reduziria sua força efetiva para 128 bits, ainda considerados seguros).
Exemplo em Linux
Section titled “Exemplo em Linux”Cifragem de um arquivo com AES-256 em modo CBC:
openssl enc -aes-256-cbc -pbkdf2 \ -in arquivo.txt -out arquivo.encSignificado de cada opção:
enc: subcomando doopensslresponsável pela cifragem e decifragem simétrica-aes-256-cbc: define o algoritmo e o modo de operação (AES com chave de 256 bits em modo CBC)-pbkdf2: utiliza PBKDF2 para derivar a chave de cifragem a partir da senha informada-in arquivo.txt: arquivo de entrada com o texto claro-out arquivo.enc: arquivo de saída que receberá o texto cifrado
Cifragem com AES-256 em modo GCM (autenticado):
openssl enc -aes-256-gcm -pbkdf2 \ -in arquivo.txt -out arquivo.encAs opções são as mesmas do exemplo anterior, com uma única diferença: -aes-256-gcm seleciona o modo GCM, que, além da confidencialidade, protege também a integridade e autenticidade dos dados (modo AEAD).
ChaCha20, a alternativa moderna
Section titled “ChaCha20, a alternativa moderna”O ChaCha20 é uma cifra de fluxo projetada por Daniel J. Bernstein em 2008, evolução direta do algoritmo Salsa20 do mesmo autor. É amplamente utilizada em protocolos modernos, especialmente em cenários nos quais o AES não dispõe de aceleração por hardware.
Características
Section titled “Características”- Opera sobre uma chave de 256 bits e um nonce de 96 bits
- Baseado em operações ARX (Add, Rotate, XOR), simples e rápidas em software
- Executa 20 rodadas de mistura
ChaCha20-Poly1305
Section titled “ChaCha20-Poly1305”Na prática, o ChaCha20 é quase sempre combinado com o Poly1305, um código de autenticação de mensagem (MAC). Juntos formam o ChaCha20-Poly1305, um esquema AEAD (Authenticated Encryption with Associated Data) que garante confidencialidade e integridade simultaneamente.
Onde é usado
Section titled “Onde é usado”- TLS 1.3 (uma das três cifras obrigatórias)
- OpenSSH (preferido em sessões modernas)
- WireGuard (única cifra utilizada)
- Signal e outros mensageiros ponta a ponta
Quando preferir ChaCha20 ao AES?
Section titled “Quando preferir ChaCha20 ao AES?”- Dispositivos sem AES-NI (celulares antigos, roteadores, IoT)
- Implementações puramente em software em linguagens de alto nível
- Cenários que exigem alta performance com baixo consumo de energia
Exemplo em Linux
Section titled “Exemplo em Linux”Cifragem com ChaCha20 em modo stream puro:
openssl enc -chacha20 -pbkdf2 \ -in arquivo.txt -out arquivo.encSignificado de cada opção:
enc: subcomando doopensslresponsável pela cifragem e decifragem simétrica-chacha20: define o algoritmo utilizado (ChaCha20 com chave de 256 bits)-pbkdf2: utiliza PBKDF2 para derivar a chave de cifragem a partir da senha informada-in arquivo.txt: arquivo de entrada com o texto claro-out arquivo.enc: arquivo de saída que receberá o texto cifrado
Versão autenticada com Poly1305 (requer OpenSSL recente):
openssl enc -chacha20-poly1305 -pbkdf2 \ -in arquivo.txt -out arquivo.encAs opções são as mesmas do exemplo anterior, com uma única diferença: -chacha20-poly1305 seleciona o esquema AEAD, que combina a cifragem ChaCha20 com a autenticação Poly1305, garantindo confidencialidade e integridade simultaneamente.
3DES, o patch sobre o DES
Section titled “3DES, o patch sobre o DES”O Triple DES, ou 3DES, é uma extensão do antigo DES criada para prolongar sua utilidade sem exigir mudanças profundas em sistemas que o utilizavam. Ele aplica o DES três vezes consecutivas, no esquema EDE (Encrypt, Decrypt, Encrypt), com até três chaves diferentes.
Características
Section titled “Características”- Bloco de 64 bits (herdado do DES)
- Chave efetiva de 112 bits (com duas chaves) ou 168 bits (com três chaves)
- Amplamente utilizado em sistemas bancários e protocolos antigos
Status
Section titled “Status”O 3DES já não é mais considerado seguro para novos projetos. O NIST estabeleceu sua descontinuação oficial em dezembro de 2023. Além da chave efetiva ser menor que a do AES-128, o bloco de 64 bits o torna vulnerável a ataques como o Sweet32 quando grandes volumes de dados são cifrados com a mesma chave.
Ainda assim, o 3DES continua presente em muitos sistemas legados, especialmente no setor financeiro. Em projetos novos, deve ser substituído pelo AES.
DES, o pioneiro aposentado
Section titled “DES, o pioneiro aposentado”O DES (Data Encryption Standard) foi padronizado pelo NIST em 1977, derivado do algoritmo Lucifer da IBM. Foi o primeiro padrão comercial de criptografia e dominou o mercado por quase 25 anos.
Por que foi descontinuado
Section titled “Por que foi descontinuado”- Chave de apenas 56 bits, hoje quebrável em horas com hardware comum
- Em 1998 a EFF construiu o Deep Crack, hardware dedicado que quebrou uma chave DES em 56 horas
- Em 2008 pesquisadores demonstraram quebra em menos de um dia usando FPGAs comerciais
Hoje o DES tem apenas valor histórico e didático. Não deve ser utilizado em nenhum sistema novo.
Blowfish e Twofish
Section titled “Blowfish e Twofish”Blowfish (1993) e Twofish (1998) são algoritmos projetados por Bruce Schneier, criptógrafo e autor de livros como Applied Cryptography.
Blowfish
Section titled “Blowfish”- Bloco de 64 bits
- Chave variável de 32 a 448 bits
- Ainda encontrado em programas como o
bcrypt(função de hash para senhas, não a cifra em si), no OpenSSH (opções legadas) e em alguns protocolos VPN - Vulnerável ao mesmo ataque Sweet32 do 3DES devido ao bloco pequeno
Twofish
Section titled “Twofish”- Bloco de 128 bits (compatível com o AES)
- Chave de até 256 bits
- Foi um dos finalistas do concurso AES, perdeu para o Rijndael
- Considerado tecnicamente seguro, mas pouco adotado em protocolos modernos devido à vitória do AES
Outros algoritmos relevantes
Section titled “Outros algoritmos relevantes”Cifra de fluxo criada em 1987 por Ron Rivest. Foi extremamente popular no SSL/TLS 1.0 e no WEP (Wi-Fi), devido à simplicidade e à velocidade. Hoje é considerada quebrada, com vieses estatísticos conhecidos que permitem ataques práticos. Foi oficialmente proibida em TLS a partir de 2015 (RFC 7465).
Camellia
Section titled “Camellia”Desenvolvida em 2000 pela NTT e pela Mitsubishi, no Japão. Possui estrutura e desempenho semelhantes ao AES e é aceita em padrões como TLS, IPsec e OpenPGP. É particularmente usada em sistemas asiáticos como alternativa ao AES.
Serpent
Section titled “Serpent”Finalista do concurso AES, ficou em segundo lugar. É considerada mais conservadora e mais segura que o próprio AES por utilizar 32 rodadas, mas em contrapartida é significativamente mais lenta. Pode ser encontrada em ferramentas como o VeraCrypt.
Projetada em 1991, foi muito utilizada em implementações antigas do PGP. Patenteada até 2012, teve adoção limitada por essa razão. Hoje raramente aparece em sistemas novos.
Padrão chinês de criptografia simétrica, utilizado principalmente dentro da China em ambientes governamentais e corporativos. Padronizado também pela ISO.
Comparativo geral
Section titled “Comparativo geral”| Algoritmo | Tipo | Bloco | Chave | Status |
|---|---|---|---|---|
| AES | Bloco (SPN) | 128 bits | 128, 192, 256 | Padrão atual, seguro |
| ChaCha20 | Fluxo (ARX) | n/a | 256 | Moderno, seguro |
| 3DES | Bloco (Feistel) | 64 bits | 112 ou 168 | Descontinuado em 2023 |
| DES | Bloco (Feistel) | 64 bits | 56 | Obsoleto |
| Blowfish | Bloco (Feistel) | 64 bits | 32 a 448 | Legado, bloco pequeno |
| Twofish | Bloco (Feistel) | 128 bits | 128, 192, 256 | Seguro, pouco usado |
| Serpent | Bloco (SPN) | 128 bits | 128, 192, 256 | Seguro, lento |
| Camellia | Bloco (Feistel) | 128 bits | 128, 192, 256 | Seguro, uso regional |
| RC4 | Fluxo | n/a | Variável | Quebrado, proibido |
| IDEA | Bloco | 64 bits | 128 | Histórico |
O que escolher hoje?
Section titled “O que escolher hoje?”Para novos projetos, a resposta é curta: AES ou ChaCha20.
| Cenário | Recomendação |
|---|---|
| Servidor com AES-NI (x86-64 moderno) | AES-256-GCM |
| Servidor sem aceleração, dispositivo embarcado | ChaCha20-Poly1305 |
| Protocolo TLS moderno | AES-GCM ou ChaCha20-Poly1305 |
| Criptografia de disco | AES-XTS (padrão em LUKS, BitLocker) |
| VPN moderna | ChaCha20 (WireGuard) ou AES-GCM |
| Compatibilidade com sistemas legados | Avaliar substituição planejada |
Verificando algoritmos disponíveis no OpenSSL
Section titled “Verificando algoritmos disponíveis no OpenSSL”Para listar todos os algoritmos simétricos suportados pela sua instalação do OpenSSL:
openssl list -cipher-algorithmsPara ver a velocidade estimada de cada um em sua máquina:
openssl speed -evp aes-256-gcmopenssl speed -evp chacha20-poly1305Esses testes são úteis tanto para validar se o seu hardware dispõe de aceleração AES-NI quanto para decidir qual algoritmo utilizar em cada contexto.
Considerações Finais
Section titled “Considerações Finais”A escolha de um algoritmo simétrico envolve mais do que simplesmente “pegar o mais recente”. Envolve avaliar o hardware disponível, o protocolo que será utilizado, as restrições regulatórias e a compatibilidade com os sistemas existentes. Felizmente, para a maioria das situações atuais, a resposta converge para AES-256-GCM ou ChaCha20-Poly1305, ambos amplamente auditados, performáticos e autenticados.
No próximo post da série exploraremos os casos de uso da criptografia simétrica, mapeando como esses algoritmos aparecem concretamente em servidores Linux, aplicações corporativas e no dia a dia dos administradores de sistema.
