RSA2
Catégorie: Crypto Difficulté: - Flag: CTFREI{e_c4nt_b3_sm0l}
Challenge
Description
Voici mes valeurs, essaie de récupérer mon flag !
Aide: Google, Python, Sagemath
Tout est dans le fichier output.txt
.
Solution
A partir de l'ouput, on devine que la vulnérabilité réside dans l'utilisation d'un petit exposant e
public avec une clé publique n
relativement grande. Si le message chiffré est petit, cela permet une attaque de type Low Exponent Attack car si le message d'origine m
est inférieur à la racine e
de n
, on peut le récupérer directement sans avoir besoin de factoriser n
.
Voici un code pour exploiter cette vulnérabilité :
import gmpy2
# Valeurs dans output.txt
n = 92759448658226112225624045166467699487227189687228306666681698417999476823255144665619584939699668831251423065215248773667979129374187295004151275292876444193988250219670530677042349519587657596146755915042624951835397746094188218860026753528953020673938386227925429324345721374938104108173380775777824611871
e = 3
c = 15985570458724457343395431876750283374173177321368798888331046508938475449458495317603941701606837827853402942638445635521666701411166011757108940911136289125
# Calculer la racine e de c
m, exact = gmpy2.iroot(c, e)
# Vérifier si la racine est exacte
if exact:
flag = int(m).to_bytes(40, 'big').strip(b'\x00').decode()
print(flag)
# CTFREI{e_c4nt_b3_sm0l}
else:
print("Impossible de trouver un message exact.")
Dernière mise à jour
Cet article vous a-t-il été utile ?