DES, 3DES, RC4 e Blowfish explicados do zero
Numa frase: estas quatro cifras foram os cavalos de batalha dos anos 90 — o DES e o seu contorno de tripla cifragem 3DES, a cifra de fluxo RC4, e o Blowfish — e todas estão hoje retiradas ou desaconselhadas, mantidas vivas apenas por ficheiros antigos, hardware antigo e protocolos antigos que ainda têm de ser lidos.
DES: o padrão de 1977 que começou tudo
O que é. O Data Encryption Standard (FIPS 46, 1977) é uma cifra de Feistel de 16 rondas sobre blocos de 64 bits com uma chave de 56 bits (guardada em 8 bytes porque um bit de cada byte é um bit de paridade). Foi concebido pela IBM com contributos da NSA, tornou-se o padrão dos EUA durante duas décadas, e foi quebrado por decisão em 1998, quando a máquina Deep Crack da EFF forçou uma chave em 56 horas por 250 000 dólares de hardware. O NIST retirou-o para cifragem em 2005.
Porque é que o bit de paridade confunde os comprimentos de chave. Todo o 8.º bit de uma chave DES é calculado a partir dos outros sete, pelo que uma chave de 8 bytes contém apenas 56 bits independentes — é por isso que verá "chave de 64 bits" e "chave de 56 bits" para a mesma cifra. O 3DES herda isto: 24 bytes brutos = 168 bits brutos = 112 efetivos (o ataque do meio-encontro retira o resto).
Onde ainda se encontra. Blocos de PIN bancários (ISO 9564), alguns domínios Kerberos v4, arquivos antigos de cópias de segurança e cartões inteligentes. Se um sistema exige DES hoje, ou está a interoperar com hardware dos anos 90 ou é simplesmente inseguro.
3DES: cifrar, decifrar, cifrar
O truque. O Triple-DES executa o DES três vezes sobre cada bloco: o EDE3 usa três chaves diferentes (C = Ek3(Dk2(Ek1(P)))); o passo de decifragem no meio existe para que uma implementação 3DES possa emular o DES simples ao definir k1=k2. O EDE2 usa apenas duas chaves (k1=k3), dando 112 bits efetivos. A construção foi uma correção rápida que triplicou a segurança de uma cifra já atacada, sem inventar uma nova.
Porque morreu de qualquer forma. Dois problemas: é lento (três passagens completas de DES por bloco, cerca de 1/20 da velocidade do AES) e manteve o bloco de 64 bits. Com 32 GiB de dados sob uma chave (o limite de aniversário de 232 blocos), as colisões de blocos tornam-se suficientemente prováveis para deixarem fugir a estrutura do texto simples — o ataque Sweet32 (2016) demonstrou isto contra sessões TLS 3DES. O NIST proibiu a cifragem 3DES depois de 2023 (SP 800-131A r2); o PCI DSS exige a sua retirada nos sistemas de pagamento.
RC4 / ARCFOUR: a cifra de fluxo da web primitiva
Como funciona. O RC4 (Ron's Code 4, concebido em 1987, divulgado em 1994) é uma cifra de fluxo: a chave escalona uma permutação de 256 bytes (KSA), e depois a permutação emite um fluxo pseudoaleatório de bytes (PRGA) que é XOR-ado com a mensagem. Sem preenchimento, sem tamanho de bloco, qualquer comprimento de mensagem, trivialmente rápido em software — razão pela qual dominou o SSL/TLS e o WEP nos anos 90. "ARCFOUR" é o nome sem marca que a maioria dos projetos de código aberto usa.
Como foi quebrado. Fluhrer-Mantin-Shamir (2001) mostrou que os primeiros bytes do fluxo de chave são enviesados — fatal no WEP, cuja construção de chave por pacote dava esses bytes aos atacantes. Ataques de enviesamento posteriores (2013, AlFardan et al.) recuperaram texto simples de sessões TLS protegidas por RC4 com milhões de ligações. A RFC 7465 (2015) proíbe o RC4 no TLS de forma explícita.
O vetor clássico. Chave "Key" (3 bytes), mensagem "Plaintext" dá o texto cifrado bbf316e8d940af0ad3 — experimente o Exemplo RC4 e compare. O autoteste desta página também verifica o fluxo de chave da RFC 6229 para a chave de 40 bits 01 02 03 04 05: b2396305f03dc027ccc3524a0a1118a8.
Blowfish: sem quebra conhecida, mas limitado pelo bloco
O que é. A cifra de Feistel de Bruce Schneier de 1993: blocos de 64 bits, chaves de 32 a 448 bits (4..56 bytes), 16 rondas, e um famoso escalonamento de chaves que executa o próprio Blowfish 521 vezes para construir as subchaves — o que torna a configuração da chave lenta, mas as tentativas de força bruta também caras. Nenhuma criptanálise prática quebra o Blowfish com todas as rondas.
Porque está nesta página de qualquer forma. O bloco de 64 bits é o problema, não o algoritmo: depois de ~32 GiB sob uma mesma chave, as colisões de aniversário deixam fugir dados (o mesmo limite do 3DES, estilo Sweet32). O próprio Schneier recomenda o seu sucessor Twofish (finalista do AES) ou o AES para tudo o que seja novo. O Blowfish continua vivo no bcrypt — o escalonamento de chaves do hash de palavras-passe é Blowfish — o que é aceitável, porque o hash usa entradas minúsculas, não gigabytes.
Os vetores clássicos. Chave toda a zeros e texto simples todo a zeros cifram para 4ef997456198dd78 (primeiro bloco da saída do Exemplo); a chave "abcdefghijklmnopqrstuvwxyz" sobre "BLOWFISH" dá 324ed0fef413a203. Ambos vêm do ficheiro de vetores publicado por Schneier e são verificados pelo autoteste.
Erros comuns
- Usar estas para dados novos. Todas as cifras desta página estão desaconselhadas exceto o Blowfish (que está limitado pelo tamanho do bloco). A escolha moderna correta é o AES-GCM — veja Cifrar / decifrar AES.
- Chave DES a partir de uma palavra-passe. Uma palavra-passe de 8 caracteres não são 56 bits aleatórios; são alguns bits de entropia por carácter. Os sistemas antigos faziam exatamente isto, e é a razão mais comum para os arquivos "cifrados com DES" cederem a ataques de dicionário em minutos.
- Reutilizar um IV em CBC. O primeiro bloco passa então a revelar a igualdade do texto simples entre mensagens sob a mesma chave. O botão IV aleatório existe por um motivo.
- Reutilizar um fluxo de chave RC4. O RC4 faz XOR com o mesmo fluxo de chave para a mesma chave: cifrar duas mensagens com uma só chave é um bloco de uso único de duas vezes — faça XOR dos textos cifrados e ambos os textos simples surgem. A falha fatal do WEP foi exatamente uma construção de reutilização de fluxo de chave.
- Assumir que "decifra, logo está certo". O ECB/CBC aqui só validam o preenchimento na decifragem — uma chave errada normalmente resulta em lixo que ainda pode remover o preenchimento. Não existe verificação de integridade em nenhum modo legado; se precisar dela, precisa do AES-GCM, não destes.
- Contar o 3DES como "168 bits". A chave bruta tem 168 bits mas a força efetiva é 112 — o ataque do meio-encontro reduz a tripla cifragem a dupla mais um pouco, exatamente como acontece com as construções antecessoras do 3DES.
FAQ
Porque manter uma ferramenta de cifras quebradas? Compatibilidade. Cópias de segurança cifradas, ficheiros exportados em formatos antigos, capturas de protocolos e desafios de CTF, e hardware que não pode ser atualizado, continuam a falar estas cifras. Ler dados antigos é legítimo; escrever dados novos com elas não é.
A minha chave DES tem paridade ímpar / bytes não ASCII. O DES ignora o bit de paridade de cada byte da chave, pelo que a chave efetiva são sempre os outros 56 bits. Esta página aceita quaisquer 8 bytes e não impõe paridade par.
Porque é que o texto decifrado por vezes parece lixo? Chave errada, modo errado, IV errado, ou os dados não foram cifrados como assume. Sem etiqueta de autenticação não há um erro limpo de "chave errada" — a verificação do preenchimento é a única pista, e pode passar por sorte (1 em cada 256 vezes).
O Blowfish é seguro para os meus ficheiros? Para ficheiros pequenos, criptograficamente sim (sem quebra prática). Para qualquer coisa à escala de gigabytes sob uma única chave, não — o limite de aniversário do bloco de 64 bits diz respeito ao volume de dados, não à força da chave. O Twofish ou o AES evitam o problema.
E as chaves Blowfish de 72 bytes que vi algures? Algumas implementações aceitam até 72 bytes, mas a referência de Schneier usa 56 e os bytes além disso não dão difusão adicional no escalonamento padrão. Esta página segue a referência: 4..56 bytes.