Contents

Retour aux sources

MidnightCTF • 2024 •


Category :

Crypto

Description :

Voilà les fichiers qui étaient fournis :

Source.py et Outpout.txt.

Il faut se baser sur ces deux fichiers pour résoudre le challenge.

Source.py :

from Crypto.Util.number import getPrime, bytes_to_long
import math
from super_secret import flag

m = bytes_to_long(flag)

z = []
for hey in range(1024**(0)):
    z.append(getPrime(1024))

n = math.prod(z)

e = 0x100001

with open('output.txt', 'w') as f:
    f.write(f'{n = }\n')
    f.write(f'{e = }\n')
    f.write("c =" + str(int(pow(m, e, n))))

Output.txt:

n = 120154269905138192411391191398976535526719518763614629012467119791158898243636581028193617198308072414473675597119386635758833912767888946461927038930309978578151909912247022109956454047808157443912106603576628133516080238431851987309829049482974245755557890602608533798942465700524674017649586964749795503907
e = 1048577
c =112131769061863157582206902794706307787376441536475925637794499610352216277884266668233852165255435484902059092228094627632502452075609345890718955546331647782141352807558391026039060334176952276306678953561089609897886575688921388228876952827334853010664153370817811056441329533096065098137670506655501321060

Difficulty :

EASY

Write up :

Dès l’ouverture du fichier .py, on se rend compte qu’il s’agit d’un challenge tout simple de RSA.

On écrit un programme python tout simple et rapide pour déchiffrer ce qui a été déchiffré :

from Crypto.Util.number import inverse, long_to_bytes

# Valeurs fournies
n = ...  # valeur de n
e = 0x100001
c = ...  # valeur de c

# Calcul de l'exposant de déchiffrement (d)
phi_n = n - 1  # As the prime factors are prime numbers, phi(n) = n - 1
d = inverse(e, phi_n)

# Déchiffrement du message
m = pow(c, d, n)

# Conversion du message déchiffré en chaîne de caractères
plaintext = long_to_bytes(m)

print(plaintext.decode())
Flag
🚩 MCTF{SCRIPT_ENCODER}