Un sistema de inicio de sesión tradicional funciona simplemente enviando, en texto plano, los datos de usuario y password al sistema en php o el lenguaje que sea, el sistema lo recibe, lo encripta y lo compara con la información de la base de datos para saber si es correcto o no. Lo que no está mal, pero deja abierta la posibilida de que alguien este sniffeando la red y capture los datos en bruto (raw) o texto plano.
Como podemos ver en el siguiente esquema:

Una forma que se me ocurrió para que los datos del formulario, especialmente la password, no viajarán en texto plano, fue encriptarla mediante javascript al momento de hacer el submit. De esta forma, cuando el atacante logre capturar los datos lo que verá es una cadena en md5, como aparece en el siguiente gráfico:

Los pros y contras
Este método nos entregará una capa de seguridad dependiente del navegador, obviamente, para que funcione vamos a necesitar un navegador con soporte de javascript y tambien un sistema de login adaptado para recibir un string ya cifrado en md5.
Como puntos a favor, podemos decir que para el atacante (sniffer) será más complicado obtener la clave en texto plano. Si esta persona usa el mismo sistema para autentificarse usando el hash md5 snifeado, el javascript volverá a encriptarlo y cuando lo envie, no va a coincidir con el hash que está en la base de datos.
Como punto en contra, el usuario de todas formas podrá logearse cuando obtenga el hash, con algun script o un login paralelo que no haga la encriptación de la clave pero por otro lado, el atacante nunca podrá saber la password que usa la persona, sólo conocerá su hash el cual no le servirá para ingresar a otros servicios, en el caso que use la misma password para mas de un sistema.
Como punto a favor, este metodo puede dificultarle la tarea a atacantes newbies, que seguramente intentarán logearse una y otra véz con el hash que capturaron preguntandose ¿WTF, que le pasa a esta mierda que no funciona?.
Video demostrativo
httpvh://www.youtube.com/watch?v=P4lyA77DtZY
Links a Youtube: https://www.youtube.com/watch?v=P4lyA77DtZY
Descargar (ogv, 47Mb)
Por ej, usando jQuery Crypt : http://plugins.jquery.com/project/crypt
De todas formas, con jquery se puede mejorar mucho esta funcionalidad, pero esto es solo una prueba de concepto
saludos
Buena info Zerial.
Me parece mejor usar criptografia asimétrica y eso se lo dejo al ssl.
Igualmente, si lo queres usar te conviene usar un hash mas robusto como sha256
Bueno, esto que publiqué fue mas que nada por la experiencia que he tenido, me he topado en la universidad o en distintos lados que cualquier persona se baja una distribución Live y empieza a sniffear, ni si quiera saben lo que están haciendo.
Creo que no importa mucho que ellos puedan ver el codigo javascript, porque es un simple algoritmo para encriptar en md5, no tienen ninguna key, salt, ni nada.
Esto lo pense basicamente para dificultarle la tarea un poco (quizas muy poco) al atacante, cuando este sniffeando simplemente no pueda ver la password en texto plano y tenga que hacer el doble o triple de trabajo para poder desencriptar ese hash.
Como digo en el articulo, una de las cosas buenas es que el usuario quizas se va a poder logear al sistema con ese hash, pero no va a saber cual es su clave.
Pensé en hacerlo con SHA, pero esto es solo una prueba de concepto, se puede mejorar mucho.
saludos
Igualmente a partir de leer ésto me puse a pensar en una alternativa mejor, y se me terminó ocurriendo algo bastante bueno, aunque quizás no está tan relacionado con lo que vos queres hacer, depende como lo utilices, podria servir también.
Espero tu visita y comentario para ver que te parece.
Saludos