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 ?