cómo lidiar con las contraseñas

0

Al implementar un mecanismo de verificación de inicio de sesión / contraseña, se debe verificar si una contraseña dada ya está en uso (soy consciente de que saber que una contraseña dada ya está en uso representa un riesgo de intentos de fuerza bruta) o quizás deberíamos ¿advierte al administrador que una contraseña débil en particular se usa para salir de los usuarios a menudo?

    
pregunta adam86 26.04.2017 - 20:57
fuente

1 respuesta

1
  

Al implementar un mecanismo de verificación de inicio de sesión / contraseña, se debe verificar si una contraseña dada ya está en uso

No. En realidad, debe seguir una regla ligeramente diferente: al implementar un mecanismo de verificación de inicio de sesión / contraseña, uno no debe poder recuperar contraseñas, solo verificarlas.

Para lograr esto, esto es lo que debe hacer:

  1. Elija una función de hashing de contraseña lenta. Argon2 sería ideal. Si no puede usar esto (o desea hacer una elección más conservadora), elija una de bcrypt o PBKDF2 .
  2. Genere una sal aleatoria y única por usuario (debe ser única por usuario , esto es importante).
  3. Aplique la función hash que ha elegido a la contraseña + salt, como se describe en su documentación. Por lo general, esto simplemente será H (salt || contraseña) o H (contraseña || salt), pero siga la documentación de la función que elija.
  4. Almacene el resultado y la sal en su base de datos, junto con el identificador de usuario.

La pimienta se acaba de mencionar en los comentarios. También puede generar una carga global de basura aleatoria para su sitio y hacer un hash de sus contraseñas así: H (pepper || salt || contraseña). Guarde tanto la pimienta como la sal. Pepper te ofrece más resistencia contra cualquier tipo de ataque a la mesa del arco iris y más resistencia contra cualquier tipo de ataque por fuerza bruta. Consulte Hash de contraseña, agregue sal + pimienta o ¿es suficiente la sal?

Para verificar cualquier contraseña, simplemente repita este proceso con la contraseña enviada. Al final, el resultado debe ser el mismo, si no lo es, falla el inicio de sesión.

Lo que esto te compra:

  1. Si su base de datos es robada, las tablas de arco iris no funcionarán (gracias a la sal).
  2. Si su base de datos es robada, la fuerza bruta tomará mucho tiempo (gracias a la función hash lenta).
  3. Si su base de datos es robada, no hay una forma más sencilla que la fuerza bruta, gracias al hecho de que está utilizando una función hash y no un cifrado de clave secreta. Usted debería asumir que si su base de datos puede ser robada, también puede su clave secreta para descifrar sus contraseñas.

Para mejorar la calidad de la contraseña, puede rechazar ciertas contraseñas. Por ejemplo:

  1. Establezca una longitud mínima de contraseña de una cantidad decente. Algunos dirán 8 caracteres; Personalmente, me equivocaría en el lado de la precaución y diría 12 caracteres.
  2. No no establece un límite superior, o establece uno razonable, como 63 caracteres. Los usuarios que utilizan contraseñas de 32 caracteres de ascii imprimibles generados aleatoriamente se están ayudando a sí mismos de forma masiva y no debe detenerlos arbitrariamente ni obstaculizar el uso del administrador de contraseñas.
  3. Requieren algunas combinaciones razonables de letras, números y puntuación. Al establecer cualquier requisito de complejidad, lea primero esta respuesta .
  4. No establezca una caducidad de contraseña regular. Esto fomentará todo tipo de mal comportamiento en los usuarios, con muy poco beneficio.
  5. Fomente mejores contraseñas con un medidor de "calidad de contraseña".

Para mejorar la seguridad general de su sistema, considere implementar la autenticación de dos factores para las cuentas. Los Yubikeys (U2F) son baratos y directos para los usuarios de Google Chrome (y quizás pronto Firefox); TOTP también es bueno. La autenticación de SMS se considera dudosa debido a la vulnerabilidad de las redes móviles para manipular e interceptar la entrega de SMS.

    
respondido por el diagprov 26.04.2017 - 21:38
fuente

Lea otras preguntas en las etiquetas