Category : Crypto
Points : 200
Une livraison de souffre doit avoir lieu 47°N 34 2°W 1 39.
Elle sera effectuée par un certain REJEWSKI. Il a reçu des instructions sur un foulard pour signaler à Evil Gouv son arrivée imminente.
Nous avons une photo du foulard, mais celle-ci n'est pas très nette et nous n'avons pas pu lire toutes les informations. Le fichier foulard.txt, est la retranscription du foulard.
Nous avons un peu avancé sur les parties illisibles :
(texte illisible 1) est deux lettres un espace deux lettres. Il pourrait y avoir un lien avec le dernier code d'accès que vous avez envoyé à Antoine Rossignol.
(texte illisible 2) a été totalement effacé et enfin (texte illisible 3) semble être deux lettres.
REJEWSKI vient d'envoyer un message (final.txt). Il faut que vous arriviez à le déchiffrer. Je vous conseille d'utiliser openssl pour RSA.
Le flag est de la forme DGSESIEE{MESSAGE} où MESSAGE correspond à la partie centrale du texte en majuscules sans espace.
- final.txt (SHA256=1e93526cd819aedb8496430a800a610068e95762536b0366ca7c303a74eaab03) : http://challengecybersec.fr/d3d2bf6b74ec26fdb57f76171c36c8fa/final.txt
- foulard.txt (SHA256=9c8b0caf9d72fa68ddb6b4a68e860ee594683f7fe4a01a821914539ef81a1f21) : http://challengecybersec.fr/d3d2bf6b74ec26fdb57f76171c36c8fa/foulard.txt
Mission Scherbius
Chiffrez un message suivi de votre nom avec la machine de type M3 avec cette disposition :
Uniquement les impairs en ordre croissant
Ringstellung : REJ
Steckerverbindungen : (texte illisible 1)
Grundstellung : MER
(texte illisible 2): B(texte illisible 3)
Le résultat (texte) doit être ensuite chiffré avec RSA en utilisant notre clé publique avant de nous l'envoyer. Je vous rappelle notre clé publique :
Modulus (décimal):
25195908475657893494027183240048398571429282126204032027777137836043662020707595556264018525880784406918290641249515082189298559149176184502808489120072844992687392807287776735971418347270261896375014971824691165077613379859095700097330459748808428401797429100642458691817195118746121515172654632282216870038352484922422622979684865170307405907272815653581732377164114195025335694039872221524699156538352092782201392513118326772302632498764753996118057437198905106508696675497143847180616766425109043955104189270381382844602871223783458512671511503420521749067165952916834014926827585314522687939452292676577212513301
PublicExponent (décimal) : 65537
On va utiliser l'outil RsaCtfTool.
C'est l'attaque Fermat (factorisation pour p et q proches) qui permet d'obtenir la clé privée:
RsaCtfTool.py --createpub -n 25195908475657893494027183240048398571429282126204032027777137836043662020707595556264018525880784406918290641249515082189298559149176184502808489120072844992687392807287776735971418347270261896375014971824691165077613379859095700097330459748808428401797429100642458691817195118746121515172654632282216870038352484922422622979684865170307405907272815653581732377164114195025335694039872221524699156538352092782201392513118326772302632498764753996118057437198905106508696675497143847180616766425109043955104189270381382844602871223783458512671511503420521749067165952916834014926827585314522687939452292676577212513301 -e 65537 > public.key
RsaCtfTool.py --publickey public.key --private > private.key
openssl rsautl -decrypt -inkey private.key -in final.txt
final.txt
décrypté :
IVQDQT NHABMPSVBYYUCJIYMJBRDWXAXP THYVCROD
enigma.c est un programme en C pour coder/décoder Enigma (initialement écrit pour résoudre le challenge Machine Enigma).
Ou le module Python pyenigma, ou cryptii, ou dcode.fr, etc.
Le texte est composé de 6 lettres, puis 26 en partie centrale et enfin, 8 lettres.
Les 6 premières lettres correspondent peut-être à une clé chiffreur (ou cillies). Ce sont trois lettres choisies par le chiffreur, transmises deux fois. Puis l'opérateur repositionne les rotors sur ces 3 lettres.
Les 8 dernières lettres, au nom de l'agent (REJEWSKI) (instructions du foulard).
Le mode opératoire d'Enigma est décrit sur des centaines (voir milliers) de sites. Notamment sur la page Wikipedia et aussi en anglais sur cet excellent site.
Selon les indices et les instructions du foulard, on a :
- Grundstellung (« position initiale des rotors ») :
MER
(foulard) - Ringstellung (« positionnement de l'anneau ») :
REJ
(foulard) - Walzenlage (« rotor »):
I III V
(foulard: Uniquement les impairs en ordre croissant) - Steckerverbindungen (« tableau de connexion, plugboard ») :
BE AZ
(deux lettres un espace deux lettres, indice) - Umkehrwalze (« réflecteur, reflector ») :
B
(non mentionné sur le foulard)
- texte illisible 1 =
BE AZ
(indice du défi crypto d'Antoine Rossignolb a:e z
, et nonBA EZ
!) - texte illisible 2 =
?
(certainement clé opérateur, je ne connais pas le terme allemand) - texte illisible 3 =
B??
(certainement la clé opérateur, ou message key)
On utilise le programme une première fois pour savoir la clé chiffreur:
$ ./enigma B MER-REJ I III V "BE AZ" "IVQDQT NHABMPSVBYYUCJIYMJBRDWXAXP THYVCROD"
BFGBFG CMVEJLFJGTMORQGNFZNQMUCPQY RYSNOOUR
La clé chiffreur est donc BFG
(référence amusante et certainement non fortuite 😂).
./enigma B BFG-REJ I III V "BE AZ" "NHABMPSVBYYUCJIYMJBRDWXAXP THYVCROD"
LESSANGLOTSLONGSDESVIOLONS WJVDLOIT
Bingo, sans aucun doute possible, le flag est LESSANGLOTSLONGSDESVIOLONS
.
Curieusement, le nom est codé avec la même position initiale BFG
:
./enigma B BFG-REJ I III V "BE AZ" "THYVCROD"
REJEWSKI
Ce qui ne correspond pas tout à fait aux usages d'Enigma pour un même message.
Le titre du challenge est un jeu de mot autour de « cryptage » et « Enigma ».
Le nom de la mission est inspiré par le créateur d'Enigma, Arthur Scherbius.
Marian Rejewski est un mathématicien et cryptologue polonais à l'origine du cassage du chiffrement Enigma.
Les sanglots longs des violons de l'automne est un message radio diffusé par Radio Londres le 1er juin 1944 pour annoncer le débarquement des troupes alliées.
La localisation GPS correspond à un terrain au milieu d'un triangle Vannes-Nantes-Rennes, proche du village de Fégréac. La référence reste mystérieuse (mais il n'y a peut-être aucune référence à trouver).
DGSESIEE{LESSANGLOTSLONGSDESVIOLONS}