Cybercamp 2016 – Crypto 5

Ya casi terminando con las pruebas de cripto aquí viene una más.

Nos dan el siguiente enunciado:

CRYPTO 5

En esta ocasión nuestros agentes han podido interceptar una comunicación entre dos espías extranjeros. Creemos que se trata de algún tipo de protocolo de establecimiento de clave, y los valores que se enviaban entre A y B son:

A -> B: 10306738

B -> A: 1206314

Otros valores recuperados son g = 13 y p = 10784399

Quizá sepas de qué protocolo puede tratarse. ¿Podríamos ayudarnos a recuperar el secreto que ambos espías comparten?

Esta vez no nos han dado ningún archivo así que estamos ante un ejercicio de criptografía de los de lápiz y papel (y si tienes un cerebro capaz de hacer cálculos complejos).

Sabido esto y después de investigar un poco basándonos en los nombres de las variables y con la pista del enunciado de que puede ser un protocolo de establecimiento de claves podemos decir que es un Diffie Hellman.

Después de leer el siguiente artículo en la wikipedia ,https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange, vemos que necesitamos encontrar o bien la variable a, o bien la variable b, para poder encontrar lo que nos piden.

Para obtener la solución directamente utilizamos el siguiente script que primero calcula el algoritmo indiscreto pasándole los valores de g, p y A con lo cual obtendremos a y luego utilizaremos la función pow con lo valores de B, a y p para obtener la flag:

def bruteLog(g, p, A):
    s = 1
    for i in xrange(A):
        s = (s * g) % A
        if s == p:
            return i + 1
    return -1

a=bruteLog(13, 10306738, 10784399)
print pow(1206314,a,10784399)

El resultado de este script será la siguiente flag:

6294097

Este será el penúltimo writeup de la parte de crypto ya que hubo dos que no conseguí resolver, en caso de que lo consiga publicaré los writeups correspondientes.

Espero os gustara, gracias por vuestra visita!

Esta entrada fue publicada en cripto, ctf, cybercamp. Guarda el enlace permanente.

Deja un comentario