--- tags: Crypto, Brigitte_Friang --- # Write-up "VX Elliptique", Crypto, Opération Brigitte Friang, DGSE, 2020 ###### tags: Crypto, Brigitte_Friang ## Présentation du challenge ### Énoncé *Nous avons intercepté 2 fichiers (VX_elliptique.pdf et livres_Friang.pdf) émis par un sous-marin d'Evil Gouv. La référence à Brigitte Friang ne peut être une coïncidence. Nous savons de source sure qu'Eve Descartes a été enlevée par Evil Gouv et est retenue dans un de leurs sous-marins dans l'océan Atlantique. Ce doit être elle qui a envoyé ces fichiers. Grâce à une de ses crises mathématiques, elle aura sûrement caché l'identification du sous-marin dans ces fichiers. Votre mission est de retrouver l'identification du sous-marin.* ### Données `VX_elliptique.pdf` : fichier contenant les informations pour trouver le mot de passe du second fichier ![VX](https://i.imgur.com/6asYtkR.png) `livres_Friang.pdf` : fichier pdf protégé par un mot de passe ## Recherche du mot de passe On dipose de deux fichiers pdf, l'un chiffré, l'autre non. Le pdf non chiffré contient notamment **l'équation d'une courbe elliptique**, ainsi que des informations sur des points de cette courbe. \begin{equation} y^2 \: \mbox{mod $n$} = (x^3 + Ax^2 + x) \: \mbox{mod $n$} \: \: \: \: \: (1) \end{equation} La marche à suivre semble assez linéaire : * Trouver l'inconnue $A$ à partir de $x$ et $y$ * Trouver $x_1$ et $x_2$ à partir de $y_1$ et $y_2$ * Trouver $z$ à partir de $x_1$ et $x_2$ On va se servir du logiciel de calcul **sage** pour effectuer la plupart de nos calculs. ### Étape 1 : Recherche de $A$ #### Recherche de l'équation On connait un couple $(x,y)$ valide, on a donc une seule inconnue. On va d'abord se ramener à une équation modulaire linéaire à partir de $(1)$ : \begin{equation} y^2 \: \mbox{mod $n$} = (x^3 + Ax^2 + x) \: \mbox{mod $n$} \Leftrightarrow(y^2 - x^3 - x) \: \mbox{mod $n$} = A x^2 \: \mbox{mod $n$} \end{equation} Posons pour plus de clarté : $b = (y^2 - x^3 - x) \: \mbox{mod n} \\ a = x^2 \\ A = X$ On dispose alors d'une équation diophantienne d'inconnue $X$ : \begin{equation} aX \equiv b \: \mbox{mod $n$} \: \: \: \: \: (2) \end{equation} #### Résolution de l'équation Cette équation admet une solution si et seulement si le **pgcd** de $a$ et de $n$ divise $b$. Leur pgcd s'obtient avec la fonction $\verb|gcd(a, n)|$ de *sage*. ![gcd](https://i.imgur.com/u6pcNZ3.png) La fonction nous renvoie $\verb|gcd(a, n) = 1|$ On a donc $a$ et $n$ premiers entre eux. Or comme $a$ et $n$ sont premiers entre eux, selon le **théorème de Bézout** il existe $u$ et $v$ tel que $ua + vn = 1$. En particulier il existe un entier $u$ tel que $ua \equiv 1 \: \mbox{mod n}$. C'est l'**inverse modulaire** de $a$, que l'on peut calculer avec la fonction $\verb|inverse_mod(a, n)|$ de *sage*. ![u](https://i.imgur.com/ZlnkdX3.png) On trouve \begin{split} u = 33208700369591938334711589173041607863\\ ...330741681120497861327034574193752378903 \end{split} On multiplie maintenant l'équation $(2)$ par $u$ : \begin{equation} uaX \equiv ub \: \mbox{mod $n$} \end{equation} Comme $ua \equiv 1 \: \mbox{mod n}$ on a : \begin{equation} X \equiv ub \: \mbox{mod $n$} \end{equation} Et donc après application numérique et application du modulo : \begin{equation} X \equiv 486662 \: \mbox{mod $n$} \end{equation} Finalement avec $k \in \mathbb{Z}$ on obtient l'ensemble des solutions pour $X$ : \begin{equation} X = 486662 + kn \end{equation} On peut donc récupérer notre inconnue $A$ en prenant $k = 0$. Ainsi on a **A=486662** (666 ? Encore une diablerie de la DGSE...) ### Étape 2 : Recherche de $x_1$ et $x_2$ Maintenant que l'on dispose de l'équation complète et connaissant les valeurs $y_1$ et $y_2$, on peut récupérer les valeurs $x_1$ et $x_2$ correspondantes. Pour ce faire on va une nouvelle fois se servir de *sage* pour effectuer des opérations dans les corps finis. On veut travailler modulo $n$, on définit donc notre anneau de polynômes avec le champ de Galois de cardinal $n$ : ![Galois_Field](https://i.imgur.com/whVeK9O.png) On va ensuite chercher les **racines** pour $y = y_1$ et $y = y_2$ du polynôme suivant : \begin{equation} x^3 + Ax^2 + x - y^2 \end{equation} ![roots](https://i.imgur.com/jIo5LOD.png) On trouve trois racines différentes $x_{11}$, $x_{12}$ et $x_{13}$ pour $y = y_1$ et une unique racine triple ${x_{20}}$ pour $y = y_2$. ### Étape 3 : Recherche de $z$ On dispose maintenant de toutes les informations nécessaires pour réaliser la dernière étape de notre périple mathématique. On se trouve cette fois-ci dans le cas d'un système d'équation modulaire de type : \begin{equation} \left\{ \begin{array}{l} z \equiv a \: \mbox{mod $n$} \\ z \equiv b \: \mbox{mod $m$} \end{array} \right. \end{equation} Avec $a = x_1$, $b = x_2$, et $m = \frac{n - 1}{2}$. Encore une fois notre boite à outils magique possède l'instrument adapté : la fonction $\verb|crt(x_1, x_2, n, m)|$ de *sage* permet justement de résoudre ce type de système. On prend comme valeur pour $x_1$ la valeur de la 1ère racine trouvée $x_{11}$, et on testera les autres si besoin. ![z](https://i.imgur.com/MCbC7AT.png) La fonction nous sort une valeur \begin{split} z = 1626912004825687681266928944940137740110044614947501\\ ...502667974700957265876831665835249437745227202257555\\ ...252761324145945972681589648893511804029315415851794 \end{split} Autant dire tout de suite qu'un `Ctrl + C Ctrl + V` s'impose. Rentrons notre "nombre de passe" dans le `livres_Friang.pdf`, et bingo, les portes du paradis s'ouvrent devant nous. ## Scan du code barre Le fichier dévérouillé contient simplement les photos de couverture de trois livres tous écrits par Brigitte Friang elle même, *Marche autant que tu pourras*, *Regarde-toi qui meurs* et *Comme un verger avant l'hiver*. ![Books](https://i.imgur.com/bgPBkQn.png) On remarque rapidement la présence d'un code barre sur la couverture de *Regarde-toi qui meurs* qui n'a à priori rien à faire ici, avec un code d'identification au dessus : **BF-2703-9020-RTQM** Mission accomplie, repos soldat. --- ###### -- *MrR0bot*