Open jfzazo opened 3 years ago
En realidad es el Ejercicio 2. Si puedes cambia el nombre.
Ya lo he resuelto, pero el mérito es tuyo. Impresionante. Apunto lo siguiente y aclaro algunas cosas para los más verdes:
1º hay que factorizar en primos el módulo obtenido.
En wolframalpha no te deja con este número de 192 bits --> hay que convertirlo a decimal. Hay páginas como https://www.mobilefish.com/services/big_number/big_number.php.
Sacamos el módulo de la clave pública: MDQwDQYJKoZIhvcNAQEBBQADIwAwIAIZAL9LPyTM85vtJebljX3p+ORWj2gGwk/o wQIDAQAB,
y es bf4b3f24ccf39bed25e6e58d7de9f8e4568f6806c24fe8c1, en decimal
Pero en esta página te lo factoriza en tiempo récord https://www.numberempire.com/numberfactorizer.php.
(suerte que nuestro número tiene 58 dígitos y el límite es 60, pero adiós a RSA 192 bits)
p=67446555695998731383019035573 q=69544152732691176387798972509
2º calculamos d y los exponentes, etc..
(en esta página podemos hacerlo http://kourbatov.com/math/calculators/100digitbigintcalculator.htm)
d = e^{-1} mod ((p-1)(q-1)) = 407880080549055052582335745374603828252859506336060164625
exp1 = d.mod(p.subtract(BigInteger.ONE)); 7787480155509443526180707725 exp2 = d.mod(q.subtract(BigInteger.ONE)); 29059411059168833870636050813 coeff = q.modInverse(p); 28887724925648423762038613151
3º generamos el def.asn1
asn1=SEQUENCE:private_key [private_key] version=INTEGER:0
n=INTEGER:0xBF4B3F24CCF39BED25E6E58D7DE9F8E4568F6806C24FE8C1 e=INTEGER:0x10001 d=INTEGER:0x10A2777C38C25A65D5ECED3B2920F447A0985329B2004A11 p=INTEGER:0xD9EE7BB69D02888B0A3E5BB5 q=INTEGER:0xE0B59329D2872DD2B8D5385D exp1=INTEGER:0x1929A71123B9DA282BAB9D8D exp2=INTEGER:0x5DE561A61333AB41273CE97D coeff=INTEGER:0x5D575DB220A956B9880FE49F
a partir de aquí lo mismo para generar la clave privada y descifrar la cadena diKBVUfEaItQ5lE3Nitr6KOwuZTc/eR8. Pero hay que ponerla en hex:
76 22 81 55 47 c4 68 8b 50 e6 51 37 36 2b 6b e8 a3 b0 b9 94 dc fd e4 7c
Lo guardamos en un archivo, word.crypted por ejemplo.
Y desciframos
openssl rsautl -decrypt -in word.crypted -inkey privkey2.pem >> word.txt
Muchas gracias por la ayuda. Pero aun no me queda claro como se debe realizar el ejercicio. Podeis poner un step-by-step en linea de comandos?
Muchas gracias por la ayuda. Pero aun no me queda claro como se debe realizar el ejercicio. Podeis poner un step-by-step en linea de comandos?
El step-by-step en este ejercicio consiste en echar cuentas y usar distintas herramientas web/calculadoras online/descripción del algoritmo de RSA. Los fundamentos matemáticos son obligatorios para este reto (https://es.wikipedia.org/wiki/RSA#Idea_del_algoritmo) pero la esencia es que la clave pública se genera con un producto de primos pequeño, que somos capaces de factorizar. Entonces, después de obtener los parámetros que identifican al par clave pública-privada podemos recrear la clave privada.
El segundo paso es generar un fichero de configuración que tiene extensión asn1 para que podamos usar openssl en el proceso de reconstrucción. Los parámetros no se pueden pasar de otro modo, por ello que se use un fichero de configuración.
El tercero generar la clave pem con openssl. Los comandos están en el primer mensaje.
El cuarto descifrar los ficheros, el comando está en el primer mensaje. Es un bucle for concatenando la salida de openssl. Es un xml cifrado mediante cesar. La web de cyberchef solucionó el asunto.
El quinto paso consiste en descubrir que el nuevo fichero contiene otra clave pública y otro secreto. Se repite el proceso desde el punto 1 con las nuevas claves.
PD: Por cierto, que no lo vi antes. Para pasar el secreto a hexa no hay necesidad de andar convirtiendo a mano:
$echo "diKBVUfEaItQ5lE3Nitr6KOwuZTc/eR8" | base64 -d > word.crypted
Guia paso a paso de la clave 128 bits WriteUpModulo3_Ejercicio2_Detallado.pdf 128
Otro ejercicio que se me queda a medias pero en el que tengo la impresión de haber avanzado algo.
Se provee un .zip con ficheros encriptados y una clave pública. El objetivo consistirá en recuperar la información.
1) ¿Qué clase de clave es?
Una clave bastante pequeña. Con el módulo obtenido (pasando a decimal) y tirando de mente prodigiosa, observamos que se descompone en dos números primos, p,q tales que:
Bueno, lo de mente prodigiosa, como os podéis imaginar no es el caso, pero una búsqueda en WolframAlpha y se obtiene rápidamente el resultado. 2) Con este avance se va a intentar recuperar la clave privada a partir de los parámetros que definen esta clave RSA:
3) Para ello, generamos un fichero def.asn1 con la información previa:
4) Y generamos la clave en formato per:
5) Y recuperamos la información desde el resto de ficheros:
6) Sobre el fichero total_rot.xml se ha aplicado un cifrado Cesar. Nuevamente con cyberchef u otra herramienta al gusto, se recupera el contenido de un fichero de Word:
7) Hay una clave pública nueva y otra cadena sospechosa... tiene pinta de ser base64, conteniendo un nuevo secreto cifrado de 24B para una clave pública de 192 bits... parece obvio que hay que continuar con esa pista aunque por hoy suficiente.