--- tags: Crypto, Brigitte_Friang --- # Write-up "L'énigme de la crypte", Crypto, Opération Brigitte Friang, DGSE, 2020 ###### tags: Crypto, Brigitte_Friang ## Présentation du challenge ### Énoncé *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.* ###### Les contenus des fichiers `foulard.txt` et `final.txt` sont disponibles à la fin de ce write-up, à la section Données. ## Stratégie On nous explique dans le fichier `foulard.txt`que l'expéditeur du message, Rejewski*, a dû encoder son message à l'aide de la machine Enigma puis le chiffrer avec l'algorithme RSA. On va donc suivre le chemin inverse pour décoder le fameux message. > **Surement un clin d’oeil à [Marian Rejewski](https://fr.wikipedia.org/wiki/Marian_Rejewski), un cryptologue polonais ayant travaillé sur la cryptanalyse de la machine Enigma lors des années 30-40.* ## Première partie : Décodage du RSA On rappelle que le chiffrement RSA est un algorithme de chiffrement asymétrique reposant sur une clé publique servant à encoder le message, et une clé privée servant à le décoder. Ces 2 clés sont générées à l'aide du module de chiffrement (*Modulus*), de l'exposant de chiffrement (*PublicExponent*) pour la clé publique et de l'exposant de déchiffrement pour la clé privée. L'objectif va être de retrouver la **clé privée** pour déchiffrer le message contenu dans `final.txt`. Le fichier `foulard.txt` contient le *Modulus* et le *PublicExponent* utilisé par Rejewski pour chiffrer son message. Heureusement il est possible de retrouver la clé privée avec ces 2 paramètres. On peut notamment utiliser le tool **[RsaCTFtool](https://github.com/Ganapati/RsaCtfTool)** pour cela. On rentre donc la commande : `RsaCtfTool.py -n [Modulus] -e [PublicExponent] --private --output key.pem`. Si tout se passe bien, la clé privée est maintenant disponible dans le fichier `key.pem`. ![key](https://i.imgur.com/7QVRAxI.jpg) Il ne reste plus qu'à décoder le chiffrement RSA à l'aide de la commande **`openssl`** de la manière suivante : `openssl rsautl -decrypt -in final.txt -inkey key.pem -out final_decrypted.txt`. On vérifie le résultat en affichant le contenu du fichier `final_decrypted.txt` et on observe le message en clair, pas encore lisible mais cohérent. ![RSA-decoded](https://i.imgur.com/GOYUllR.png) Enigma, à nous deux maintenant. ## Seconde partie : Décodage d'Enigma Après avoir décrypté le message encodé en RSA contenu dans `final.txt`, on se retrouve avec le message en clair suivant : **IVQDQT NHABMPSVBYYUCJIYMJBRDWXAXP THYVCROD**. Il reste à déchiffrer le message, codé à l’aide d’une machine Enigma M3 (3 rotors). On peut en trouver les différentes étapes de fonctionnement sur la page Wikipédia de la machine [Enigma](https://fr.wikipedia.org/wiki/Enigma_(machine)). ![Enigma_usage](https://i.imgur.com/xhrMj8s.png) On peut d'ores et déjà affirmer que la première partie du message correspond à la clé chiffrée, la dernière partie à la signature de l'éxpéditeur, Rejewski, tandis que la deuxième partie, celle qui nous intéresse, est celle renfermant le flag. ### 1) Ordre des rotors La première étape concerne l'ordre des rotors (*Walzenlage*), à choisir dans la liste *[I, II, III, IV, V, VI, VII, VIII]*. L’information donnée dans `foulard.txt` est assez explicite : “Uniquement les impairs en ordre croissant”. On en déduit donc l’ordre : **I-III-V**. ### 2) Disposition de la bague La deuxième étape concerne la disposition de la bague des rotors (*Ringstellung*). Ce paramètre est directement donnée dans`foulard.txt` : **REJ**. ### 3) Plugboard La troisième étape concerne les permutations des fiches du tableau de connexions, le plugboard (*Steckerverbindungen*). Ce paramètre correspond au `<texte illisible 1>` composé selon l’énoncé de 2 lettres, un espace, 2 lettres. L’énoncé nous dit également que ”Il pourrait y avoir un lien avec le dernier code d'accès que vous avez envoyé à Antoine Rossignol”. Or ce code était `b a:e z`. Cela correspond bien au format du `<texte illisible 1>`, on en déduit donc les 2 paires de lettres à permuter : **BE AZ**. ### 4) Position initiale des rotors Il nous faut ensuite connaître la position initiale des rotors (*Grundstellung*). Ce paramètre est également donné dans `foulard.txt` : **MER**. ### 5&6) Clé brute et clé chiffrée Il nous faut maintenant la clé brute, qui consiste en une série de 3 lettres qui se répète. L’énoncé nous dit que `<texte illisible 2>` est une série inconnue de caractères, et que `<texte illisible 3>` est fait de 2 lettres. On devine donc que `<texte illisible 2>` doit correspondre au mot "clé" et que `<texte illisible 3>` doit renfermer les 2 dernières lettres de la clé, qui commence par B selon `foulard.txt`. On dispose de la clé chiffrée, qui correspond à la première partie du message crypté : *IVQDQT*. On la rentre donc dans la machine et on obtient la séquence suivante : *BFGBFG*. On observe une série de 3 lettres qui se répètent et qui commence par un B, ce qui est cohérent avec l’énoncé et avec ce que l’on cherche. On a donc trouvé la clé brute : **BFG**. ![brute_key](https://i.imgur.com/p8LmI7C.png) ### 7) Position des rotors suivant la clé On change alors la disposition des rotors par la clé brute, *BFG*. On sait que la dernière partie du message correspond au nom de l’expéditeur : Rejewski*. On passe donc *THYVCROD* dans la machine et bingo, on obtient bien *REJEWSKI* en sortie. ![Rejewski](https://i.imgur.com/SQXoE4N.png) On sait donc maintenant que notre machine est bien réglée, et on a plus qu’à passer la partie centrale du message à la moulinette. On obtient alors le flag : **LESSANGLOTSLONGSDESVIOLONS**. > ***Les Sanglots longs des violons de l’automne sont des vers issus d’un poème de Verlaine “Chanson d’automne”, ayant servi à annoncer le débarquement du 6 juin 1944.* ![FLAG](https://i.imgur.com/a9ZwOxG.png) --- ###### *-- MrR0bot* ## Données #### `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 #### `final.txt`(hex) 7f 4b 65 63 c3 b2 20 e2 88 82 c5 b8 14 31 01 5c cb 86 16 1c 24 70 c3 ae cb 9c 25 4a c2 ac e2 88 9e c3 85 c3 a3 c2 ae c3 ae c2 b5 e2 82 ac 1d e2 88 91 c3 ab 49 50 27 43 64 44 13 24 22 e2 80 a2 72 20 e2 89 a0 4e c3 82 43 48 e2 80 93 79 c2 b8 c3 8c c5 93 cb 9a 13 69 cb 9a c3 86 c3 9b c5 93 2c c3 a3 c3 bf 24 40 00 c3 9c c2 b6 78 c3 9c c3 96 e2 80 b9 13 e2 80 98 11 55 e2 80 93 e2 80 93 e2 88 9a 19 c2 b6 ef ac 81 33 c3 86 05 45 c2 a8 c3 ab 3b 1a c3 94 72 c3 9b c2 ba 61 1b c2 ba c5 b8 47 63 74 68 c3 b7 42 c3 b4 5b 24 6a 21 c3 83 c5 92 c4 b1 6c c3 a2 0c 64 e2 80 94 40 45 c3 a3 16 73 4d e2 88 82 e2 80 93 61 19 1f c2 b4 32 42 22 c3 99 10 34 c3 8a 72 09 73 58 e2 88 ab 75 03 c3 a3 79 ef a3 bf 62 e2 84 a2 e2 89 88 63 ce a9 3e c3 96 c3 a2 c2 a5 7a 18 cb 9d c3 b5 3d 4c 5e cb 9b c3 bc 66 c3 84 75 64 c2 a9 c3 a1 4e c3 b3 57 7a e2 80 b9 cb 9b c2 b1 47 c2 a1 c2 a9 43 16 48 c3 a1 4b 31 3a c2 ae 0b 7a 5b c3 9a c2 a9 1f e2 88 9a c3 a6 47 18 72 01 12 5e 6e 70 07 27 c3 ba 1a 61 c3 b9 e2 89 a4 07 36 34 c2 bb c2 b4 35 e2 97 8a 1f c3 b1 c2 aa 08 e2 88 ab 05 53 c2 b1 5f 3b 5f 6c 62 1c ef ac 81 28 0b cb 9b c3 ab 2f 42 c2 af 1f c3 9b 15 c3 80 c2 bb c3 9c 5f e2 80 a0 c5 92 0a ef ac 81 14 e2 80 93 55 c3 9c