LeHack 19 - double cesar

Posted on dim. 07 juillet 2019 in CTF

double cesar
5 Points
Un ami m'a posé un challenge sur IRC. Il a d'après lui créé un algorithme de chiffrement super dur à casser, basé sur deux chiffres de césar d'affilée. Il m'a en effet expliqué que ça a pu être cassé uniquement parce que Jules César n'avait pas pensé à en mettre plusieurs à la suite. Bref, il m'a envoyé ça : "oqemdradftqiuzfdabradf" et m'a dit "vas y tu trouveras pas ce que j'ai mis". Et j'avoue que faire toutes les combinaisons de deux chiffres de césar me paraît trop compliqué. Peux-tu m'aider à cracker son code?

La chaîne à décoder est donc oqemdradftqiuzfdabradf. Le principe du chiffrement de César est initialement un décalage de 3 lettre :

  • A -> D
  • B -> E
  • C -> F
  • ...

Un double chiffrement de César est alors de retrouver le nombre total de décalages réalisés. On peut utiliser ce site. Il permet de décoder via brute force en affichant les décalages de 1 à 25, soit toutes les combinaisons possibles.

Il est également possible de faire via un script Python :

from sys import argv

message = argv[1]
LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
letters = 'abcdefghijklmnopqrstuvwxyz'

for key in range(26):
    translated = ''
    for letter in message:
        if letter.isupper():
            current_alphabet = LETTERS
        else:
            current_alphabet = letters
        num = current_alphabet.find(letter)
        num = num - key
        if num < 0:
            num = num + len(current_alphabet)
        translated += current_alphabet[num]
    print('Key %s: %s' % (key, translated))

On peut ensuite appeler notre script avec comme argument le message à décoder :

$ python rot.py oqemdradftqiuzfdabradf 
Key 0: oqemdradftqiuzfdabradf
Key 1: npdlcqzcesphtyeczaqzce
[...]
Key 12: cesarforthewintropfort
Key 13: bdrzqenqsgdvhmsqnoenqs

On cherche alors un message cohérent dans l'ensemble des valeurs. On trouve alors la rotation de 12 lettres, ce qui donne comme message décodé : cesarforthewintropfort.