10
Mar
2012

Diseño de un mecanismo de autenticación – Parte I

En esta serie de artículos quiero presentar un mecanismo de autenticación web sencillo, de la familia challenge-response, que diseñe para el sitio Live! -la idea no es original obviamente-.

Lo más típico en la autenticación web es que el sitio pregunte al usuario por la contraseña. El usuario la ingresa y en el servidor se calcula su digest. Este digest se compara contra el digest guardado en la base de datos y si son iguales, la autenticación es válida.

Este mecanismo es sencillo y no almacena la contraseña en el servidor. Pero puede ser peligroso: la contraseña viaja desde el cliente al servidor en texto plano. Cualquiera que pueda interceptar uno de estos paquetes (a nivel de Internet o de la red interna), podría visualizarla. ¿Puede ser útil este tipo de autenticación? Sí, si se utiliza el protocolo HTTPs (SSL) en la comunicación cliente-servidor.

Supongamos que, habiendo evaluado el impacto y riesgo, llegamos a la conclusión de que HTTPs no es una opción. Lo que debemos hacer es implementar un mecanismo de autenticación que reduzca a un atacante sus posibilidades de éxito. Por ejemplo, que aún sniffeando y registrando todos los paquetes de una conexión, no pueda autenticarse.

autenticacion web segura


Leer el resto del artículo »

11
Feb
2011

Secure Login en PHP: One time token + SHA1

Estuve haciendo una pequeña demo para demostrar dos conceptos de un formulario de autenticación en php: One time token y SHA1.

¿Cuál es el problema que motiva esta idea?

Si el formulario php envía las credenciales de autenticación del usuario en texto claro al servidor, por más que se guarden hasheadas en la base de datos, cualquier intruso podría caputarlas mientras están en viaje y utilizarlas luego. La primer idea a tener presente es: las credenciales nunca debarían viajar en texto claro.

Ahora, ¿qué sucede si le aplicamos un hash del lado del cliente y las enviamos hasheadas? Estamos en la misma situación. Alguien puede capturarlas y, por más que no entienda realmente la contraseña, al servidor le alcanza ese hash extraño -que es siempre el mismo- para dar la autenticación como válida.

One time token es un token aleatorio que genera el servidor php, lo guarda en una variable de sesión y lo envía junto con el fomulario de login. Al recibir el formulario de login enviado por el usuario, elimina el token de la sesión. El token se utiliza una sola vez.

SHA1 es un algoritmo de hashing que se aplica del lado del cliente (javascript) al password ingresado por el usuario + el one time token.


Leer el resto del artículo »