You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Have you ever thought about what can be done with a simple oracle?
La challenge crea un modulo RSA $n=p\cdot q$ e cifra la flag con $e=65537$; il server è poi una sorta di "half decryption oracle", ovvero risponde con $c^{d_p}\pmod p$.
Soluzione
Il server calcola $d_p\equiv e^{-1}\pmod {p-1}$ come in RSA-CRT; l'equazione fondamentale che fa funzionare questa variante di RSA è $$m^{e\cdot d_p}\equiv m\pmod p.$$
Nell'equazione precedente abbiamo due valori sconosciuti: $p$ e $d_p$; tuttavia l'oracle ci permette proprio di fare operazioni modulo $p$ usando $d_p$ come esponente: inviando $2$ al server, questo risponde $c\equiv 2^{d_p}\pmod p$.
Sostituendo nell'equazione fondamentale vediamo che allora $c^e\equiv 2^{d_p\cdot e}\equiv 2\pmod p$, perciò $p\mid c^e-2$; in quest'ultima espressione conosciamo sia $c$ che $e=65537$, quindi calcolandolo esplicitamente (come intero!) sappiamo che $p$ è un divisore di questo numero.
Infine, poiché $p\mid n$ per costruzione, sappiamo anche che $p\mid \gcd(c^e-2, n)$, e anzi molto probabilmente varrà proprio l'uguaglianza. Quindi facendo questo calcolo (un po' lungo) ricaviamo $p$ e possiamo poi decifrare RSA.