Las otras respuestas son correctas, pero para completar, me gustaría contrastar un ataque de diccionario con un ataque de arco iris.
En un ataque de arco iris, el pirata informático crea una "tabla de arco iris" basada en el diccionario.
¿Qué es una mesa de arco iris? Una lista precalculada de los hashes asociados con palabras comunes. Con la tabla del arco iris, un pirata informático puede realizar una "búsqueda inversa" comenzando con el hash de la palabra y retrocediendo para obtener el texto claro: algo que es computacionalmente inviable sin la tabla del arco iris (o una serie de cadenas de hash precomputadas, si vamos por la compensación de espacio / tiempo, pero eso es otro asunto). En este caso, el pirata informático ha limitado la lista de palabras comunes a 500,000.
Entonces, si no hubiera sal en absoluto, el pirata informático tendría que marcar cada palabra, lo que significa que el número de entradas de la tabla del arco iris (el "espacio de búsqueda") sería de 500,000.
Ahora agregue la sal. Como usted sabe, la sal es solo algo que se agrega a la palabra de texto claro antes de calcular el hash, por lo que las palabras muy largas son más o menos impredecibles. Con valores de sal de 2 ^ 32, la tabla del arco iris explota en tamaño a 2 ^ 32 x 500,000, o 2,14 x 10 ^ 15, o 2,147,483,648,000,000. Ouch.
Afortunadamente, en realidad no hay valores de sal de 2 ^ 32. El pirata informático conoce todos los valores de sal en uso, y solo hay 100 de ellos (1 para cada usuario). Por lo tanto, el tamaño de la tabla de arco iris que se necesita es solo de 100 x 500,000 = 50M entradas.
Contrasta esto con un ataque de diccionario. Un ataque de diccionario es una forma de ataque de fuerza bruta que limita el campo de búsqueda al buscar palabras comunes. Este tipo de ataque en este caso requiere como máximo 100x500,000 = 50M operaciones de hashing.
Las palabras clave son "como máximo". El ataque del diccionario es en realidad considerablemente más rápido; es bastante improbable que tengas que calcular los 500,000 hashes antes de encontrar el correcto. En un caso típico, solo tendrá que calcular 250,000, y tal vez incluso menos si revisa su diccionario de manera inteligente (la mayoría de las palabras comunes primero).
En contraste, con un ataque de arco iris (que es un tipo de ataque de "fuerza bruta inversa"), primero construye la tabla de arco iris y requiere todas las operaciones de hashing de 50M antes de mirar un solo registro de usuario. ¡No es conocido por su eficiencia de memoria! De hecho, ese es su principal inconveniente.
Entonces, para obtener más crédito, dígale a su profesor que el ataque de diccionario (dada la sal y la lista de palabras conocida de 500,000) en cada contraseña sería más eficiente que un ataque de arco iris, en este caso específico, asumiendo que los valores de sal son cada uno.
Una forma elocuente de afirmar esto es:
Rainbow attack
- 500,000 x (100-Q) operaciones de hashing + 100 operaciones de comparación, donde Q es el número de valores de sal que están duplicados
- El requisito de memoria es (500,000 x (100-Q) x tamaño hash) + (100 x tamaño de contraseña)
Ataque de diccionario
- 100 x (N x (1 operación de hashing y 1 operación de comparación)), donde 1 < = N < = 500,000
- El requisito de memoria es (1 x tamaño de hash) + (100 x tamaño de contraseña)
En ambos casos, el "espacio de búsqueda" es 50,000,000. El ataque del diccionario es superior en términos de espacio y tiempo para los valores esperados de Q. El ataque del arco iris gana si no hay sal o la sal está fija (Q = 99), y probablemente también ganaría con valores altos de Q.
Para crédito adicional serio, calcule Q '(donde el ataque del arco iris vence al ataque del diccionario cuando Q > = Q'), en términos de número de cálculos. Seguramente obtendrás un A +.