martes, 2 de julio de 2013

Implementacion de Autentifiacion RSA

RSA es un sistema de criptografia de clave publica o de cifrado asimetrico, es el primer algoritmo de este tipo y ademas el mas utilizado, este sistema criptografico es usado para cifrar y para autentificar (firma digital) sesiones por ejemplo.

La seguridad de este algoritmo radica en la dificultad de la factorizacion de números enteros. Los mensajes enviados se representan mediante números y el funcionamiento se basa en el producto, conocido, de dos números primos grandes elegidos al azar y mantenidos en secreto. Actualmente estos primos son del orden de 10²⁰⁰, y se prevé que su tamaño crezca con el aumento de la capacidad de calculo de los ordenadores.

Cada usuario posee dos claves de cifrado: una publica y otra privada. Cuando se quiere enviar mensaje, el emisor busca la clave publica del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.

Aquí realice un código que me genera las claves publicas y privadas (ademas de cifrar con ellas algún mensaje) y un segundo código donde implentara el RSA a través de red, utilizando sockets, la implementación en red no es mas que para realizar la prueba especifica de pasar un mensaje x y este sea modificado por el cliente y el servidor lo descifre y compruebe que el resultado es exactamente el mismo, ademas de que el servidor comprueba que el usuario sea quien tiene la llave privada correcta, esto enviando un numero entero aleatorio en texto plano al cliente, el cliente cifra con su llave privada y regresa al servidor, el servidor descifrara usando la publica si el resultado es el mismo que envió el servidor indicaría que el cliente tiene la llave privada correcta.

Implantación RSA


Posteriormente en el código mostrado bajo este párrafo se muestran dos métodos, se pueden importar en un interprete de python y ejecutarlo directamente o realizar un script parecidos a estos cliente - servidor.

Pruebas con cliente - servidor

Corrida en Terminales

Aquí muestro la corrida en dos terminales donde especifico la IP y puerto donde corre el servidor, mientras que en el lado del cliente especifico IP y puerto a donde conectara, cuando inicie el cliente el servidor deberá estar andando de lo contrario arrojara un error.

Una vez se realice la conexión verificara que el cliente sea el mismo que tengo con la llave publica, si es asi esperara el mensaje a encriptar y enviar al servidor.

Al final muestra el texto cifrado y el mensaje original en ambos script (cliente y servidor).


Códigos adicionales utilizados:

Bibliografia:


Futurmas Mejoras

  • Realizar métodos de propósito genera para el cliente y servidor, esta vez solo se implementaron para la prueba de la autentifican por medio de RSA.
  • Mejorar la búsqueda y comprobación de números primos, para poder generar claves de encriptado mas grandes, ya que entre mas grandes serán mas seguras.
  • Dividir el texto cifrado para poder enviar mensajes de mayor tamaño.
  • Error la autentificacion no es completa, ya que solo se realiza de parte del cliente y debe ser de ambos lados, completar la rutina.

1 comentario:

  1. Pues, cada participante debería tener sus propio par de llaves ((e, n), (d, n)) y luego deberían conocer las llaves públicas uno del otro. Ahora usas el mismo par de llaves para los dos. 6 pts.

    ResponderEliminar