Feed de Edgaragg

Facebook Share

Share on facebook

Designed by:
SiteGround web hosting Joomla Templates
Autenticación segura usando Ajax
Autenticación segura usando Ajax - Algoritmo propuesto PDF Imprimir E-mail
Escrito por edgaragg   
Martes, 14 de Abril de 2009 10:26
Indice del artículo
Autenticación segura usando Ajax
¿Qué es la autenticación por desafío/respuesta?
Algoritmo propuesto
Registro de usuario seguro
¿Cómo encriptar en el cliente?
Todas las páginas

Algoritmo propuesto.

En primer lugar debo indicar que actualmente no acostumbro a almacenar la contraseña de ningún usuario como texto plano.  En su lugar la contraseña del usuario es almacenada usando un algoritmo de hash en combinación con un valor aleatorio generado al momento del registro del usuario conocido como salt. Esto provee una seguridad extra puesto que hace practicamente imposible obtener la contraseña de los usuarios si por alguna razón un atacante obtiene acceso al servidor (y especificamente a la tabla de usuarios en la base de datos)

De esta manera el pseudo-algoritmo indicado en el apartado anterior se ve modificado para aceptar el uso del valor salt.

El algoritmo de autenticación sería el siguiente:

  1. Una vez que el usuario llena el formulario de autenticación y presiona el botón para hacer login, se hace una llamada usando ajax enviando unicamente el nombre del usuario.
  2. El servidor valida la existencia del usuario, en caso de que el usuario exista se crea un valor aleatorio (el desafío) y se envía al cliente conjuntamente con el valor salt del usuario, el cual será usado para obtener el valor de la contraseña encriptada en el servidor.  El valor del desafío se almacena en sesión.
  3. El cliente obtiene el valor de la contraseña encriptada, primero concatenando el valor del salt y posteriormente aplicandole la función de hash.  En otras palabras:

    Contraseña encriptada = h(contraseña + salt)
  4. Se concatena el valor del desafío con la contraseña encriptada, obteniendose así el valor de la respuesta al desafío.  En otras palabras:

    Respuesta desafío = h(contraseña encriptada + desafío)

  5. La respuesta es enviada al servidor en conjunto con el nombre de usuario usando otra llamada ajax.
  6. El servidor calcula la respuesta al desafío de forma similar al paso 4, con la diferencia de que la contraseña encriptada es la almacenada en la base de datos para ese usuario.
  7. El servidor compara el valor de la respuesta calculado con el enviado por el cliente.  Si coinciden entonces el cliente conoce la contraseña del usuario y por lo tanto el mismo esta autenticado.  En caso contrario la autenticación falla.
En el paso 5 no es 100% necesario efectuar otra llamada ajax, podría hacerse un Post de un formulario, pero en este caso hay que asegurarse (usando JScript) que se envíe la respuesta del desafio y se evite enviar la contraseña en claro.  Lo que si es importante es hacer la llamada Ajax en el paso 1 con la intención de obtener el valor del salt y el desafío.


Actualizado ( Martes, 14 de Abril de 2009 15:07 )