Social Geek

Social Geek

25 mayo, 2013

Algoritmo de seguridad Diffie-Hellman

Captura de pantalla 2013-05-25 a la(s) 13.56.54En cuestiones de seguridad informática, el algoritmo Diffie-Hellman fue uno de los métodos pioneros de intercambio de claves en un esquema de alta seguridad.  El presente  artículo trata de la implementación de un ejemplo sencillo de este algoritmo sobre la programación con Socket, por lo que se debe de hacer lo siguiente:

1. Definir dos números primos muy grandes los cuales tendrán las funciones de generador (g) y primo de referencia (p). Por lo general, siempre se designa, en el esquema de intercambio a un equipo/entidad, con funciones de servidor, que defina estos números y los de a conocer a sus pares del mismo esquema.

Esta primera notificación indica el inicio del ciclo de seguridad de intercambio de claves.

2. Cada equipo/entidad debe de definir una clave privada, la cual puede de ser un número no primo; sin embargo, debe de ser un número muy alejado del cero en la recta numérica, es decir, un número muy grande.

3. Cada equipo/entidad debe de generar una clave pública, a partir del número generador (g), del número primo de referencia (p) y de la clave privada, según la fórmula siguiente:

Formulas

4. Cada equipo/entidad debe de intercambiar la clave pública generada en el inciso anterior. Al momento de la recepción de la clave pública de los pares, se debe de generar una clave de verificación, como lo muestra el siguiente procedimiento:

FormulaVerificacion

5. Las claves de verificación deben de ser iguales entre sí, tal a como se muestra en la ilustración siguiente:

Diffie-Hellman

Bien, ahora que ya conocemos el funcionamiento del algoritmo Diffie-Hellman, veamos cómo implementarlo en una aplicación que pueda centrar utilidad en un entorno operativo aplicando Sockets, pero antes, veamos algo respecto a este tema.

Programación con socket:

No existe una definición estándar para este término que englobe todos los contextos, pero, en programación, la definición más común para socket es la siguiente: Un socket es una interface de programación de aplicaciones en un entorno de red.

Existen dos tipos programación de sockets: sincrónica y asincrónica. La programación sincrónica se enfoca en tiempo, y la asincrónica en la demanda del servicio.

Este tipo de programación se utiliza cuando se desea que dos aplicaciones (programas) se comuniquen entre sí, ya sea de manera definida cada cierto tiempo (sincrónica) o cuando un equipo/entidad lo demande (asincrónica). Estas aplicaciones, normalmente, se ubican en equipos diferentes con acceso mutuo de red, sin embargo, también pueden configurarse en el mismo equipo si el requerimiento así lo permite. La programación de socket asincrónica es más común y menos costosa en recursos de servidor, ya que no requiere de una conexión permanente asignada, sino que opera bajo un esquema en el cual se abre una conexión por demanda, y se cierra al finalizar el intercambio. La programación de socket sincrónica sí requiere este alto costo, una conexión asignada por el servidor de manera permanente.

En este tipo de aplicaciones, se aplica un esquema variante de cliente/servidor, dado que en algún tiempo/demanda, una entidad presta los servicios y notifica a las demás (entidades clientes); pero esta condición puede variar cuando le toque ser notificada por otra entidad.

En el momento de la notificación, una aplicación cliente requiere saber que ha recibido un paquete del servidor, por lo que tiene dos opciones: programa un evento que verifique el contenido en el socket cada cierto tiempo, o espera una notificación o trigger del sistema por cada paquete entrante en el socket. En el caso de Windows, que es un sistema operativo que maneja los eventos, esto le da al sistema de notificación la ventaja, por tanto, lo único que se requiere es tener la herramienta necesaria para capturar ese evento, interpretarlo y obtener el mensaje. Para este último paso el espacio de nombresSystem.Net.Sockets, proporcionado por el .NET Framework de Microsoft parece tener lo que necesitamos, véamos cómo…

Descargar Caso Práctico en PDF: Diffie_Hellman_Practico

Relacionados