Hoy detecté un poco de tráfico WLAN sin cifrar durante la clase y encontré algunas contraseñas con una simple búsqueda de "pasar" y "usuario" en wireshark. Resulta que la mitad de los sitios que utilizamos para la escuela no cifran sus datos de ninguna manera, utilizan solicitudes GET como? Username = user123 & password = passwd123 al iniciar sesión. Empecé a pensar en esto y ahora me pregunto; ¿Cuál es la mejor manera de evitar esto? El cifrado sería fácil de revertir, y las claves de una vez también podrían ser "capturadas" fácilmente. Mi mejor pensamiento hasta ahora es el hash del lado del cliente, pero ¿sería una mala idea de alguna manera?
ACTUALIZACIÓN: Obviamente no te he dicho las limitaciones aquí, pero gracias por todas las respuestas. El servidor no tiene SSL y todo lo que uso debe implementarse en el lado del servidor php / asp / asp.net o en el javascript del cliente. La única clave previamente compartida que existe es la contraseña. Todo lo demás será conocido por el atacante.
Solo intento ocultar la contraseña del hacker. El resto de la información no estaría cifrada, por lo que sería posible un robo de sesión. Ese será el próximo problema. Tal vez usted podría cifrar la información en la página con el anuncio. Dado que habrá una gran cantidad de texto cifrado, un ataque de diccionario sería efectivo. Por eso no quiero usar la contraseña del usuario para el cifrado. ¿Tal vez podría usar algo como una clave XOR de 512/1024 bits que cifro con la contraseña del usuario? O alguna parte de la contraseña, ya que un ataque de diccionario aún sería posible, pero más difícil.
¿Sería una buena idea un anuncio cifrado con los clientes que diga 2 primeros caracteres de su contraseña? Un número aleatorio XOR'd con las contraseñas 2 primeros caracteres. Esto debe ser descifrado por el usuario, ya que él / ella tiene la clave (que se tomará de la cadena de contraseña introducida a través de js). El anuncio sería un número aleatorio, por lo que nada debería poder saber si se ha descifrado correctamente.
Básicamente: 1. El usuario escribe el nombre de usuario y lo publica / recibe en el servidor. 2. El servidor responde con una página con un anuncio cifrado y un cuadro de contraseña. 3. Javascript descifra el anuncio, y la contraseña se XOR pone con él. 4. La contraseña se envía al servidor, la contraseña se descifra y luego se procesa. 5. El hash se compara con el almacenado en la base de datos.
Nota: el servidor es gratuito y es compatible con SSL, pero no quiero usarlo. No me gusta SSL porque está roto.