RektSA 1 vs 100
Sigsegv2 final
Crypto
RektSA 1 vs 100 carottes
Writeup par plean
Ce challenge est dans la continuation du RektSA, challenge de crypto des qualifications.
En plus de demander à ce qu’on retrouve d, ce challenge demandait à ce que l’on retrouve aussi p et q.
La partie permettant de trouver phi puis d ayant déjà été expliqué dans plusieurs writeups je ne la réexpliquerai pas, celui-ci par exemple utilise la même méthode que moi pour trouver d et phi.
Une fois phi trouvé on peut en déduire p et q.
Comme nous connaissons r nous pouvons simplifier le problème en factorisant N / r.
Pour ce faire nous utiliserons la définition de l’indicatrice d’Euler:

Nous pouvons donc écrire:

Nous savons d’après RSA que:

En ramplaçant q par (n + 1) − φ(n) − p nous pouvons déduire que:

En réarrangeant un peu on trouve:

Ceci est une équation quadratique en p, avec:

Ce qui peut être facilement résolu en utilisant la formule quadratique:

Les deux solutions pour p seront les facteurs premier de n, p et q.
Une fois implémenté notre code ressemblera à ça:
gmpy2.get_context().precision=2048
pq_phi = phi // (r-1)
Nmr = N // r
a = 1
b = -(Nmr + 1 - pq_phi)
c = Nmr
x = gmpy2.sqrt(gmpy2.mpz(b**2 - 4 * c))
p = int((-b + x) / 2)
q = int((-b - x) / 2)
Il nous reste a verifier nos solutions
assert q * p * r == N
assert (q-1) * (p-1) * (r-1) == phi
On lance notre script et on récupère le flag :)
$ python3 solv.py
[+] Opening connection to finale-challs.rtfm.re on port 9002: Done
Congratulations: sigsegv{s0_y0u_c4n_s0lv3_1t_w1th_r_4ft3r_4ll...}
[*] Closed connection to finale-challs.rtfm.re port 9002