¿Qué consideraciones debo tener en cuenta al aplicar las frases de contraseña?

31

Según XKCD: Seguridad de la contraseña , si la contraseña consta de “cuatro palabras comunes al azar”, será segura y memorable.

Quiero crear una aplicación web y hacer que los usuarios creen sus contraseñas de esta manera. Cada contraseña debe tener al menos 16 caracteres y debe ser una oración de al menos 4 palabras para que sea más segura y memorable. Pero esto hará que el atacante sepa que todas las contraseñas son así. ¿Es una mala idea?

¿Qué mejores formas existen para forzar contraseñas que sean más seguras y memorables al mismo tiempo?

    
pregunta Hossam Tag El Din 30.04.2018 - 13:48
fuente

9 respuestas

54

No es necesariamente una mala idea. El atacante puede saber que la contraseña está en ese formato, considerando que las 4 palabras son lo suficientemente aleatorias. Pero aquí está la cosa, hay otras buenas maneras de hacer una contraseña segura memorable. Limitar a tus usuarios a la que te gusta no es muy agradable. Por ejemplo, uso el administrador de contraseñas con contraseñas largas realmente aleatorias, lo cual es incluso mejor de lo que usted propone, pero no pude hacerlo en su sitio.

Más importante aún, si la razón por la que desea hacer esto es forzar a los usuarios a usar una contraseña segura, genere la contraseña de 4 palabras para ellos. Puede generar dicha contraseña teniendo un diccionario, luego eligiendo un número aleatorio entre 1 y la cantidad de palabras en su diccionario y tomando esa palabra. Haz esto 4 veces y tienes una contraseña. Puede obtener inspiración aquí . Esto es importante, ya que la mayoría de los usuarios no pueden elegir 4 palabras verdaderamente aleatorias, sino 4 palabras fáciles de adivinar. En tal escenario, esto sería peor que permitirles elegir cualquier contraseña.

    
respondido por el Peter Harmann 30.04.2018 - 14:07
fuente
14

Alude a Principio de Kerckhoff . Cuando diseñamos sistemas criptográficos, asumimos que el atacante sabrá todo acerca de su sistema, excepto las partes derivadas de la entropía (claves / contraseñas / etc, normalmente) - esto es porque no podemos garantizar que no conozcan detalles, pero Debemos asumir que no conocen nuestras claves generadas. Cualquier esquema de generación de contraseñas sigue este razonamiento: si se dice que un esquema de contraseñas es seguro, entonces puede creer que un atacante que sepa qué esquema está usando no es un problema.

La razón por la que no es un problema se debe a la forma en que funcionan los espacios de nombre de las contraseñas. Si exige que un usuario genere una contraseña basada en una lista de software de dados conocida, como la lista EFF, y exige que tenga al menos 4 palabras, entonces podemos calcular la complejidad del espacio de nombres.

Primero, descubriremos el espacio de nombres de una sola palabra: en la lista de software de prueba de EFF, tiras cinco dados de seis lados y seleccionas el resultado que aparece. Debido a que hay cinco posiciones con seis opciones, podemos calcular 6 ^ 5, lo que nos da 7776, esto simplemente significa que hay 7776 palabras diferentes posibles para cada lugar.

Ahora, podemos calcular la complejidad mínima del espacio de nombres de cuatro de estas palabras. Esto se hace simplemente tomando el número de palabras posibles y elevándolas al poder de la cantidad de palabras en la contraseña: 7776 ^ 4. Esto nos da 3656158440062976 (3.6 Quadrillion) posibles contraseñas de cuatro palabras de software EFF.

Ahora, para adivinar cuánto tiempo tomaría esto, tenemos que hacer algunas suposiciones -

  1. Está utilizando un buen algoritmo de hash: scrypt, bcrypt, PBKDF2, etc.

  2. El atacante tiene hardware de grado de consumidor. - Veremos algunos puntos de referencia para una serie de 8x 1080 TI, que son lo más alto de la línea al momento de escribir, pero no deben tomarse como la tasa de hash máxima: la NSA, etc. probablemente tenga un hardware especial solo para hashing contraseñas lo más rápido posible.

Podemos ver en esta referencia que en OpenCL, un atacante con 8x 1080 Ti puede atacar buenos algoritmos en los siguientes tarifas:

  1. Scrypt a una tasa de ~ 6.4 millones de hashes por segundo.
  2. bcrypt a una velocidad de 184 mil hashes por segundo.
  3. PBKDF2-SHA256 a una tasa de 775 mil hashes por segundo.
  4. SHA1 (solo para comparación, no use esto para contraseñas) a una tasa de 101 mil millones de hashes por segundo.

Por lo tanto, para nuestro espacio de nombres dado de 3.6 cuatrillones de contraseñas posibles, podemos calcular los siguientes tiempos previstos para descifrar. Por favor, tenga en cuenta que, en promedio, el 50% del espacio de nombres tendrá que agotarse, no el 100%.

  1. scrpyt - 571274756.25984 segundos (~ 9 años)
  2. bcrypt - 19870426304.690086956521739130435 segundos (~ 315 años)
  3. PBKDF2 - 4717623793.6296464516129032258065 segundos (~ 75 años)
  4. SHA1 - 36199.58851547500990099009900009901 segundos (~ .2 días)

Por lo tanto, podemos ver que también necesita implementar un buen algoritmo de hash.

Faltan dos cosas en este algoritmo: primero, no omitimos palabras de menos de 4 caracteres. La lista de juegos de dados de EFF tiene muchas palabras que tienen 3 caracteres de longitud. Si aumenta la longitud de palabra mínima, reduce el espacio de nombres. Creo que la lista de EFF tiene ~ 500 palabras que tienen 3 caracteres, pero eso es una suposición. Por lo tanto, el espacio de nombres es un poco menos complejo.

En segundo lugar, tratamos estas contraseñas derivadas aleatoriamente. Debido a que en su lugar querías oraciones, debemos tener en cuenta que las oraciones no son aleatorias. Si quieres que las oraciones tengan sentido, entonces hay ataques que puedes realizar contra ellas: puedes usar cadenas de Markov y otras cosas divertidas para generar oraciones probables en lugar de una simple imposición de la contraseña. No tengo estadísticas sobre cuánto más fácil es esto que el forzamiento bruto, por lo que voy a seguir adelante y decirle que debe asumir que hace una gran diferencia y es mucho más débil.

    
respondido por el Adonalsium 30.04.2018 - 15:00
fuente
4

No está dañando la seguridad de las contraseñas al decirle al atacante que la contraseña tiene una longitud de al menos 16 caracteres y que consta de 4 o más palabras. Es lo mismo que decir que la contraseña debe tener al menos 10 caracteres, tener al menos una letra mayúscula, un número y un símbolo. Derecho?

Con 4 palabras, el costo de una fuerza bruta es mayor que 10 caracteres aleatorios. Si le pide al usuario que use al menos una letra mayúscula, el costo aumenta aún más.

Según el diccionario de Oxford, el inglés tiene un poco menos de 175 mil palabras. Hay 8.64 × 10 20 combinaciones posibles. Al usar los 95 caracteres en un teclado inglés, tiene 5.98 × 10 19 combinaciones posibles.

    
respondido por el ThoriumBR 30.04.2018 - 14:03
fuente
3

Capacidad de memorización. Definitivamente, una contraseña de 4 palabras será más fácil de recordar que una contraseña aleatoria, pero eso no significa que el usuario promedio la recordará sin escribirla o usar un administrador de contraseñas de todos modos (hay demasiadas contraseñas diferentes para recordar hoy en día). Por lo tanto, la memorización es útil y es genial, pero podría no ser tan útil como crees.

Seguridad. Una contraseña de 4 palabras será más segura que la contraseña promedio solo si las palabras se eligen al azar de un conjunto suficientemente grande de palabras. De acuerdo con el artículo este , he descubierto que se espera que la entropía de la contraseña utilizada por un usuario promedio sea de aproximadamente 21 bits (2 21 = 2.1 × 106 ), lo cual es preocupantemente bajo. Si elige 4 palabras al azar de una lista de las 1000 palabras en inglés más comunes, tendrá 1000 posibilidades 4 = 1012 , por lo que contraseña que es 1 millón de veces más difícil que la contraseña promedio.

En general, su idea no es mala, siempre y cuando no permita que los usuarios elijan sus propias palabras, o terminarán eligiendo contraseñas como "pasar pasar pasar pasar" o "1 2 3 4 ", etc. Y, por supuesto, todo esto está hablando en general, porque definitivamente hay casos específicos en los que su método realmente disminuiría la seguridad de la contraseña. Por ejemplo, su método disminuiría la seguridad de mi contraseña porque tiendo a usar contraseñas aleatorias largas de manera predeterminada, por lo que si me obliga a usar su método en su aplicación, estaría usando una contraseña menos segura que de costumbre. Probablemente sea igual para comunidades como esta, donde espero que la entropía promedio de las contraseñas sea mucho mayor que 21 bits y probablemente mayor que las contraseñas de 4 palabras.

    
respondido por el reed 30.04.2018 - 15:41
fuente
3

No puede obligar a los usuarios a usar contraseñas seguras y fáciles de recordar.

Esta respuesta a una pregunta relacionada resume el cómic como un énfasis en que el aspecto humano de las políticas de contraseña, no el aspecto informático, "a menudo debería ser la preocupación principal".

La respuesta de @ Adonalsium cubre bien el aspecto de la computadora. Usar diceware es relativamente bueno para el aspecto humano sin ser malo para el aspecto de la computadora, por lo que es una forma aceptable de generar contraseñas.

Pero si desea memorización, no puede dictar a los usuarios cómo generar contraseñas. Tampoco puede exigir que utilicen las contraseñas que genere para ellos.

Hay algunas cosas obvias que se deben evitar, como restringir la longitud de las contraseñas a algo irrazonablemente corto, requerir caracteres de una lista particular (como dígitos o puntuación), o prohibir caracteres de una lista particular (como espacios o comillas). Entonces, ¿cómo puede evitarlos pero aún requiere contraseñas seguras?

Debe estimar un límite inferior en la entropía de la contraseña ingresada y configurar su política para que solo acepte contraseñas con una estimación por encima de un mínimo (posiblemente en función del tiempo de desconexión mínimo deseado). La única herramienta de estimación que conozco es zxcvbn (que desafortunadamente no rechaza "la batería de caballo correcta").

Esto permitirá el uso de contraseñas generadas aleatoriamente relativamente cortas y de contraseñas relativamente largas de software de dados, sin requerir ninguna, o permitiendo que sea inadecuada. El usuario puede elegir el método que mejor se adapte a ellos y usted puede requerir el nivel de resistencia a la fisuración que necesita.

Generar y recomendar contraseñas de diceware puede ser útil, y creo que es una buena idea, pero tendría que asegurarme de que el proceso no introdujera nuevas vulnerabilidades antes de usarlo yo mismo. (Otra cosa para proporcionar enlaces sobre, si lo haces.)

(También me sentiría inclinado a tener una contraseña. chaos monkey de seguridad intentará constantemente descifrar las contraseñas de los usuarios y forzar un restablecimiento cada vez que tenga éxito. Pero no estoy seguro de que eso tenga éxito con las contraseñas débiles más a menudo que contraseñas desafortunadas.)

    
respondido por el ShadSterling 02.05.2018 - 05:04
fuente
2

Mi consejo es no . Ni siquiera voy a discutir si aplicará la seguridad de contraseña (ya recibió un comentario sobre la contraseña de 32 caracteres aleatorios generada por un administrador de contraseñas), pero más el efecto sobre la seguridad global.

Está agregando una restricción para los usuarios finales. Algunos (sin educación) siempre usan la misma contraseña. Casi no lo recuerdan y no quieren ser molestados por uno nuevo, por lo que no usarán su aplicación web si pueden. Otros dirán: es una buena idea, pero no podré recordar eso por mucho tiempo ... ¡escríbalo en esa hoja! Aquellos que están acostumbrados a un buen administrador de contraseñas dirán qué estupido es que no pueda usar mi generador aleatorio! y, de nuevo, evitarán la aplicación si pueden.

El único caso de uso en el que puedo aceptar reglas de contraseña es para la contraseña principal en un entorno corporativo. Se supone que los empleados deben usarlo todos los días (todos los días laborables ...) y normalmente solo se necesita uno, gracias a las soluciones de inicio de sesión único, por lo que recordarlo no debería ser un problema. Para todos los demás casos de uso, se supone que el usuario final es responsable de sus propios datos y mi opinión es que cualquier cosa por encima de una longitud mínima es una restricción molesta , y me esforzaré por no usar ese sitio.

    
respondido por el Serge Ballesta 02.05.2018 - 10:32
fuente
1

No creo que puedas tener una contraseña útil para hacer esto. La fuerza del método XKCD AKA diceware depende de que las palabras de la frase sean aleatorias. Cuatro palabras elegidas, particularmente cuatro palabras elegidas que forman una oración son una frase de contraseña muy débil y no hay manera de verificar si las palabras que ingresan son aleatorias o elegidas.

    
respondido por el William Hay 01.05.2018 - 16:19
fuente
0

No, pero dale una advertencia al usuario que está tratando de establecer una contraseña completamente insegura y haz que confirme que realmente quiere establecerla.

Forzar a las personas a establecer una contraseña que esté por encima de lo que pueden memorizar no solo hará que la escriban, sino que la escriban al azar y en un lugar inseguro.

También, en algunas organizaciones, la capacidad de usar una frase de contraseña segura (por complejidad) pero compartida (entre un equipo autorizado) y / o predocumentada (bajo candado y clave) es deseable: las pautas de contraseña que rechazan algunas contraseñas razonablemente seguras pueden Conviértete en una verdadera molestia aquí. Escenario de uso: "Establezca la frase de contraseña compleja que este equipo usa para todos los proveedores del tipo XYZ, para que no haya problemas en caso de que otro miembro de este equipo necesite acceder de manera urgente en su ausencia".

    
respondido por el rackandboneman 02.05.2018 - 18:07
fuente
-1
  

¿Qué mejores formas existen para forzar contraseñas que sean más seguras y   memorable al mismo tiempo?

Dos cosas surgen de mi mente (ambas relacionadas con el aumento del "alfabeto" de la contraseña):

1) No está claro en tu publicación si se permiten o no caracteres numéricos y especiales. Suponiendo que no lo sea, eso te dejaría con un alfabeto de solo 32 caracteres diferentes. Incluiría y también motivaría activamente a sus usuarios para que los usen.

2) Suponiendo que solo usarías palabras en inglés, un atacante tiene dos ataques directos. (A) fuerza bruta en cada carácter individual o (B) fuerza bruta en cada palabra individual 4 basado en un diccionario de inglés. Teniendo en cuenta que gran parte de la población mundial tiene el inglés como segundo idioma, motive a sus usuarios a mezclar idiomas.

    
respondido por el Tree 30.04.2018 - 15:22
fuente