Vigenère puis base64 : décoder un chiffre classique encapsulé en base64
Le défi
Un vieil outil interne « protège » les chaînes en les passant dans un chiffre de Vigenère puis en encodant le résultat en base64. Vous avez trouvé un tel blob dans une sauvegarde de config. Décodez le base64, inversez le Vigenère avec la clé « acme », et soumettez le flag récupéré (HDNA{...}).
Ce que tu vas apprendre
- Reconnaître le base64 comme couche de transport externe grâce à son alphabet et son padding
- Identifier un chiffre classique par les caractères qu'il laisse intacts
- Décoder un chiffre de Vigenère avec une clé connue
- Retirer deux transformations empilées dans le bon ordre inverse
- Expliquer pourquoi les chiffres classiques sont des énigmes, pas une réelle protection
Compétences testées
Prérequis
- Être à l'aise avec le base64
- Savoir ce qu'est un chiffre de substitution ou de décalage
Comment ça marche
Le chiffre de Vigenère décale chaque lettre d'une quantité différente, déterminée par un mot-clé répété. Il paraît plus sophistiqué qu'un simple décalage de César, et pendant des siècles on l'a cru incassable, mais c'est un chiffre classique à alphabet de clé fixe : il tombe instantanément avec une clé connue, ou par analyse de fréquence sans clé. Encapsuler sa sortie en base64 ne change que la façon dont les octets sont stockés ; cela n'ajoute aucune sécurité.
Le signe que l'on a affaire à un chiffre sur des lettres et non au niveau octet, c'est ce qu'il laisse intact. Vigenère ne touche que a-z et A-Z ; les chiffres, accolades et tirets bas passent tels quels. Dans le texte chiffré décodé, on peut donc déjà voir les {, } et _ du flag en place, seules les lettres étant brouillées. C'est l'indice qu'il faut ajouter une étape Vigenère plutôt qu'une étape XOR ou hexadécimale.
Retirez les couches dans l'ordre inverse. Décodez d'abord le base64 pour obtenir le texte chiffré, puis ajoutez Vigenère et saisissez la clé acme. La recette enchaîne un décodage base64 puis Vigenère, et le flag en clair apparaît dans la sortie. Les autres opérations (ROT, XOR, hex, atbash, inversion, décodage URL) sont des leurres - ROT est le piège le plus proche, mais il utilise un décalage unique fixe, pas un mot-clé répété, donc il ne peut pas défaire Vigenère.
Erreurs fréquentes
- Utiliser ROT au lieu de Vigenère. ROT applique un décalage unique fixe ; Vigenère utilise un mot-clé répété, donc ROT seul ne permettra pas de récupérer le flag.
- Essayer XOR. Les caractères non alphabétiques restent intacts, ce qui exclut un XOR au niveau octet : il s'agit d'un chiffre sur des lettres.
- Sauter le décodage base64. Vigenère doit s'appliquer sur le texte chiffré décodé, pas sur l'enveloppe base64.
- Deviner la clé. La clé 'acme' est donnée dans l'énoncé ; ne la forcez pas par brute force.
Comment s'en protéger
Pour les défenseurs et les développeurs, la leçon est que les chiffres classiques comme Vigenère sont récréatifs, pas protecteurs. Si un outil interne « chiffre » des secrets de cette façon, traitez ces secrets comme du texte en clair. Reconnaître rapidement un chiffre classique fait gagner du temps en CTF comme dans le triage réel de systèmes hérités.
- Ne protégez jamais de vrais secrets avec des chiffres classiques : utilisez un chiffrement authentifié éprouvé avec une clé gérée correctement.
- Lors d'un audit d'outils hérités, signalez tout « chiffrement » maison ou classique comme n'offrant en pratique aucune protection.
- Pendant le triage, notez quels caractères une transformation laisse intacts pour distinguer les chiffres sur lettres des chiffres au niveau octet.
- Rappelez-vous que le base64 est de l'encodage, pas du chiffrement : il n'ajoute jamais de confidentialité.