¿Por qué no puede un ataque de tabla arco iris identificar y destruir la sal?

2

Este es mi entendimiento de un esquema de autenticación con sal / hash:

string plaintextPass = Request.Form["password"];
string salt = UserRecordFromDb.Salt;
string toHash = salt + plaintextPass;

string hash = bcrypt(toHash);

return(hash == UserRecordFromDb.HashedPassword);

El problema es que el algoritmo agrega la sal de una manera predecible . Si pudiera usar una tabla de arco iris para obtener el texto simple incluida la sal , podría encontrar y destruir la sal. Hay suficientes usuarios que utilizan contraseñas incorrectas de todos modos para que el patrón de adición de sal sea fácil de reconocer 1 .

Por ejemplo, si recupero estos plaintexts de mi ataque de la tabla del arco iris:

1: passwordW0fkvE
2: secretJEn3cx
3: t4k3nVdksE12
4: purplehorse1593vE1r

# 3 no me dice mucho. Es una buena contraseña por lo que la sal es irreconocible. Pero desde el # 1 y el # 2 puedo ver que la sal es probablemente 6 caracteres agregados al final. Puedo usar esa información para # 4 para averiguar si la contraseña es purplehorse15 .

1 Nota: si almacena el salt y el paso de nombre de usuario / hash en la misma base de datos, ni siquiera necesito adivinar qué es el salt. Está justo delante de mí. El paso adicional de adivinar la sal solo es necesario si la sal está almacenada en algún otro DB.

    
pregunta just.another.programmer 10.09.2015 - 09:13
fuente

2 respuestas

3

Un par de elementos a considerar:

  1. Es importante tener en cuenta que una tabla de arco iris funciona de manera diferente a una tabla hash precomputada recta. (aunque una tabla de arco iris con una longitud de cadena de 1 es esencialmente lo mismo que una tabla de hash precomputada, aunque la mayoría de las tablas de arco iris tienen muchas cadenas)

  2. Las cadenas de arco iris tienen problemas con las contraseñas con sales GRANDES. Una sal corta (6 caracteres) podría no ser un gran problema para ellos. (pero nuevamente, exponencialmente más largo para cada personaje adicional)

El problema con las tablas hash precomputadas rectas es que se vuelven ENORMES. Incluso generando una tabla precomputada de solo dígitos, la longitud 0-8 se convierte en muchos gigabytes. Si empiezas a agregar en alfa / símbolos se vuelve gigantesco. Por lo tanto, la adición de incluso 6 caracteres de sal aumentará considerablemente el tamaño de la tabla de búsqueda.

Una tabla de arco iris ofrece una mezcla entre almacenamiento en disco y cómputo mediante el uso de cadenas. Usaría menos espacio que una tabla hash precomputada completa, y probablemente estaría bien para sales cortas, pero tratar con sales grandes requeriría MUCHO espacio.

Aquí hay un sitio excelente que describe los pasos reales y da ejemplos de cómo funciona:

enlace

Este otro post explica un poco más sobre las tablas del arco iris: ¿Qué son las tablas de arco iris y cómo se utilizan?

Para resumir: es plausible que pueda utilizar una tabla de arco iris o una tabla de hash precomputada para resolver las contraseñas. Las sales solo agregan más entropía agregando caracteres a la longitud. HACE que sea MUCHO MÁS DURO, ya que básicamente ahora estás forzado por la aplicación de una contraseña aleatoria de n-chars + salt.

Por último, para abordar el problema de que si ya conoces la sal: no creo que esto te sirva de nada, ya que los hashes son unidireccionales y debido a cómo funcionan las tablas arco iris, deberías tener una costumbre. Función de reducción en la tabla del arco iris que generó plaintexts que terminaron en la sal. De lo contrario, dado que las tablas de arco iris generan su próximo texto sin formato de la reducción de la cadena anterior, si no usara una función de reducción personalizada, sería imposible incorporar la sal al final del texto sin formato resultante. Probablemente sería más sencillo usar una tabla hash precomputada simple en esa instancia, pero nuevamente necesitarías una para cada sal.

    
respondido por el nyxgeek 10.09.2015 - 10:34
fuente
0

Me gustaría hacer varios puntos sobre su problema. Las sales han sido diseñadas para prevenir ataques a la mesa del arco iris. Las tablas Rainbow ofrecen un intercambio entre velocidad y espacio, básicamente, usted acelera el proceso de craqueo al buscar en sus entradas de tabla precomputadas. En su caso para cada palabra, tendría que generar hasta 2 ** 48 entradas, ¡la cantidad de espacio que necesitaría es enorme! El siguiente punto que me gustaría hacer es que el algoritmo de hash utilizado es bcrypt. bcrypt puede ser muy lento, especialmente si el costo establecido es alto, la generación de tablas de arco iris le llevaría semanas, meses o años dependiendo de su hardware. Las tablas del arco iris no son la solución aquí.

    
respondido por el Othman 13.09.2015 - 13:36
fuente

Lea otras preguntas en las etiquetas