RSA Noob
2 minutos de lectura
Se nos proporcionan estos números:
e: 1
c: 108193852288406505568171818194994500452464483136775497973720445
n: 1522605027922533360535618378132637429718068114961380688657908494580122963258952897654000350692006139
Tenemos el exponente $e$, el módulo $n$ y el texto cifrado $c$.
Está claro que estamos ante un criptosistema RSA. Vamos a recordar cómo funciona RSA:
Se eligen dos números primos $p$ y $q$ de forma que el módulo $n = p \cdot q$. Luego se escoge un exponente $e$ (normalmente 3 ó 65537) que sea coprimo con $\phi(n) = (p - 1) \cdot (q - 1)$.
Para cifrar un mensaje $m$ (en formato numérico), se tiene que realizar esta operación:
$$ c = m ^ e \mod{n} $$
Donde $c$ es el texto cifrado. Y para descifrar el texto cifrado, tenemos que calcular $d = e ^ {-1} \mod{\phi(n)}$ y luego realizar la siguiente operación:
$$ m = c ^ d \mod{n} $$
En este punto, la clave pública es el conjunto ${e, n}$, mientras que la clave privada está compuesta por ${p, q}$.
Esta vez, el exponente $e = 1$, por lo que $d = 1$ también, ya que es el inverso respecto de la multiplicación (y 1 es el elemento neutro de la multiplicación). Entonces, $m = c$.
Lo único que tenemos que hacer es decodificar el mensaje $m$ de número a caracteres en ASCII:
$ python3 -q
>>> bytes.fromhex('108193852288406505568171818194994500452464483136775497973720445')
b'CTFlearn{b3tter_up_y0ur_e}'