Vigenère e Base64: Revertendo uma Cifra Clássica Envolta em Base64
O desafio
Uma ferramenta interna antiga 'protege' strings passando-as por uma cifra de Vigenère e depois codificando o resultado em base64. Você encontrou um desses blobs em um backup de config. Decodifique o base64, desfaça a Vigenère com a chave 'acme' e envie o flag recuperado (HDNA{...}).
O que você vai aprender
- Reconhecer o base64 como a camada externa de transporte pelo conjunto de caracteres e pelo padding
- Identificar uma cifra clássica de letras pelos caracteres que ela deixa intactos
- Decodificar uma cifra de Vigenère com uma chave conhecida
- Remover duas transformações empilhadas na ordem inversa correta
- Explicar por que cifras clássicas são quebra-cabeças, não proteção real
Habilidades testadas
Pré-requisitos
- Familiaridade com base64
- Saber o que é uma cifra de substituição ou deslocamento
Como funciona
A cifra de Vigenère desloca cada letra por uma quantidade diferente, definida por uma palavra-chave repetida. Ela parece mais sofisticada do que um simples deslocamento de César, e por séculos foi considerada inquebrável - mas é uma cifra clássica com um alfabeto de chave fixo, e cai instantaneamente diante de uma chave conhecida, ou frente a análise de frequência sem uma chave. Envolver a saída em base64 só muda a forma como os bytes são armazenados; isso não acrescenta segurança nenhuma.
O indício de que se trata de uma cifra de letras e não de uma cifra em nível de byte é o que ela deixa intacto. A Vigenère só afeta a-z e A-Z; dígitos, chaves e sublinhados passam direto. Assim, no texto cifrado já decodificado, você consegue ver os {, } e _ do flag no lugar certo, com apenas as letras embaralhadas. Esse é o sinal para adicionar uma etapa de Vigenère em vez de uma etapa de XOR ou hex.
Remova as camadas na ordem inversa. Decodifique o base64 primeiro para obter o texto cifrado, depois adicione Vigenère e digite a chave acme. A receita executa decodificação de base64 seguida de Vigenère, e o flag em texto claro aparece na saída. As outras operações (ROT, XOR, hex, atbash, reverse, URL-decode) são distrações - o ROT é a armadilha mais próxima, mas usa um único deslocamento fixo, não uma palavra-chave repetida, então não consegue desfazer a Vigenère.
Erros comuns
- Recorrer ao ROT em vez de Vigenère. O ROT é um único deslocamento fixo; a Vigenère usa uma palavra-chave repetida, então só o ROT não recupera o flag.
- Tentar XOR. Os caracteres que não são letras ficam intactos, o que descarta um XOR em nível de byte - isso é uma cifra de letras.
- Pular a decodificação do base64. A Vigenère precisa ser aplicada sobre o texto cifrado já decodificado, não sobre o wrapper de base64.
- Tentar adivinhar a chave. A chave 'acme' está no enunciado; não faça força bruta.
Como se proteger
Para defensores e desenvolvedores, a lição é que cifras clássicas como a Vigenère são recreativas, não protetivas. Se uma ferramenta interna 'criptografa' segredos dessa forma, trate esses segredos como texto claro. Reconhecer rapidamente uma cifra clássica economiza tempo em CTFs e na triagem real de sistemas legados.
- Nunca proteja segredos reais com cifras clássicas - use criptografia autenticada validada com uma chave gerenciada.
- Ao auditar ferramentas legadas, sinalize qualquer 'criptografia' personalizada ou clássica como, na prática, nenhuma proteção.
- Durante a triagem, observe quais caracteres uma transformação deixa intactos para diferenciar cifras de letras de cifras em nível de byte.
- Lembre-se de que base64 é codificação, não criptografia - nunca acrescenta confidencialidade.