Autorización con MD5 imlemented en Javascript

1

Quiero usar la función MD5 (biblioteca de JavaScript) para la contraseña hash antes de enviarla al servidor durante el inicio de sesión en el sitio web y durante el proceso de registro.

Quiero preguntar, ¿es un método seguro? No puedo usar https, y me pregunto si este método será más seguro.

Si alguien tiene algunos comentarios sobre esto, estaré agradecido por los consejos.

    
pregunta ppiatek 07.03.2014 - 10:58
fuente

3 respuestas

1

No, no lo es.

Primero, porque MD5 .

En segundo lugar, porque un intruso puede interceptar el hash igual que puede interceptar la contraseña, lo que les permite enviar el mismo hash al servidor para hacerse pasar por el usuario ("ataque de reproducción").

Lo que podría hacer en su lugar es hacer que el servidor envíe una cadena única e impredecible al cliente para cada intento de inicio de sesión. Esto se denomina " nonce " en criptografía. Luego, el cliente crea un hash de la contraseña junto con ese nonce. Cuando los nonces no se repiten y cada nonce solo se puede usar una vez, los hashes tampoco se repetirán y los ataques de repetición serán imposibles.

Pero incluso eso no ayudará cuando el atacante no solo pueda espiar, sino también manipular el tráfico. Eso les permitiría reemplazar su código javascript con el suyo propio, lo que les envía la contraseña sin cifrar. Ningún esquema basado en javascript lo protegería en ese escenario.

    
respondido por el Philipp 07.03.2014 - 11:02
fuente
1

Su esquema es trivialmente vulnerable a los ataques de repetición, por lo que ni siquiera es efectivo contra atacantes pasivos (escuchas).

Como ya lo han señalado otros, se requiere HTTPS para defenderse contra ataques activos.

En lo que respecta a los ataques pasivos, SCRAM (RFC 5802) es un buen esquema de autenticación basado en contraseñas y es < a href="https://sourcegraph.com/github.com/linuxwolf/sazzle"> aparece se puede implementar en JavaScript puro.

    
respondido por el Erwan Legrand 07.03.2014 - 12:26
fuente
0

Para el hashing de contraseña, usualmente se usa bcrypt porque el tiempo requerido para calcular el hash se puede ajustar y bcrypt agrega automáticamente un salt aleatorio. Sin embargo, primero no estoy al tanto de una implementación de JavaScript de bcrypt, segundo, incluso esos hashes pueden ser atacados por ataques de adivinación estadística (intente primero con las contraseñas más comunes).

Pensé en el cifrado asimétrico aquí primero. Para cada inicio de sesión / registro, el servidor crea un par único de clave pública / privada y envía la clave pública al cliente. El cliente encripta la contraseña con esta clave. Solo el servidor que posee la clave privada puede descifrar la contraseña. Pero aún falta la autenticación. Un atacante podría escuchar la comunicación.

Sin la autenticación, que proporciona HTTPs, no es posible asegurar el paso de registro e inicio de sesión.

    
respondido por el DanielE 07.03.2014 - 11:09
fuente

Lea otras preguntas en las etiquetas