¿Son los generadores de contraseñas de SS64.com un buen enfoque?

13

Hay dos generadores de contraseñas en ss64.com:

Cómo funcionan

Hice versiones independientes de ellos, más una copia del HTML / Javascript original versiones, si quieres estudiarlas, pero aquí es cómo funcionan:

Esta sección explica cómo funciona el generador de contraseñas, de modo que es posible implementar una versión independiente que no depende de confiar en un sitio web de terceros.

  • Tienes una contraseña maestra, digamos foo
  • Genera una contraseña para un sitio o servicio específico, digamos stackexchange
  • Calculas la suma SHA1 (versión estándar) o la suma SHA256 (versión segura) de la cadena foo:stackexchange .

    $ echo -n "foo:stackexchange" | sha1sum      #standard version
    b99341502484edbc43ec35a5f94be8e5de7ca53a *-
    
    $ echo -n "foo:stackexchange" | sha256sum    #strong version
    c6ac66fdb639821bcc322f186fb1214d241f35ba2a91cb660daf0a284ac19a47 *-
    
  • Usted aplica la transformación Base64 en la secuencia de bytes cuya representación hexadecimal es la suma de comprobación generada anteriormente:

    $ printf "\xb9\x93\x41\x50\x24\x84\xed\xbc\x43\xec\x35\xa5\xf9\x4b\xe8\xe5\xde\x7c\xa5\x3a" | base64
    uZNBUCSE7bxD7DWl+Uvo5d58pTo=
    
    $ printf "\xc6\xac\x66\xfd\xb6\x39\x82\x1b\xcc\x32\x2f\x18\x6f\xb1\x21\x4d\x24\x1f\x35\xba\x2a\x91\xcb\x66\x0d\xaf\x0a\x28\x4a\xc1\x9a\x47" | base64
    xqxm/bY5ghvMMi8Yb7EhTSQfNboqkctmDa8KKErBmkc=
    
  • (versión segura) reemplaza + con E y / con a, y toma los primeros 20 caracteres

  • (versión estándar) toma los primeros 8 caracteres y luego agrega 1a al final de la contraseña para asegurarse de que haya al menos un dígito y una letra

Por lo tanto, con la contraseña maestra foo , y para el sitio específico stackexchange , la contraseña estándar generada es uZNBACSE1a y la contraseña segura generada es xqxmabY5ghvMMi8Yb7Eh .

Ahora las preguntas

  • ¿Es la versión fuerte realmente más fuerte que la versión estándar? ¿Sería aún más fuerte si la versión estándar también usara SHA256?
  • siempre que escoja una buena clave maestra (no foo, en lugar de más de 10 caracteres aleatorios), ¿estoy bastante seguro con estas contraseñas generadas?
  • ¿Cuáles pueden ser otros inconvenientes de este enfoque hacia la creación de contraseñas?
pregunta Benoit 24.10.2013 - 09:59
fuente

2 respuestas

10

Hay dos niveles de fuerza aquí:

  • Si la contraseña proporcionada será, por sí misma, fuerte (contra la fuerza bruta).
  • Si alguien que esté aprendiendo una de sus contraseñas en un sitio ganará apalancamiento para adivinar sus contraseñas en otros sitios (por ejemplo, adivinando la "contraseña maestra").

La versión "estándar" produce contraseñas con 48 bits de entropía: la codificación Base64 es de 6 bits por carácter, y el generador usa 8 caracteres (el sufijo "1a" es fijo, por lo que no cambia la seguridad en absoluto). 48 bits de entropía no son malos, especialmente en el contexto de ataques en línea, donde el atacante debe hablar con el servidor para cada intento. Si el servidor es pirateado (volcado de la base de datos a través de la inyección SQL) y , el servidor no usó correctamente hashing de contraseña , un atacante laborioso y motivado puede romperlo; en ese sentido, la versión "fuerte" es un poco más fuerte que la versión estándar. Sin embargo, en ese caso específico, diría que la debilidad está en el servidor, no en la contraseña (el punto malo aquí es no usar el hashing de contraseña adecuado).

Tenga en cuenta que el cambio de SHA-1 a SHA-256 no mejora la seguridad. No es malo , pero ofrece una ventaja práctica solo en la medida en que SHA-1 no proporciona una buena resistencia de pre-imagen, y, en este momento, SHA-1 sigue siendo tan bueno como nuevo a ese respecto.

Para el segundo nivel (pasando de la contraseña del sitio a la contraseña maestra), ambas versiones son débiles porque son demasiado rápidas. Dada una contraseña específica del sitio, la enumeración de las contraseñas maestras potenciales se puede hacer a una velocidad de unos miles de millones por segundo (con un par de GPU buenas). Además, dado que la transformación no está incluida en la sal, excepto por el nombre del sitio, si varias personas usan el mismo método para sus contraseñas en el mismo sitio, sus contraseñas maestras se pueden forzar de forma brutal en paralelo. La versión "fuerte" no es mucho más fuerte a ese nivel que la versión "estándar", excepto por el hecho de que SHA-256 es aproximadamente dos veces más lento que SHA-1, duplicando así el costo del atacante.

El enfoque también tiene algunos problemas de usabilidad:

  • Si el servidor solicita que un usuario cambie su contraseña, el usuario no puede cumplir, ya que el método produce una contraseña para una contraseña maestra y un nombre de sitio determinados.

  • Si el nombre del sitio cambia, entonces se rompe la generación de la contraseña.

  • Algunos servidores tienen requisitos especiales que no se cumplen necesariamente con la contraseña generada (por ejemplo, algunos servidores exigen que las contraseñas contengan al menos un signo de puntuación, un requisito erróneo, pero sucede).

  • Otros han señalado el problema de ingresar su contraseña maestra en una página servida por un sitio web de terceros, página cuyo contenido puede cambiar sin previo aviso y sin ninguna advertencia visible. Una versión independiente evita este problema, pero si se permiten aplicaciones independientes, esto abre la posibilidad de utilizar un mejor sistema.

De hecho, las soluciones más flexibles (por ejemplo, KeePass ) utilizan un sistema de almacenamiento. Hay una indirección: la contraseña maestra se utiliza para cifrar un paquete que contiene las contraseñas reales. Esto permite cambiar las contraseñas y cumplir otros requisitos.

    
respondido por el Thomas Pornin 24.10.2013 - 20:21
fuente
6

Algunos puntos buenos mencionados anteriormente, pero creo que vale la pena hacer algunos números para mostrar cómo la longitud de la contraseña afecta esto.

Un grupo de GPU con capacidad para 350 mil millones de conjeturas / segundo
350000000000 * 60 * 60 = 1.26e + 15 conjeturas / hora
o 1.10376e + 19 Guesses / año

Una contraseña aleatoria de carácter 8 con 48 bits de entropía
2 ^ 48 = 2.8147498e + 14 combinaciones posibles
Así que el momento de descifrar la contraseña de 8 caracteres:
2.8147498e + 14 / 1.26e + 15 = 0.223 Horas

A 10 contraseña aleatoria de caracteres con 59 bits de entropía
2 ^ 59 = 5.7646075e + 17 combinaciones posibles
Es hora de descifrar la contraseña de 10 caracteres:
5.7646075e + 17 / 1.26e + 15 = 457.50 Horas

Una 15 contraseña aleatoria de caracteres con 89 bits de entropía
2 ^ 89 = 6.1897002e + 26 combinaciones posibles
Hora de descifrar la contraseña de 15 caracteres:
6.1897002e + 26 / 1.10376e + 19 = 56078315.93 años

A 20 contraseña aleatoria de caracteres con 119 bits de entropía
2 ^ 119 = 6.64614e + 35 combinaciones posibles
Hora de descifrar contraseña de 20 caracteres:
6.64614e + 35 / 1.10376e + 19 = 6.0213633e + 16 años

Por lo tanto, la clave para llevar aquí es que tanto la contraseña generada como la contraseña maestra deben tener suficiente longitud / entropía de la contraseña para defenderse de un ataque sin conexión.

Editar: solo para agregar, esos son tiempos máximos, el promedio será la mitad de esos valores.

    
respondido por el ss64 26.10.2013 - 17:14
fuente

Lea otras preguntas en las etiquetas