Description
Nous avons retrouvé un message qui a été chiffré par un vieux serveur avec RSA-CRT. Malheureusement, le serveur est en très mauvais état, il n’est possible de réaliser qu’une unique signature (ou un déchiffrement, c’est la même opération) mais cette opération se passe mal. Nous pensons qu’une erreur est introduite lors du calcul de l’exponentiation modulaire d’un des résidus modulaires.
Nous comptons sur vous pour récupérer la clé permettant de déchiffrer le message.
Le serveur réalise le chiffrement de la manière suivante (en Python) :
m = int.from_bytes(b"Test message", "big")
c = pow(m, e, n)
Le serveur réalise le déchiffrement (ou la signature) de la manière suivante :
n = p * q
dp = d % (p - 1)
dq = d % (q - 1)
cp = pow(m, dp, p)
cq = pow(m, dq, q)
_, a, b = egcd(p, q) # Extended GCD
m = (a * p * cq + b * q * cp) % n
Pour convertir le message en suite d’octets :
m = m.to_bytes((m.bit_length() + 7) // 8, "big")
Fichiers
Auteur
Instructions
- Pour commencer, téléchargez le fichier docker-compose.yml :
curl https://hackropole.fr/challenges/fcsc2023-hardware-un-truc-qui-cloche/docker-compose.public.yml -o docker-compose.yml
- Lancez l'épreuve en exécutant dans le même dossier :
docker compose up
- Dans un second terminal, accédez à l'épreuve via Netcat avec :
nc localhost 4000
Si vous rencontrez des problèmes, veuillez consulter la FAQ.
Flag
Soumettez votre solution
Vous pouvez envoyer votre solution rédigée pour cette épreuve. La FAQ contient la marche à suivre.
Vous avez besoin d'être identifié(e) pour soumettre une solution.
Solutions
Il n'y a pas encore de solutions pour cette épreuve, mais vous pouvez soumettre la vôtre après avoir trouvé le flag.