from Crypto.Util.number import getStrongPrime p = getStrongPrime(1024) q = getStrongPrime(1024) N = p * q phi = (p - 1) * (q - 1) e = phi - 3 d = pow(e, -1, phi) with open('flag.txt', 'rb') as flag: m = int.from_bytes(flag.read(), 'big') assert(m.bit_length() < 1000) c = pow(m, e, N) print(f'N = {N}') print(f'c = {c}')
のRSA だが、
自体は与えられていない。
となるので、small public exponent attackが有効そう
from gmpy2 import iroot N = 24326... c = 82434... m, _ = iroot(pow(c, -1, N), 3) print(bytes.fromhex(hex(m)[2:]))
(厳密には の条件しか与えられてないのでこれで解けるとは限らない。この解法で解けるためには
である必要があって、それには
が必要)