Lo que hace que una contraseña segura aleatoria sea más resistente a una búsqueda de fuerza bruta que otra

4

La única manera de hacer esto es hacer una conjetura educada sobre cómo funciona o probablemente funciona el algoritmo de fuerza bruta.

Digamos que estabas intentando romper una cerradura de combinación con 3 discos cada uno con 10 muescas para 0-9.

Comenzaría con 000, 001, 002 y así sucesivamente, utilizando mi algoritmo de craqueo muy complicado, el código que se descifre en el último intento sería 999 , por lo que en este caso es el más fuerte / más seguro.

Podemos asumir que un algoritmo real no solo aumentaría a través de los números ni se abriría camino a través de la tabla ascii.

por ejemplo, con un código numérico de 3 dígitos es probable que estés mucho mejor probando 123 , 000 y 111 antes de 001 al intentar descifrarlo. números de pin comunes

Esto se aplica a otros caracteres ascii

  • en minúsculas se usa mucho más que en mayúsculas en las contraseñas (definitivamente)
  • los caracteres especiales se usan mucho menos que los caracteres alfanuméricos (definitivamente)
  • las "subestaciones comunes" de caracteres especiales son más comunes que otros caracteres especiales s $, 4A @ i!. (probablemente).
  • 0,1 y 9 se usan más comúnmente que otros números. (parece probable)

Utilizando el método de contraseña común " al menos 8 caracteres, incluida una letra mayúscula, un carácter especial y caracteres alfanuméricos " He creado una contraseña de 8 caracteres aleatoria * muy fuerte de Fs9@lw$a .

Mi teoría es que las siguientes contraseñas fuertes * aleatorias serían cada vez más difíciles de descifrar.

  • Fs9@k0$a (contraseña)
  • Fs9@k0$q (cambió "a" a la letra menos común en inglés "q")
  • FS9@K0$q (convierte de minúsculas a mayúsculas dejando 1 en minúsculas)
  • FS5@K7$q (cambia los números comunes a otros números)
  • FS5&K7?q (Chars especiales comunes cambiados con otros caracteres especiales)
  • *%.&K7?q (reemplace mayúsculas con caracteres especiales dejando 1 carácter mayúsculas.
  • *%5&K7?q (reemplace los números con caracteres especiales dejando 1 número.

Estoy buscando una lista completa (ish) de características que una contraseña "resistente a la fuerza bruta" no debería tener.

Supongo que en la parte superior de la lista estaría la longitud de la contraseña; en el ejemplo, solo usé 8 caracteres, lo ideal sería que usaras el máximo permitido.

    
pregunta TarranJones 12.10.2016 - 16:05
fuente

5 respuestas

5

Si al azar te refieres a seleccionar con igual probabilidad de algún conjunto bien definido de contraseñas posibles, entonces la fortaleza de la contraseña es una función del tamaño del conjunto. En su ejemplo, el conjunto es el de secuencias de tres dígitos ( 000, 001, ..., 999 ), y este conjunto tiene 1,000 miembros, por lo que un atacante tiene un promedio de éxito después de 500 intentos.

  

Comenzaría con 000, 001, 002 y así sucesivamente, utilizando mi algoritmo de craqueo muy complicado, el código que se descifre en el último intento sería 999 , por lo que en este caso es el más fuerte / más seguro.

     

Podemos asumir que un algoritmo real no solo incrementaría los números ni se abriría camino a través de la tabla ascii.

No necesitamos asumir nada. Lo que te confunde es que, para cualquier elección aleatoria dada, hay algunas órdenes que lo descifran mucho antes que el promedio. Por ejemplo, si sabemos que el PIN es 999 , el algoritmo que prueba todas las combinaciones en orden descendente es óptimo.

Pero el atacante no sabe de antemano que el código es 999 , ¿por qué elegirían ese algoritmo? Si el código es 000 , que es tan probable como 999 , el algoritmo de iteración hacia atrás es el peor . Si intentas hacer un compromiso como 000, 999, 001, 998, ... , entonces si el código es 500 será muy malo.

Este argumento generaliza: si el código se elige al azar , con todos los códigos tienen la misma probabilidad , y se mantiene en secreto del atacante, entonces, para cualquier algoritmo, el atacante intenta la probabilidad de que su algoritmo encuentre el código en muy pocos intentos es igual a la probabilidad de que lo encuentre en el número de intentos complementariamente pessimal. Todo promedia, si el conjunto tiene códigos N , el atacante tiene un promedio de N/2 .

  

por ejemplo, con un código numérico de 3 dígitos es probable que estés mucho mejor probando 123 , 000 y 111 antes de 001 al intentar descifrarlo. [enlace a números pin comunes]

Si el código se eligió de manera uniforme al azar (todos los códigos son igualmente probables), no lo eres.

Por otra parte, tenga en cuenta que si los códigos no se eligen uniformemente al azar (es probable que algunos sean elegidos más que otros), entonces sí, se espera que algunas órdenes de adivinación terminen antes. que otros. Así es, por ejemplo, cómo funcionan las prácticas de descifrado de contraseñas: los diccionarios y las reglas de mutación, entre otras, son solo trucos para probar contraseñas más probables antes que las improbables.

  

Mi teoría es que las siguientes contraseñas fuertes * aleatorias serían cada vez más difíciles de descifrar. [...]

Sigues usando la palabra "aleatorio", pero creo que debes detenerte y pensar detenidamente lo que quieres decir con esto. El concepto clave aquí es un distribución de probabilidad uniforme discreta . Si sus códigos son elegidos de esa manera, no hay trucos de orden ingeniosos que se puedan tener, punto.

  

Estoy buscando una lista completa (ish) de características que una contraseña "resistente a la fuerza bruta" no debería tener.

Dos propiedades:

  1. Fuerza: Se debe elegir al azar con la misma probabilidad de un conjunto suficientemente grande.
  2. Amabilidad para el usuario: debe ser fácil de recordar y fácil de ingresar en los dispositivos donde el usuario lo necesita. (Esto se puede relajar mucho si utiliza un administrador de contraseñas que rellena automáticamente los campos de la contraseña o permite copiar / pegar).

Eso es todo. Un sistema simple que posiblemente cumpla con estos requisitos es el Diceware . (Existe un debate sobre cuán memorables son las frases de contraseña y algunas mejoras a la lista de palabras .)

    
respondido por el Luis Casillas 10.01.2017 - 19:44
fuente
2

Tienes razón en que:

  

La única manera de hacer esto es hacer una conjetura educada sobre cómo funciona o probablemente funciona el algoritmo de fuerza bruta.

Desafortunadamente, no todos los algoritmos de fuerza bruta son iguales, y se están desarrollando nuevos métodos todo el tiempo para optimizar los ataques de fuerza bruta contra contraseñas generadas por el usuario. Si tuviera que crear una lista de características que debería tener una contraseña "resistente a la fuerza bruta", podría escribir fácilmente un algoritmo de fuerza bruta que probaría esas contraseñas primero, lo que las hace en realidad más débiles contra Mi algoritmo sería más que otras contraseñas.

En realidad, lo que hace que las contraseñas sean fuertes contra los ataques de fuerza bruta en general no es un formato específico o un conjunto de reglas, sino su grado de imprevisibilidad. Una forma de estimar la imprevisibilidad de una contraseña es determinar la entropía del método utilizado para generarla.

Para ilustrar cómo funciona la entropía de la contraseña, supongamos que utiliza un esquema muy simple para generar sus contraseñas. Para generar cada contraseña, lanzas una moneda 20 veces. Cada vez que la moneda sale cara, agrega un 1 a la contraseña; cada vez que sale colas, agrega un 0. Esto da como resultado una contraseña que es una cadena aleatoria de 20 unos y ceros. En este escenario, hay 2 20 posibles contraseñas, y es probable que cada posibilidad haya sido elegida. Podemos decir que este método de generación de contraseña tiene un registro 2 (2 20 ) = 20 bits de entropía. (Bastante débil, pero ese no es el punto para este ejemplo).

Ahora supongamos que el atacante sabe que usas este esquema (el peor de los casos) y quiere intentar descifrar una de las contraseñas que generaste. Debido a que hay 2 20 posibles contraseñas y es probable que se hayan elegido cada posibilidad, el atacante tomará 2 20 / 2 = 2 19 ~ = 524,288 intenta en promedio romperlo. El atacante podría descifrar cualquier contraseña individual dada en su primer intento o en su último intento, pero siempre tomará un promedio de 524,288 intentos, independientemente de la estrategia que utilice el atacante para decidir qué contraseñas probar primero . / p>

Puede usar este mismo método para estimar la entropía de casi cualquier esquema de generación de contraseñas donde las contraseñas se eligen al azar. Por ejemplo, supongamos que genera sus contraseñas eligiendo 6 palabras al azar (permitiendo duplicados) de un diccionario de 7776 palabras de palabras comunes en inglés. (Este es el esquema utilizado por diceware .) Con este esquema, su contraseña tiene el registro 2 (7776 6 ) ~ = 77.55 bits de entropía, y tomará ~ 2 77.54 / 2 ~ = 110 sextillones intenta descifrar el promedio. Nuevamente, con este esquema el orden en que el atacante intenta cada contraseña posible es irrelevante .

Thomas Pornin entra en la entropía de contraseñas con mucho más detalle en su respuesta a la popular "Contraseña compleja corta , o frase de contraseña larga del diccionario? " pregunta. Le recomiendo que lo revise.

    
respondido por el Ajedi32 10.01.2017 - 19:20
fuente
2

Me temo que te estás acercando a este problema muy amplio desde un punto de vista demasiado estrecho. Hay muchas cosas a considerar antes de sumergirse en los aspectos específicos de "qué personajes usar".

Primero, ¿de qué tipo de amenazas estás preocupado? ¿Te preocupa que tu Yahoo! ¿La contraseña va a ser mal utilizada? ¿Te preocupa que si un ladrón aprende tu Yahoo! ¿Contraseña para que él intente una toma de control de cuenta de su cuenta bancaria con la misma contraseña? ¿O es que esta contraseña protege su red, donde tiene secretos comerciales invaluables que han atraído la atención de espías extranjeros?

Para la mayoría de las personas, el segundo tipo de amenaza es tanto el más relevante como el más común: alguien que aprende una contraseña de una infracción a menudo intentará la contraseña en varios sitios web de banca y compras. Esto se denomina toma de control de la cuenta (ATO), y no le importa al atacante cuán débil o fuerte es su contraseña. Solo probará su dirección de correo electrónico y contraseña en cada uno de los doscientos sitios, y si no encuentra una coincidencia, pasará al siguiente correo electrónico y la contraseña que obtuvo de la violación. La fuerza bruta es casi irrelevante para la fortaleza de la contraseña en este caso.

Su mejor estrategia de defensa contra este ataque es no reutilizar las contraseñas. Nuevamente, no importa lo complejos que sean, porque el atacante ya los tiene. Mientras no uses la misma contraseña en varios lugares, estarás a la vanguardia del juego.

También tenga en cuenta que esta estrategia se basa un poco en "no superar al oso, solo en vencer al tipo con el que está": si el atacante recupera el 10% de las contraseñas de una gran base de datos robada, puede que esté más interesado en monetizar lo que ya ha robado que en trabajar más duro para descifrar el resto de las contraseñas.

Pero veamos el caso en el que el atacante desea SU contraseña y decide aplicar la fuerza bruta. Digamos que un atacante obtiene el hash de su contraseña de una base de datos violada, o de hackear su sistema, y comienza a adivinar su contraseña. ¿Qué puede hacer él?

No subestimes al atacante. Hace 5 años, alguien puso un montón de tarjetas gráficas en una computadora y escribió un programa CUDA para probar los hashes de contraseñas lo más rápido posible. En ese momento, su máquina era capaz de probar 348,000,000,000 hashes por segundo; Las tarjetas gráficas modernas son incluso más rápidas hoy en día. Eso significa que si selecciona su contraseña de un conjunto de 64 posibles mayúsculas y minúsculas, dígitos y símbolos comunes, un atacante con esos recursos puede probar todas las contraseñas de 7 caracteres posibles en menos de 13 segundos. ¿Crees que esto está fuera del alcance de tu criminal promedio? Un ladrón con acceso a una botnet de PC secuestradas en Internet puede configurar 10,000 computadoras para atacar su contraseña simultáneamente, y un porcentaje de esas computadoras tendrán tarjetas gráficas para ayudar a acelerar su ataque.

Lo que todo esto significa es que sus prácticas de seguridad y la longitud de la contraseña son mucho más importantes que sus elecciones específicas de letras, dígitos y símbolos. Elija una contraseña de 12 caracteres como mínimo; de lo contrario al menos cumplir con las directrices del sitio para la complejidad de la contraseña Y nunca reutilizar contraseñas. Una aplicación de administrador de contraseñas, o incluso un bloc de notas en su bolsillo le servirá bien.

    
respondido por el John Deters 10.01.2017 - 20:49
fuente
1

Eso depende de la secuencia de comandos de fuerza bruta. Si (para usar su ejemplo) comenzamos a descifrar desde 001 hasta 999 , entonces 999 es la mejor opción, pero también es la peor opción si comenzamos desde 999 hacia atrás. Por lo tanto, si vamos a suponer que cada valor se incrementa o decrementa, sugeriría ir por algo parcial entre ambos. Para ello, necesitamos los códigos de carácter. Python tiene funciones útiles para eso: ord('A') produce 65, por ejemplo, y chr(65) produce "A". Así que sugiero configurar los primeros caracteres de varios símbolos con códigos de caracteres cercanos a 127, que se encuentran entre 0 y 255, y usar contraseñas largas.

(Sin embargo, debo admitir que me gusta la opinión de xkcd sobre esto)

    
respondido por el Danya02 11.12.2016 - 08:48
fuente
1

La respuesta simple es la longitud. Cada personaje añade una magnitud de complejidad. Puede seleccionar caracteres aleatorios como desee, pero si alguien sabe cómo seleccionó su contraseña aleatoria, cualquier truco puede revertirse debilitando la contraseña.

Si agrega otro carácter, de repente hay 200 veces más combinaciones posibles

    
respondido por el Thorne 07.04.2017 - 06:58
fuente

Lea otras preguntas en las etiquetas