¿Por qué a menudo se subestima e insegura la seguridad de las contraseñas en el contexto del hash de contraseñas?

4

Un aspecto de la seguridad me ha molestado durante mucho tiempo: ¿Por qué hay una certeza positiva acerca de la importancia de los algoritmos de hash y las sales, pero la seguridad de la contraseña nunca se menciona o se considera un asunto "filosófico"? >

Para mí, hay tres componentes de una implementación de hash correcta:

  1. Algoritmo lento y sin colisiones.
  2. Buena sal al azar.
  3. Contraseña segura a prueba de ataques del diccionario.

Un fallo en cualquier componente hará que todo el hash sea inútil. Así que, para mí, no tiene sentido hacer una escena sobre el uso de MD5, pero luego permitirles usar 12345 como contraseña. . Para mí, la seguridad de la contraseña es inseparable y estrictamente un asunto técnico, de no menos importancia que los otros dos aspectos.

Sin embargo, cuando se trata de una simple pregunta en particular, ¡no hay ninguna respuesta en particular!
¿Quieres una sugerencia de algoritmo hash? ¡A su servicio!
¿Quieres saber cómo conseguir una buena sal? ¡Hay mil maneras!
¿Quieres saber cuál debería ser la fuerza de contraseña mínima aceptable? Err ... ya sabes, hay una compensación y algunos asuntos políticos del tipo, así que "usa lo mejor que puedas".

¿Pero existe una definición técnica y práctica para la tecnología "use lo mejor que pueda"? ¿Al igual que uno sobre algoritmos de hash?

O, en otras palabras, ¿por qué hay siempre una recomendación para el algoritmo de hash y una cierta ("usa esto"), pero nunca hay una recomendación para la fortaleza de la contraseña (" Permitir al menos esa fuerza o entender el riesgo ")? O siempre un enorme énfasis en el algoritmo que se debe usar y no preocuparse por la fortaleza de la contraseña. ¿No puede esto dejar la impresión de que el algoritmo de hash es suficiente, lo que deja al programador deficiente con una falsa sensación de seguridad?

    
pregunta Your Common Sense 15.02.2014 - 00:39
fuente

3 respuestas

2

El hashing de contraseñas obtiene mucha cobertura en las guías de seguridad y no hay una buena razón para ello. Detener la inyección de SQL y las cargas de archivos ejecutables es mucho más importante. Creo que el motivo de tanta discusión es porque utiliza tecnologías de sonido interesante (como bcrypt) y pocas bibliotecas de autenticación lo hacen correctamente de forma predeterminada.

La mejor práctica de almacenamiento de contraseñas que menciona no se acepta de manera universal, aunque los usuarios de este sitio la promueven en gran medida. En particular, el uso de un algoritmo hash lento no suele ser posible en sitios de alto tráfico, ya que la carga de procesamiento es demasiado grande. Hay un documento interesante aquí

El almacenamiento de contraseñas generalmente es invisible para los usuarios. Si usa MD5 o scrypt sin sal, el usuario no verá ninguna diferencia. La fortaleza de la contraseña es altamente visible para los usuarios, y en particular, es parte del proceso de registro que la mayoría de los sitios desean mantener lo más simple posible.

Algo que es bastante universal es que tener más seguridad te cuesta algo. Y aquí está la diferencia entre el almacenamiento de contraseñas y la fuerza. Hacer un almacenamiento más fuerte de las contraseñas cuesta a los administradores del sitio, pero siempre puede comprar más hardware, etc. La aplicación de una contraseña más fuerte les cuesta a los usuarios del sitio, y desaparecerán si no les gusta.

Todas las opciones de seguridad deben basarse en una comprensión del riesgo. No necesita el mismo nivel de seguridad para Angry Birds que para la banca en línea, o incluso para las armas nucleares. En entornos comerciales, este tipo de pensamiento basado en el riesgo generalmente no se hace para las defensas que solo le cuestan a los administradores del sitio, pero se hace en gran medida para cualquier cosa que afecte la experiencia del usuario.

Para la seguridad de la contraseña, mi consejo es:

  • Baja sensibilidad: al menos 6 caracteres
  • Sensibilidad media: ya sea: al menos 8 caracteres y una combinación de letras, números y puntuación) O al menos 16 caracteres (a opción del usuario)
  • Alta sensibilidad: use autenticación de múltiples factores

Sin embargo, no solo depende de la sensibilidad del sitio. Hay una diferencia entre los ataques en línea y fuera de línea. No es necesario que la contraseña de un sitio web sea tan sólida, ya que un atacante solo puede intentar adivinarla en línea y puede usar una política de bloqueo para frenar estos ataques. Sin embargo, una contraseña de Truecrypt se puede atacar sin conexión (si el atacante tiene la unidad), por lo que deben ser mucho más fuertes.

Las políticas de bloqueo de contraseña son otra parte importante de la autenticación con contraseña, pero no tienen la misma cobertura que el almacenamiento de contraseña.

Cuanto más te fijas en las contraseñas en detalle, te das cuenta de que son un mecanismo de autenticación bastante defectuoso. Todos estos consejos de mejores prácticas para hacer que las contraseñas sean lo más seguras posible es como intentar volver a adjuntar el ala de un avión con cinta adhesiva.

    
respondido por el paj28 15.02.2014 - 08:23
fuente
0

En pocas palabras, tienes un control completo sobre cómo hash las contraseñas. Pero más allá de un punto muy limitado, no tiene control sobre qué tan seguras serán las contraseñas de sus usuarios.

Las mejores prácticas existen en el hashing de contraseñas para que pueda minimizar el efecto de las contraseñas débiles. Las sales deben ser únicas para que el esfuerzo exitoso descifrando una contraseña no contribuya al esfuerzo para descifrar otras. Se deben utilizar hashes lentos como bcrypt o scrypt para ralentizar a un atacante iterando a través de conjeturas de contraseña. Estos algoritmos aumentan la dificultad de descifrar contraseñas por el equivalente en al menos unos pocos bits de entropía.

Por otro lado, lo mejor que puedes hacer prácticamente con las contraseñas es limitar su longitud mínima. Si se requieren símbolos, es probable que se obtenga una entropía adicional mínima, ya que un número abrumador de usuarios simplemente agregará un signo de admiración al final de su contraseña. Al final del día, lo que hace una buena contraseña es entropy , y los usuarios son notoriamente malos en crear contraseñas con casi todas las cantidades mínimas. Peor aún, no puede probar la entropía en realidad, es una medida de los medios por los cuales la contraseña se generó y no se puede medir directamente en la propia contraseña. Como resultado, los "comprobadores de seguridad de contraseñas" son bastante malos y, por lo general, solo frustran a los usuarios que terminan intentando jugar con el sistema para usar su contraseña preferida.

Así que hacemos lo mejor que podemos en las partes del proceso que podemos controlar e intentamos limitar las desventajas de las partes que no podemos.

    
respondido por el Stephen Touset 15.02.2014 - 01:09
fuente
0
  

Ya me molesta mucho tiempo, ¿por qué hay una certeza positiva sobre el algoritmo de hashing y la importancia de la sal, pero la seguridad de la contraseña no se menciona en absoluto o se considera un asunto "filosófico"?

     

O, en otras palabras, ¿por qué siempre hay una recomendación para el algoritmo de hash y una determinada ("use esto"), pero nunca hay una recomendación para la fortaleza de la contraseña ("permita al menos esa fortaleza o comprensión? el riesgo ")?

  • Es posible definir y medir de manera significativa las fallas en los algoritmos de hashing (incluidas las sales) independientemente de todos los demás factores
  • Las técnicas de hash se pueden publicar y revisar por pares
  • Las elecciones de algoritmos las hacemos nosotros, como profesionales que construyen sistemas.
  • La empresa / propietario / establecedor de requisitos / firmante de cheques:
    • no le interesan los algoritmos en absoluto
    • solo se preocupa de que el algoritmo no sea tan lento como para incitar las quejas de los usuarios
    • solo le importa que las reglas de contraseña no inciten a las quejas de los usuarios
    • (en raras ocasiones) solo le importa que el algoritmo cumpla con los requisitos legales, reglamentarios, de certificación, estándares o similares
  • La primera desviación estándar o el valor de dos de los usuarios:
    • solo le importa que el algoritmo no sea tan lento como para molestarlos
    • solo se preocupa de que las reglas de contraseña no sean tan complejas como para molestarlas
      • tener que recordar nada les molesta
      • al no escribir su contraseña correcta les molesta
      • no poder iniciar sesión la primera vez que les molesta
      • tener que escribir demasiados caracteres les molesta
      • no poder usar su contraseña favorita les molesta
      • tener reglas que no están acostumbradas a molestarlas
  • A diferencia de los algoritmos, las contraseñas publicadas se vuelven débiles al instante, por lo que no pueden ser revisadas por pares
  • Si bien una contraseña de texto simple en sí misma (es decir, saber solo la cadena que ingresó el usuario) siempre puede considerarse "débil", nunca se puede considerar "fuerte".
    • Consulte ¿Debo rechazar contraseñas obviamente malas?
    • "contraseña" es obviamente débil.
    • "5f4dcc3b5aa765d61d8327deb882cf99" * es casi exactamente igual de débil, pero parece fuerte (mayúscula, minúscula [a-f] y números).
      • tenga en cuenta que es lo suficientemente largo como para que la longitud superara el conjunto de caracteres limitado si fuera realmente una cadena criptográfica aleatoria.
    • "NWY0ZGNjM2I1YWE3NjVkNjFkODMyN2RlYjg4MmNmOTk=" ** también es casi igual de débil, pero parece aún más fuerte (mayúsculas, mayúsculas, minúsculas, números, símbolos).
  • Nunca, nunca conocerás las listas de palabras y reglas precisas que usará un ataque de diccionario basado en reglas. Además, nunca estará tan actualizado con las últimas contraseñas filtradas de otras violaciones como el atacante que hizo la otra violación (o, probablemente, sus amigos del foro).

P.S. El uso de un gran algoritmo de hashing en una contraseña de 12345 transmite poca seguridad agregada, pero el uso de una frase de contraseña de 1000 bytes puramente aleatorios transmite poca seguridad agregada si se almacena en texto claro, también. ¡La cadena es tan fuerte como su eslabón más débil!

* MD5 ("contraseña")

** Base64 (MD5 ("contraseña"))

    
respondido por el Anti-weakpasswords 15.02.2014 - 21:37
fuente

Lea otras preguntas en las etiquetas