Solution de bluesheet pour Habemus Clavem Corrumpere

crypto forensics RSA

17 novembre 2023

Table des matières

Habemus Clavem Corrumpere

500 points

Enoncé

On vous demande d’analyser a posteriori une page mémoire extraite d’une machine compromise.

Beaucoup de données ont été effacées, mais il est primordial pour votre interlocuteur de récupérer un flag qu’il était sur le point de déchiffrer.

Ma solution

Le challenge nous donne une page mémoire. En passant binwalk sur cette page un trouve 2 fichiers : flag.txt.enc, et un fichier DER. On extrait le flag chiffré, et on parse la clé RSA grâce à cette page et un parser python que je n’ai pas retrouvé au moment de faire ce write-up.

On a donc : N, e, invq mod p, et les premiers bits de p.

Après un peu de mathématiques, j’arrive à l’équation : invq * q² - q = 0 mod N (prendre la définition de invq, multiplier par q l’équation)

J’effectue ensuite des recherches sur ce type d’équation, jusqu’à tomber sur cette page expliquant la méthode de Coppersmith pour trouver les solutions d’une telle équation.

Encore et toujours des recherches, mais cette fois je sens que je me rapproche de la solution ! Je finis par trouver une implémentation de cette méthode avec Sage !

Pour converger rapidement vers la solution, on peut “translater” notre équation : au lieu d’avoir une équation en q, on a une équation en (A + q’), où A contient les MSB de q, obtenable en calculant N//MSB(p). On obtient A = 0xf97104 * 256**61

Je lance le script Sage, qui trouve la valeur de q'. Je prends donc q = A + q'. Après vérification, le résultat semble valide !

Un rapide script python permet enfin le déchiffrement du flag.