Supongamos que tengo una contraseña hecha de n
caracteres alfabéticos. Un atacante recibe la contraseña con hash e intentará un ataque de fuerza bruta para descifrarla.
Puedo imaginar un cracker de contraseñas ingenuo probando todas las combinaciones que comienzan con AAAA...A
luego AAAA...B
luego AAAA...C
etc. hasta ZZZZ...Z
. Para este atacante, una contraseña que comience con un A
reducirá el tiempo para descifrar en 25 * 26^(n-1)
(en comparación con comenzar con un Z
).
Por supuesto, primero podrías probar palabras del diccionario, variaciones de las palabras del diccionario y una lista de las contraseñas más comunes ... pero si la contraseña era basura aleatoria, en algún momento tendrá que recorrer todo el espacio de caracteres. . Y si no iteras el espacio de una manera bien definida (es decir, entradas aleatorias), necesitarás una cantidad enorme de espacio para recordar qué entradas ya intentaste (y tendrías que verificar en cada iteración, por lo tanto ralentizando las cosas).
Puede paralelizar las entradas para que intente A...
, B...
, C...
, ..., Z...
al mismo tiempo, pero en algún momento se quedará sin núcleos.
¿Cómo resuelven este problema los crackers de contraseñas modernos?