Ir al contenido principal

Entradas

Mostrando entradas de enero, 2019

Criptografía (CXXVII): Solución Reto 26

El  enunciado del reto de criptografía que formulé en estepostera el siguiente:

"Y como no hay dos sin tres, otro reto en el que se nos viene a recordar que el tamaño sí importa. Supón que interceptas tres criptogramas, que sabes que se corresponden con un mismo texto en claro (m) y que dichos criptogramas han sido enviados a tres personas diferentes, ¿puedes obtener el texto en claro (m)?.

Nota: en el archivo asociado al reto se indican los valores en decimal correspondientes al módulo (n) y al exponente público (e) de las respectivas claves de las tres personas y los valores en decimal de los criptogramas remitidos a éstas".

Solución: Decía en la primera pista que puse para ayudar a resolver este reto que como en el enunciado se establece que los tres criptogramas se corresponden con un mismo texto en claro (m1 = m2 = m3 = m) y en el archivo asociado al reto (reto_26.txt) vemos que los tres exponentes públicos son iguales a 3 (e1 = e2 = e3 = 3), si los módulos (n1, n2, n3) so…

Gimnasia mental (XXXII): los siete ladrones

Siete ladrones roban un cargamento de lingotes de oro y a la hora de repartir el botín a partes iguales sobran 6 lingotes.

Como no se ponen de acuerdo en la forma de repartir los lingotes sobrantes, se pelean entre ellos y mueren dos ladrones. Tras realizar de nuevo el reparto entre los supervivientes sobran dos lingotes, por lo que se vuelve a desatar una pelea entre ellos y muere otro ladrón. Ahora sí, el reparto de los lingotes se realiza a partes iguales entre los ladrones que quedan vivos.

a) ¿Cuál es el número mínimo de lingotes que han robado los ladrones para que pueda ser cierto el enunciado?.
b) ¿Cuál es el siguiente número de lingotes que podría hacer cierto el enunciado?. 
Si eres capaz de resolver este problema, sin duda, podrás resolver también este reto de criptografía.


Solución: utilizo lo que he entendido del teorema chino del resto para resolver este problema.
Tenemos el siguiente sistema de congruencias lineales simultáneas:
X ≡ 6 (mod 7) X ≡ 2 (mod 5) X ≡ 0 (mod 4)
Es deci…

Criptografía (CXXVI): Reto 26

Otro reto de dificultad media sobre criptografía, relacionado con el anterior y, por tanto, en el que también se ve involucrado el criptosistema RSA.

Como siempre, se admiten soluciones en forma de comentarios a esta entrada. Pasado un tiempo iré proporcionando pistas para su resolución, un máximo de tres, y posteriormente actualizaré este post con la solución.

Reto 26: "El tamaño sí importa (III)".

Y como no hay dos sin tres, otro reto en el que se nos viene a recordar que el tamaño sí importa. Supón que interceptas tres criptogramas, que sabes que se corresponden con un mismo texto en claro (m) y que dichos criptogramas han sido enviados a tres personas diferentes, ¿puedes obtener el texto en claro (m)?.

Nota: en el archivo asociado al reto se indican los valores en decimal correspondientes al módulo (n) y al exponente público (e) de las respectivas claves de las tres personas y los valores en decimal de los criptogramas remitidos a éstas.

Dificultad:
Tipo:           Criptogra…

Criptografía (CXXV): Solución Reto 25

El  enunciado del reto de criptografía que formulé en estepostera el siguiente:

"El primer reto que puse en este blog con este mismo título, "El tamaño sí importa", era un reto de esteganografía, pero como en él decía creo que el tamaño importa en muchos ámbitos de nuestra vida, y la criptografía no es una excepción. Dados los archivos asociados al reto, con la clave pública y el criptograma, ¿puedes descifrar este último?".

Solución: En primer lugar creo un script en python para obtener los parámetros de la clave pública (public_key.pem) que nos dan como recurso asociado al reto:

from Crypto.PublicKey import RSA

# Obtener parametros de la clave publica

pubkey = open('public_key.pem', 'r')
param_pubkey = RSA.importKey(pubkey.read())
print ''
print '   n  ...:', param_pubkey.n
print '   e  ...:', param_pubkey.e
pubkey.close()

Tras ejecutar este script veo el módulo (n) y el exponente de la clave pública (e):
Como se observa en la figura a…

Criptografía (CXXIV): Reto 25

Continúo con un reto fácil sobre criptografía. En esta ocasión se ve involucrado el criptosistema moderno de cifrado asimétrico más utilizado actualmente, RSA.

Como siempre, se admiten soluciones en forma de comentarios a esta entrada. Pasado un tiempo iré proporcionando pistas para su resolución, un máximo de tres, y posteriormente actualizaré este post con la solución.

Reto 25: "El tamaño sí importa (II)".

El primer reto que puse en este blog con este mismo título, "El tamaño sí importa", era un reto de esteganografía, pero como en él decía creo que el tamaño importa en muchos ámbitos de nuestra vida, y la criptografía no es una excepción. Dados los archivos asociados al reto, con la clave pública y el criptograma, ¿puedes descifrar este último?.

Dificultad:
Tipo:           Criptografía.

Recursos:   public_key.pem.
criptograma.enc.

******** 20/01/2019
Pista 1:     Como habrás observado el exponente de la clave pública (e) es igual a 3. Un número muy pequeño cuya utilizac…

Criptografía (CXXIII): Solución Reto 24

El  enunciado del reto de criptografía que puse en estepostera el siguiente:

"Para descifrar el contenido del archivo asociado al reto y así obtener la solución necesitarás la clave: U0FNVUVM".

Solución: En la primera pista que puse para ayudar a resolver este reto decía que si sabías o averiguabas quién es la persona que aparece en la imagen que ilustra este post entonces también sabrías el criptosistema involucrado en este reto. Pues bien, busco con Google imágenes y obtengo:"Consulta más probable para esta imagen: Georges Painvin", y la Wikipedia nos cuenta que éste fue un criptoanalista francés cuyo principal logro fue romper el cifrado ADFGVX utilizado por el ejército alemán durante la Primera Guerra Mundial.
Con lo que, como también decía, puedo concluir que el criptosistema involucrado en este reto es el ADFGVX (ya escribí en su día varios posts sobre él en este blog. Ver primero de ellos).

Además, en el post en el que planteé el enunciado de este reto decía que…

Criptografía (CXXII): Solución Reto backdoor "rsalot"

En este post la solución a otro de los retos de criptografía de la plataforma backdoor.

Este reto tiene el título "rsalot" y mi valoración sobre su dificultad es:☆.

Su enunciado dice lo siguiente:

The flag is encrypted using a system that makes use of prime factorization of large numbers. Decrypt the flag from this.

Solución: lo primero que se me ocurrió fue crear un script en python para obtener el módulo y el exponente (n y e, respectivamente) de las 100 claves públicas que nos dan como recursos asociados al reto.

from Crypto.PublicKey import RSA

i = 1
print ''
print '[+] Obteniendo el modulo (n) y el exponente publico (e) de las 100 claves'
while i < 101:
    pubkeyi = open(str(i)+'.pem', 'r')
    publickeyi = RSA.importKey(pubkeyi.read())
    ni = publickeyi.n
    ei = publickeyi.e
    print ''
    print 'n'+str(i)+' ...', ni
    print 'e'+str(i)+' ...', ei
    pubkeyi.close()
    i+=1
Por lo que veo todas las…

Criptografía (CXXI): Solución Reto backdoor "complex-rsa"

En este post la solución a uno de los retos de criptografía de backdoorctf17.

Este reto tiene el título "complex-rsa" y mi valoración sobre su dificultad es:☆.

Su enunciado dice lo siguiente:

noob heard that single RSA encryption can be cracked sometimes due to bad implementation, so he encrypted the message twice. See if you can break it.

Y como recursos asociados al reto nos dan los siguientes:

- pubkey1.
- pubkey2.
- flag.enc.

Solución: creo un script en python para obtener el módulo y el exponente (n y e, respectivamente) de ambas claves públicas.

from Crypto.PublicKey import RSA

# Obtener parametros de ambas claves publicas

print ''
print 'pubkey1:'

pubkey1 = open('pubkey1', 'r')
param_pubkey1 = RSA.importKey(pubkey1.read())
n1 = param_pubkey1.n
e1 = param_pubkey1.e
print '   n1  ...:', n1
print '   e1  ...:', e1
pubkey1.close()

print ''
print 'pubkey2:'

pubkey2 = open('pubkey2', 'r')
param_pubkey2 = RSA.impo…