A raíz de este_hilo_en_HackXCrack decidí programar un sistema de login que permitiese cierta seguridad ante atacantes pasivos aún funcionando sobre HTTP en plano, todo de forma transparente al usuario.

La idea es simple, cuando el usuario se intenta loguear, se le asigna un token que se utilizará como salt de una función_hash que se aplicará a la contraseña (yo he utilizado MD5 porque tenía el código_en_python a mano), el resultado de la función será el que se envíe. El utilizar un token es importante porque evita ataques_de_replay, es decir, que el atacante pase a través de la función hash, enviando el resultado directamente, no tendría que conocer la contraseña original si el resultado es siempre el mismo. Además es importante que el token lo establezca el servidor y nuncaquién se loguee, ya que lo podría modificar para que fuera el mismo que el del usuario original, con lo que se vuelve al ataque de replay.

Pero tiene bastantes problemas:

* Si el atacante es activo (puede interceptar la conexión y modificar
datos al vuelo), puede cambiar el código fuente de la página,
invalidando esto.

* Las contraseñas han de guardarse en texto plano, para poder realizar el
hash a posteriori.
*
* Como consecuencia de lo anterior se produce un aumento muy considerable
de la carga del servidor, ya que en vez de hacer el hash una sola vez (ya
que se supone que las contraseñas se guardan ya hasheadas), en el peor
caso, ha de comprobarse el hash de todas las contraseñas cada intento de
login.
*

La prueba (todo muy mínimo) está alojada en md5poc.webcindario.com, el código fuente se puede descargar aquí [md5poc.zip]

Btw... 1 año!!