Hay tablas de arco iris y hay fuerza bruta ... estas son dos cosas distintas.
Una rainbow table es un caso especial de una gran tabla precomputada de contraseñas con hash. Como tal, una tabla arco iris puede "invertir" un hash, es decir, recuperar una contraseña coincidente, solo si, en algún momento durante la construcción de la tabla, esa contraseña fue considerada y hash. En consecuencia, si se puede encontrar una contraseña con una tabla de arco iris, entonces se podría haber encontrado con un simple ataque de diccionario que No han costado más que el edificio de la mesa. El "arco iris" no cambia eso; de hecho, la cosa del arco iris en realidad hace que la tabla sea más costosa para construir, por un factor de alrededor de 1.7 (esto se debe a que la construcción de la tabla tiende a considerar y hash varias veces las mismas contraseñas, y eso es bastante inevitable).
Una consecuencia es que ninguna tabla de arco iris vale la pena, a menos que se pueda aplicar al menos dos veces . Utilizamos sales precisamente para evitar que eso suceda. Se puede considerar que la sal es una variante de la función hash, ya que cada nueva sal implica una nueva variante. Una tabla precomputada vale cualquier cosa solo si se precomputó con la misma variante (la misma sal) que el valor hash que se va a atacar. Si no se usa un valor de sal más de una vez, el atacante inteligente no perderá su tiempo construyendo mesas de arco iris de Kleenex; él solo correrá
un ataque de diccionario.
Consideramos que el atacante conoce la sal. Por qué ? Debido a que el servidor lo sabe, y el modelo de ataque es que el atacante podría obtener un volcado de la base de datos del servidor. Lo que el servidor sabe, el atacante también lo sabe. Por lo tanto, al atacar una contraseña con hash, la longitud o el contenido de la sal no importan (el atacante debe incluir el valor de la sal en sus cálculos, pero la longitud de la sal no hará que su tarea sea más fácil o más difícil).
Por lo tanto, solo tenemos la contraseña como línea de defensa. Si queremos saber cuánto cuesta el ataque, esto se convierte en economía y, como tal, surge cierta complejidad. En particular, queremos saber si estamos hablando de un atacante que busca una contraseña muy valiosa (por ejemplo, la contraseña que protege la computadora principal de la fuerza alienígena que está a punto de destruir la Tierra). o un atacante que se gana la vida rompiendo muchas contraseñas. En este último caso, los costos de hardware se vuelven insignificantes con respecto al consumo de energía.
Si tomamos las estimaciones de @ jimbob, el hardware que calcula 10 hass por segundo 9 utiliza 200W de potencia, y la potencia es de $ 0.1 por kWh (tenga en cuenta que el costo de energía incluye refrigeración: cada vatio gastado en la computación también se convierte en calor, que debe ser disipado de alguna manera). Esto nos da 1.8 * 10 14 valores hash por dólar. De eso, obtenemos lo siguiente:
-
Con $ 10K, un atacante puede probar 1.8 * 10 18 valores hash, que es más o menos el número de contraseñas posibles de 10 caracteres alfanuméricos (mayúsculas, minúsculas y dígitos).
-
Con 683.7 billones de dólares (ese es el presupuesto militar de los EE. UU. en 2010 ), un atacante podría intentarlo aproximadamente 1.23 * 10 26 valores hash, correspondientes a aproximadamente 14.5 caracteres alfanuméricos. Permítanme agregar que esta cifra corresponde a la producción anual de aproximadamente cien plantas de energía nuclear, por lo que el esfuerzo de craqueo difícilmente sería imperceptible.
Conclusión: con 15 caracteres alfanuméricos aleatorios, sus contraseñas se resistirán incluso a los enemigos inverosímiles, incluso si usted frustró totalmente el hashing utilizando una sola invocación de SHA-1, en lugar de usar bcrypt o PBKDF2 con un alto recuento de iteraciones, como debes hacer . Tenga en cuenta que esto solo es válido para los caracteres aleatorios , no para el tipo de caracteres que pueda encontrar en la privacidad de su cerebro. Los cerebros humanos no son buenos en absoluto al azar.