Cifrar e decifrar DES / 3DES / RC4 / Blowfish

Cifre ou decifre com as quatro cifras clássicas que ainda existem em ficheiros antigos, cópias de segurança e protocolos — DES e 3DES em ECB ou CBC, RC4 (ARCFOUR) como cifra de fluxo, e Blowfish com chaves até 56 bytes. Verificado face ao FIPS 46-3, aos vetores publicados de Blowfish de Schneier e à RFC 6229. Tudo é executado localmente no seu navegador — nada é enviado. Para trabalho moderno use AES-GCM.
Estas cifras estão aqui por compatibilidade, não para trabalho novo. O DES foi retirado em 2005, o 3DES em 2023, o RC4 está proibido no TLS desde 2015 (RFC 7465), e o bloco de 64 bits do Blowfish atinge o seu limite de aniversário após cerca de 32 GiB de dados sob uma chave. Use o AES-GCM para tudo o que seja novo.
Direção: Cifra: Modo: Saída:
DES = o Data Encryption Standard de 1977: blocos de 64 bits, chave efetiva de 56 bits. Retirado, mas ainda encontrado em cópias antigas, blocos de PIN (banca) e Kerberos v4. A chave tem de ter exatamente 8 bytes.
O hex tolera espaços, dois-pontos e prefixos 0x. O DES ignora o bit de paridade de cada byte da chave.
As cifras de bloco usam preenchimento PKCS#7; o RC4 nunca usa preenchimento.
Comprimentos de chave aceites por esta página
CifraChaveBlocoEstado
DESexatamente 8 bytes (56 bits efetivos)64 bitsretirado em 2005 (NIST SP 800-131A)
3DES-EDE3exatamente 24 bytes (112 bits efetivos)64 bitsproibido depois de 2023 (SP 800-131A r2)
3DES-EDE2exatamente 16 bytes (112 bits efetivos)64 bitsigual ao EDE3, opção legada mais fraca
RC4 / ARCFOUR1..256 bytesfluxoproibido no TLS desde 2015 (RFC 7465)
Blowfish4..56 bytes64 bitssem quebra, mas limitado pelo bloco de 64 bits; use Twofish/AES
O tamanho efetivo da chave é menor do que o tamanho bruto porque o DES usa um bit de cada byte como paridade: uma chave bruta de 64 bits transporta apenas 56 bits de chave, e o 3DES com três chaves independentes transporta 112 (ataque do meio-encontro).
Interoperabilidade com OpenSSL — o OpenSSL 3 passou estas cifras para o fornecedor legado; acrescente -provider legacy se o seu recusar. Equivalentes de linha de comandos desta página:
openssl enc -des-ecb -K 133457799BBCDFF1 -in msg.bin -out msg.enc
openssl enc -des3 -K <48 hex> -iv <16 hex> -in msg.bin -out msg.enc (3DES-CBC)
openssl enc -rc4 -K 4b6579 -in msg.bin -out msg.enc  /  -bf-cbc para Blowfish-CBC.
Decifre com -d. -K recebe uma chave hex em bruto, -k uma palavra-passe (evite — o KDF é diferente de tudo o que está nesta página).
Autoteste
Volta a executar o motor da página sobre vetores publicados e gerados de forma independente: o exemplo trabalhado de DES do FIPS 46-3, textos cifrados 3DES EDE2/EDE3 gerados pelo OpenSSL, os vetores de Blowfish de Schneier, os vetores de teste de RC4 da RFC 6229 e o clássico exemplo "Key/Plaintext", ida e volta em todos os modos, e testes negativos (tamanho de chave errado, texto cifrado que não é múltiplo do bloco tem de falhar). Nada é enviado para lado nenhum.
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.