Aliens CTF RSA
Challenge
from Crypto.Util.number import *
p = getPrime(512)
q = getPrime(512)
Z = p + q
e = 65537
n = p*q
phi = (p - 1) * (q - 1)
d = pow(e,-1,phi)
flag = b'AliensCTF{XXXXXXXXXXXXXXX}'
flag = bytes_to_long(flag)
ct = pow(flag,e,n)
print("Z = " , Z)
print("ct = " , ct)
print("e = " , e)
print("d = " . d)
'''
Z = 16820737097353712199008885189308993240062786445532266527638053380922378774616476382163247194937072305014746509504145047878443638872497494118908269570032268
c = 479071499146375975938322489301482293703390637168677812333128679564097095268226244517563983793769084733694521865492794622837160726397932788602732027510921529236034519758543370535127503081504645209677730499880169790853613312632519658763093707467213480497322022033842076428439183228571516341469788182850999977
e = 65537
d =30457311326725662835214016666844881462445051263981028375137823295574368019980007635319500981574067252775053081714539957668696316970001308548888552486734579219472425821075186464709552910556541803654932577396437902891944339629571939336444030765475727284297080520163293154113609913839011602974796247723401571353
'''
Solve
we have $Z = p + q$ from this hint we can calculate $\phi$ in this way
\(\phi = (p-1) \times (q-1) = pq - p - q + 1 = n - z + 1\)
and we know that:
\(ed - 1 = K \times \phi \quad \Rightarrow \quad ed - 1 = K (n - z + 1)\)
Now rearrange the equation for $N$ and brute force $k$
\[N = \frac{ed - 1}{K} + Z - 1\]from Crypto.Util.number import *
from tqdm import *
e = 65537
Z = 16820737097353712199008885189308993240062786445532266527638053380922378774616476382163247194937072305014746509504145047878443638872497494118908269570032268
ct = 479071499146375975938322489301482293703390637168677812333128679564097095268226244517563983793769084733694521865492794622837160726397932788602732027510921529236034519758543370535127503081504645209677730499880169790853613312632519658763093707467213480497322022033842076428439183228571516341469788182850999977
e = 65537
d = 30457311326725662835214016666844881462445051263981028375137823295574368019980007635319500981574067252775053081714539957668696316970001308548888552486734579219472425821075186464709552910556541803654932577396437902891944339629571939336444030765475727284297080520163293154113609913839011602974796247723401571353
for k in trange(28_000, e):
n = ((e*d-1)//k) + Z - 1
flag = long_to_bytes(pow(ct, d, n))
if b"Alien" in flag:
print(flag)
break
#AliensCTF{partialKeyIsNiceIdia}