martes, 2 de julio de 2013

Reporte 1 - Protocolo Diffie-Hellman

El protocolo Diffie-Hellman es un metodo para intercambiar llaves criptográficas. Éste es uno de los primeros ejemplos de intercambio de llaves que se implementaron en el área de la criptografía y permite a dos participantes de alguna comunicación crear una llave simetrica para el cifrado y descifrado de mensajes, esto sin ser necesario el conocimiento de la otra persona para que de esta manera sea seguro poder mandar los mensajes a través de medios no seguros.

 La seguridad de este protocolo depende de el método que se utilice para generar las llaves,es decir, que para los participantes de la comunicación debe ser facil y sencillo generar las llaves a partir de valores que se intercambian entre ellos. Por el contrario, si alguien logra interceptar los valores con los que se generaron la llaves, debe ser una manera difícil (o al menos muy tardada) encontrar de dónde vinieron esos valores para poder así obtener el valor de la llave.

 Para este reporte, la implementación que se realizó utiliza un cierto número primo p y un generador g de Zp, que son generados públicamente. De manera privada, uno de los participantes de la comunicación(Alice) genera un valor f(x) representado de la siguiente manera: f(x) = gx mod p ,así mismo, el otro participante(Bob) genera un valor f(y) de la siguiente manera: f(y) = gy mod p, dónde x y y son número al azar.

 Estos valores f(x) y f(y) son enviados a la parte contraria,es decir, Alice manda su valor a Bob y viceversa para poder generar su llave (que como ya se mencionó,es simétrica). Para la generación de esta llave (k) Alice debe realizar la siguiente operación: k = f(y)x mod p, mientras que Bob deberá realizar: k = f(x)y mod p.

 Por último, en el caso de que hubiera un tercero escuchando esa comunicación los único valores que podría obtener serían los valores de p,g,f(x) y f(y), de tal manera que la dificultad con la que este tercero pueda lograr "hackear" este protocolo depende directamente de la función que se utilizó para generar los valores de f(x) y f(y), que en nuestro caso es el módulo p de una potencia.

 A continuación se presenta la manera en la que se utiliza el programa realizado para este reporte:



Donde primo es un número primo y generador es un número que sea generador para Zprimo

Lo siguiente que se muestra es un ejemplo de el protocolo junto con un intento de "hackeo", demostrando que con números pequeños es muy sencillo realizarlo:



Se trató de realizar un ejemplo utilizando el número primo 982,451,653 y eligiendo uno de sus generadores; comprobandose que generar las llaves teniendo las funciones no tomó mucho tiempo pero,al tratar de "hackearlo", el programa empezó a demorar mucho por lo cual se interrumpió la ejecución del mismo.

La parte interesante del programa es la rutina encargada de "hackear" el protocolo, que se puede observar a continuación:



Es algo muy sencillo, lo único que se realiza es repetir la función que realizan Alice y Bob variando el valor del exponente hasta que se obtengan los mismos valores de f(x) y f(y) que,obviamente, será más tardado entre más grande sea el valor del número primo.

El código completo se puede ver en la siguiente liga.

Debido a que no se realizaron una buena cantidad de pruebas, lo único que se puede concluir es que entre mayor sea valor del número primo mayor debería ser el tiempo que se tardaría en poder "hackear" el protocolo aunque no solo depende de este valor. Otro factor importante es el exponente que se utiliza para obtener f(x) y f(y) ya que si estos valores son aleatorios hay que tener cuidado ya que en el peor de los casos ambos podrían ser 1 , lo cuál sería algo muy grave ya que sería muy fácil de "hackear".
Algo se puede observar es que al ser g un generador, si el exponente que se utiliza es mayor al número primo, es posible encontrar el mismo resultado del modulo con un número dentro del rango de 1 al valor de número primo.

Trabajo pendiente:

  • Para poder automatizar las pruebas todo debería poder ser aleatorio (el valor del número primo,el generador, y los exponentes x y y)
  • Al aleatorizar estos valores se debe tener en cuenta diversas validaciones, por ejemplo, que el número primo sea de alguna longituda considerablemente grande, que los exponentes de igual manera sean diferentes y con una distancia considerable entre uno y otro.

Referencias.

La rutina para realizar el módulo de la potencia fue realizada en clase.