He querido crear un sistema de autentificación seguro para aquellas páginas que por alguna razón lo les permite usar un protocolo seguro «https».
La idea me surgió, de haber estado trasteando con algunas pasarelas de pago.
Requisitos iniciales y tecnologías usadas:
- Tecnología javascript
- Clave (String a ser posible complejo para poder codificar)
Dado que el problema de la seguridad radica en que enviamos usuario y contraseña unidos al hacer la petición de login, aunque la contraseña vaya codificada en md5, siempre es la misma.
El truco radica en generar una contraseña que siempre varíe, lo haremos concatenando y generando un md5 de la siguiente manera:
1ª versión.
contraseña=md5(usuario+contraseña+fecha)
Bien este sistema al menos la contraseña siempre varía, siempre y cuando varíe la fecha, para evitar esto se usará una firma de vuelta que verifica la fecha y en servidor se comprueba que la hora no excede de n minutos, normalmente no se almacena la contraseña directamente en base de datos, normalmente podemos usar md5(contraseña)
2ª versión.
Del servidor vendrán los siguentes datos:
fecha_hora
firma=md5(fecha_hora+clave)
En el cliente se usara los datos del sevidor
fecha_hora=fecha_hora
firma=firma
contraseña=md5(contraseña)
contraseña=md5(usuario+contraseña+firma)
El el proceso de logueo se debera comporbar:
if fecha-hora_actual – fecha_hora< 2 minutos
if firma==md5(fecha+hora+clave)
if contraseña=md5(usuario+contraseña+firma)
logueo correcto
else
logueo no correcto
Aunque sea pseudo código, creo que se entiende bién.