---
# System prepended metadata

title: 'Write-up "VX Elliptique", Crypto, Opération Brigitte Friang, DGSE, 2020'
tags: [' Brigitte_Friang', Crypto]

---

---
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*