Una comprobación preliminar de Gmail indica que el análisis de seguridad de la contraseña se realiza en el lado del cliente mediante JavaScript. Leí su .js por un rato, decidí que era imposible de introducir a las 9:30 de la mañana sin café, y observé el cable con tcpdump mientras escribía una nueva contraseña. Cada pulsación de tecla no activaba el tráfico entre el navegador y Google, pero siempre que cambiaba la evaluación de la contraseña (por ejemplo, de "demasiado corta" a "débil"), el tráfico se correlacionaba con la pequeña burbuja de texto de ayuda.
Puedes presionar F12 en Chrome mientras estás en la página de cambio de contraseña y navegar todo su JavaScript. Toma café primero.
Dicho esto, en la World Wide Web las contraseñas se casi siempre se envían al servidor en texto sin formato, pero idealmente a través de HTTPS para que el reiniciador SSL proporcione seguridad. Están en texto sin formato en la forma GET o POST, o están codificados (no cifrados ) en el encabezado de Autenticación básica HTTP. ¿Por qué? Gestión de claves.
El cliente no tiene forma de cifrar la contraseña que comparte el servidor. Configurar uno requeriría distribuir claves secretas a clientes N + 1 y mantener el secreto ... o configurar un sistema de claves públicas. Y una vez que haya configurado un sistema de clave pública, solo debe patearse y decir "¿Por qué no confié en SSL para empezar?"
Ahora, aquí hay algunos valores atípicos a considerar:
Es posible que un servidor y un cliente realicen autenticación de resumen . En resumen, el servidor envía una cadena aleatoria, el cliente borra la contraseña, la combina con esa cadena aleatoria y la devuelve. El servidor debe tener una copia de texto simple de la contraseña correcta en su lado; Realiza el mismo proceso hash + mash y compara. Esto es más difícil para un atacante para agarrar la contraseña en el cable, pero generalmente requiere que el servidor conozca la contraseña de texto sin formato (a diferencia de una versión con hash).
BMC Remedy una vez implementó lo siguiente: La página de inicio de sesión contenía JavaScript que estafa la contraseña - IIRC almacenaba una estática cadena y realizaría un cifrado de sustitución en la contraseña utilizando esa cadena. Enviaría la cadena modificada al servidor, que simplemente podría revertir la sustitución. Único problema? Cualquiera podría revertir la sustitución, ya que seguía un algoritmo estático que se publicó en JavaScript en la página de inicio de sesión. Así que Remedy-over-HTTP no proporcionó una protección real para las contraseñas ... que se remonta a tema original, de "generalmente solo confiamos en SSL para proteger las contraseñas en tránsito"
Por último, tengo conocimiento de una aplicación, Litle PayPage , que distribuye JavaScript con una incrustada Llave pública. PayPage no acepta contraseñas sino datos de tarjetas de crédito, y JavaScript cifra el número de la tarjeta con esa clave incorporada antes envolviendo toda la solicitud en SSL y enviándola a través de HTTPS. Lo mismo se podría hacer con cualquier aplicación, esencialmente resolviendo el problema inicial que mencioné al compartir claves con el cliente, o reproduciendo el sistema SSL, elija su opción. La ventaja de este enfoque es que evita el problema tradicional de "¿Qué pasa si hay puertas de enlace HTTP que realizan un MITM en SSL?"