Défi Énigme du CST – Énigme 3 solution

Règles

Connaître les règles signifie parfois gagner le jeu.

 

Solution:

1. Décoder le message

Dans l'image principale, on trouve une grille comportant des pièces du jeu d'échec, en l'occurrence, des cavaliers. Cette grille contient un message codé. Le défi consiste à décoder ledit message. D'après l'image, on constate qu'un cavalier peut se présenter de quatre façons : de face, de profil droit, de dos ou de profil gauche. Ces quatre positions correspondent respectivement aux quatre valeurs suivantes : 0, 1, 2, 3. C'est à partir de ces quatre positions que le message est codé (voir image). Chaque série de cavaliers code un nombre en base 4 correspondant à la valeur d'un code ascii. Par exemple, l'image suivante code la lettre « A » :

En effet, la combinaison « profil droit, face, face, profil droit » correspond à « 1001 » en base 4. Lorsque cette valeur « 1001 » est convertie en base 10, on obtient le nombre « 65 », qui est la valeur ascii de la lettre « A ». Le script Python suivant utilise OpenCV pour décoder automatiquement la séquence de l'image :

Saisir le script : knightDecoding.py

En premier lieu, le script extrait les parties d'image correspondant aux cavaliers se trouvant dans l'image. Ensuite, il relève les pixels qui correspondent à chacune des quatre positions potentielles des cavaliers. À ce stade, le script repasse sur l'intégralité de l'image de la grille et, pour chaque partie d'image, il analyse les pixels et établit les correspondances requises de façon à définir dans laquelle des quatre positions possibles se trouve chacun des cavaliers. Depuis la base 4, cette information est ensuite transposée en valeurs ascii.

Dès lors que l'image est décodée, il en résulte la séquence qui suit :

Forsyth & Edwards need a checkmate next move: 3n4/k1P2P1p/3Q2p1/p7/K3Bb1r/P7/5P2/1q6 w - - 0 1 | pass=md5(winning_fen)

 

2. Relever le défi du jeu d'échecs

En cherchant les mots clés « Forsyth & Edwards » dans la chaîne décodée de Google, on peut trouver l'article Wikipedia portant sur la notation Forsyth-Edwards (FEN pour Forsyth-Edwards Notation) [https://fr.wikipedia.org/wiki/Notation_Forsyth-Edwards]. Comme il est énoncé dans cette page Wikipedia, FEN est une notation normalisée employée pour coder les position d'un échiquier. La chaîne FEN contenue dans l'image décodée donne les positions suivantes sur l'échiquier :

 

La chaîne décodée indique qu'il faut faire « échec et mat » au coup suivant. Elle indique également qu'un mot de passe doit être trouvé en prenant le md5 d'une chaîne de notation FEN gagnante :

pass=md5(winning_fen)

 

Comme c'est au tour des blancs de jouer, il faut déplacer le pion de c7 à c8 de façon à ce qu'il soit promu et changé pour un cavalier. Ainsi, il suffit d'un seul coup pour mettre le cavalier à une position permettant de créer une situation d'échec et mat (voir image ci-après). Pour ceux et celles qui connaissent plus ou moins le jeu d'échecs, il est possible d'utiliser un éditeur d'échiquier comme celui de https://lichess.org pour insérer la chaîne FEN. Le coup qui fait échec et mat peut ainsi être obtenu en utilisant l'un des moteurs d'échecs de site Web.

Dans l'image originale, l'énoncé « Connaître les règles signifie parfois gagner le jeu » est un indice permettant de savoir comment il est possible de faire échec et mat. Les règles des échecs permettent à un joueur de promouvoir un pion en le remplaçant par un fou, un cavalier, un tour ou la reine. L'utilisation de cavaliers pour le codage du message était un autre indice du recours au cavalier pour mener à la situation d'échec et mat. La nouvelle configuration des pièces résulte de la transposition des positions sur l'échiquier en notation FEN :

2Nn4/k4P1p/3Q2p1/p7/K3Bb1r/P7/5P2/1q6 b - - 0 1

Le recours au hachage md5 de cette chaîne FEN donne le mot de passe suivant :

md5(winning_fen) = md5("2Nn4/k4P1p/3Q2p1/p7/K3Bb1r/P7/5P2/1q6 b - - 0 1") = e818b1db90db15f2f86cb768481c6da9

Pour y parvenir, on peut utiliser l'outil CyberChef du GCHQ  (https://gchq.github.io/CyberChef/), comme il est indiqué ci-dessous :

 

3. Extraction du «polyglotte»

Comme les consignes ne fournissent que l'image JPEG, il est d'emblée difficile de savoir à quoi le mot de passe doit servir. En effectuant un balayage de l'image avec binwalk, on constate que le fichier JPEG contient un fichier ZIP. C'est ce qu'on appelle le « polyglotte » (ou fichier polyglotte).

cse@cse:~$ binwalk knights.jpg

 

DÉCIMAL      HEXADÉCIMAL     DESCRIPTION

-------------------------------------------------------------------------------------

0                0x0                   Données image JPEG, norme JFIF 1.01

1177786      0x11F8BA           Données d'archive ZIP, chiffré au moins v2.0 pour extraire

1227768      0x12BBF8           Fin de l'archive ZIP

 

Ce résultat indique également que le fichier est chiffré avec un mot de passe. Il est possible de décompresser ce fichier en utilisant le hachage md5 comme mot de passe.

Extraction sur Linux :

unzip -P e818b1db90db15f2f86cb768481c6da9 knights.jpeg

Le «dézippage» permet automatiquement de repérer et d'extraire le fichier ZIP contenu dans l'image JPEG.

 

Extraction sur Windows:

           Le gestionnaire de fichiers ZIP de Windows ne trouvera pas automatiquement l'archive ZIP contenue dans le JPEG. Il faut procéder à une extraction manuelle. Cette extraction peut s'accomplir de plusieurs façons, notamment au moyen du logiciel d'édition hexadécimal 010. On procède à l'ouverture du JPEG au moyen de 010 et à une recherche de la valeur hexadécimale « 0x04034b50 », qui constitue la signature de l'en-tête du fichier ZIP. Celle-ci est stockée en mode « petit-boutiste » (little-endian) – où c'est l'octet le moins important qui figure en premier –, ce qui signifie qu'une recherche au moyen des octets « 50 4B » permettra de trouver l'en-tête du fichier ZIP.

 

La signature marque le début du fichier ZIP. En copiant toutes les données, à commencer par les la signature de l'en-tête, dans un nouveau fichier hexadécimal on obtiendra un fichier ZIP valide. L'enregistrement de ce nouveau fichier donne un fichier ZIP dont le contenu peut ensuite être extrait au moyen du mot de passe découvert plus tôt.

À ce stade, le défi a été relevé. Félicitations!

 

Vous aimez résoudre des énigmes ? Faites-en une carrière