---
tags: Crypto, Brigitte_Friang
---
# Write-up "Stranger RSA", Crypto, Opération Brigitte Friang, DGSE, 2020
###### tags: **`Crypto`**, **`Brigitte_Friang`**
## Présentation du challenge
### Énoncé
*Un de nos agents est parvenu à dérober une clé privée et un fichier chiffré à Evil Gouv. Retrouvez l'information, avec un peu d'imagination.*
### Données
Clé privée :`private.pem`
Fichier chiffrée : `EVIL-FILE.txt.enc`
## Déchiffrage du fichier
Nous disposons d'une clé RSA privée dans `private.pem`, il suffit donc de décoder le fichier avec cette dernière et OpenSSL :
`openssl rsautl -in EVIL-FILE.txt.enc -out EVIL-FILE.txt -inkey private.pem -decrypt`
On obtient alors un fichier texte avec très peu d'informations à part une énigmatique multiplication "**221 x 7**".

Effectivement, on sent qu'il va falloir faire preuve d'imagination pour exploiter ça.

## Différentes pistes
### RSA "multi-prime"
On rappelle que le chiffrement RSA utilise notamment un **[nombre RSA](https://fr.wikipedia.org/wiki/Nombre_RSA)** (le *modulus*), ou nombre semi-premier, qui doit être de la forme *n = p x q* avec p et q premiers.
On va alors vérifier si le nombre 1547 = 221 x 7 est un nombre RSA, mais on s'aperçoit cependant rapidement que 221 n'est pas premier, cette hypothèse tombe donc à l'eau.
J'ai cependant remarqué que 221 est un nombre semi-premier et peut se décomposer en 221 = 17 x 13. On a donc alors n qui se factorise en trois facteurs premiers, 17, 13 et 7. Or la méthode de chiffrement RSA "classique" n'en utilise que deux. Mais après quelques recherches, je me suis rendu compte qu'il était possible de chiffrer en RSA en utilisant plus de deux facteurs premiers*. Cette méthode est rarement utilisée car plus vulnérable (du fait de la taille plus petite des facteurs premiers pour un modulus de même taille). Cette méthode particulière de **RSA "multi-prime"** pourrait donc correspondre à la chose "étrange" qu'évoque le titre du challenge.
Ma piste était alors de générer une clé privée à l'aide de cette méthode puis de re-déchiffrer le fichier `EVIL-FILE.txt.enc` avec celle-ci, voire de tenter de déchiffrer la clé de `private.pem` elle-même (imagination on vous a dit).
Malheureusement après plusieurs tentatives infructueuses j'ai du me résoudre à l'évidence que j'étais sur une fausse piste.
> \* *Pour en savoir plus sur cette méthode particulière, j'ai trouvé cette [page](https://bitsdeep.com/posts/attacking-rsa-for-fun-and-ctf-points-part-4/) qui l'explique assez bien en allant à l'essentiel*
### Clé suspecte
Les autres choses "étranges" que l'on peut remarquer sont l'utilité de `private.pem`, qui ne sert à priori qu'à déchiffrer `EVIL-FILE.txt.enc`, ce qui se fait très facilement (trop facilement ?), ainsi que sa longueur, particulièrement grande. Effectivement vu le peu de données dont on dispose, rien n'exclut qu'elle cache encore un ou plusieurs secrets.
On va donc essayer de la décortiquer et de récupérer ses paramètres (modulus, exponent, prime...). Cela peut se faire avec OpenSSL en utilisant la commande :
`openssl rsa -in private.pem -text -check`
On obtient donc les précieuses informations sous forme hexadécimal. On commence par convertir le modulus, qui n'a l'air de n'être qu'un grand nombre classique. Le prime1 par contre est très étrange (ce n'est pas ce qu'on recherche justement, l'étrangeté ?), composé uniquement de 7, 8, 9, 3 et 1, arrangés en séries plus ou moins grandes.

On semble être (enfin) sur la bonne piste, cela mérite plus amples investigations.
## Analyse du nombre suspect
La première idée qui m'est venu était de "décrire" le nombre, puis de concaténer l'occurence avec le nombre et enfin de traduire tout ça en ASCII : par exemple pour la première série, on a "6 fois le chiffre 8", donc 68, ce qui donne la lettre 'D' en ASCII. Victoire se dit-on ! Cela ne peut qu'être le début d'un DGSESIEE, et plus si affinités... malheureusement la suivante donne 37, donc '%' en ASCII, et les suivantes ne donnent rien de cohérent non plus, encore une fausse piste...
On sent tout de même que l'on est pas loin. Il faudrait trouver un lien avec 1547 = 221 x 7, et justement on remarque que le nombre suspect comporte 1561 chiffres. La différence existe mais est trop faible pour être anodine. D'autant qu'on remarque que 1561 = 223 x 7.
On tente alors d'arranger le nombre en 7 lignes de 223 caractères, et bingo, on remarque effectivement quelque chose de lisible et d'explicite. En prenant un peu de recul, on arrive à déchiffrer le flag : **AD26E7D346A2CA64**.

L'ASCII ART, vous connaissez ?
---
###### -- *MrR0bot*