Crear usuario y enviar la contraseña de forma segura

0

Suponiendo que actualmente utilizo una forma segura de eliminar el método de autenticación de respuesta de desafío, las contraseñas se almacenan seguras y todo.

Ahora me pregunto: ¿cómo establecen la contraseña los usuarios? Es decir, ingresan la contraseña como texto simple en el cuadro de texto y, ¿qué sucede después? ¿Debería su cliente copiar la contraseña y enviarla al servidor para que sea procesada? ¿No es eso propenso a MITM + rainbow-table? Estaba pensando en consultar el servidor por el salt, y luego el cliente hace un hash y la contraseña, y eso es lo que se almacenará en la base de datos junto con el salt.

¿Qué piensas?

También, ¿Es mejor \ mejor almacenar la primera parte del hash que es la combinación del nombre de usuario y la contraseña con Salt? lo que significa que cuando cambien el nombre de usuario también deberán restablecer sus contraseñas.

¡Gracias!

    
pregunta TheUserCreator 08.12.2014 - 08:39
fuente

3 respuestas

0

Deberías NUNCA enviar las contraseñas en forma clara. Siempre que sus comunicaciones estén cifradas (TLS), su servidor puede hash y saltear las contraseñas cuando las reciba.

    
respondido por el cremefraiche 08.12.2014 - 09:59
fuente
0

Para aplicaciones web es mejor que vayas con

  1. utilizando TLS como obligatorio. Esto incluye mecanismos como HSTS, para evitar que los MITM se redirijan a la "contraparte" falsa de http.
  2. enviar la contraseña en el borrado para el inicio de sesión y la configuración
  3. eliminación y hashing de contraseñas en el servidor. Haga algo a lo largo de SECUREHASH(pw, salt, it) , donde SECUREHASH es un hash seguro, y salt es un valor aleatorio con aproximadamente 16 bytes.

Challenge-Response para aplicaciones web es innecesario, ya que sus visitantes descargan la aplicación en cada visita (a través de solicitudes GET en su sitio para los archivos html y js), y por lo tanto si el canal de comunicaciones comprometida, toda la aplicación es también. Un atacante (activo) podría simplemente tomar la contraseña antes de que se elimine del lado del cliente , cambiando los js en consecuencia.

    
respondido por el user10008 09.12.2014 - 00:50
fuente
-1

Suena un poco como si estuvieras tratando de reinventar la rueda :) No estás diciendo si se trata de una aplicación web o de escritorio. En cualquier caso, hay formas de hecho de hacer esto.

Para el transporte de credenciales, use TLS. Como su nombre indica, Seguridad de la capa de transporte. Utilícelo para transferir las credenciales de un usuario final al servidor. Dependiendo de sus necesidades, puede salirse con certificados autofirmados, pero si le preocupa MITM, obtenga los certificados adecuados. Haga esto y no necesita implementar ningún esquema de cifrado adicional del lado del cliente.

Para generar un hash de contraseña seguro, puede usar una función de estiramiento de teclas como PBKDF2 para agregar miles de iteraciones y hacer que el atacante consuma una contraseña que consume mucho tiempo.

En caso de que su base de datos esté comprometida y el atacante descargue todas las contraseñas, puede luchar contra las tablas arcoiris mediante el uso de sus contraseñas. La sal no tiene que ser secreta, pero debe ser única para cada cuenta para minimizar la efectividad de las tablas arco iris.

    
respondido por el Jari Huttunen 08.12.2014 - 08:57
fuente

Lea otras preguntas en las etiquetas