La generación de tablas arcoiris es nunca la mejor forma de atacar una sola instancia. Las tablas de arco iris son tablas precomputadas : realiza muchos cálculos por adelantado, con la esperanza de poder aplicar estos cálculos a varias instancias de ataque.
Tablas precomputadas (arco iris o no arco iris, esto no cambia nada aquí) todas siguen el mismo patrón:
-
Durante las precomputaciones, usted "prueba" N las posibles contraseñas y, para cada una de ellas, aplica la función criptográfica relevante (en su caso, algún tipo de hash para contraseña-a- derivación de la clave, luego cifrado simétrico) y almacene el resultado (para una tabla rainbow los costos de almacenamiento se reducen, pero el costo de la CPU no se modifica, de hecho, se amplía un poco debido a los detalles específicos del arco iris).
-
En el momento del ataque, busca el hash / ciphertext observado en su tabla. Si la contraseña era de hecho una de las N que procesó durante la construcción de la tabla, entonces el ataque funciona. De lo contrario, no lo hace.
Por lo tanto, generar la tabla cuesta tanto como el peor de los casos de un simple ataque de fuerza bruta: aún paga por el hashing de todas las contraseñas posibles de N . Si solo tienes una instancia para atacar, entonces la fuerza bruta directa es más barata.
En su caso , tiene algún esquema de derivación de clave a clave (no especificado) h , y con lo que tiene que trabajar es:
f ( p , IV , m ) = IV xor AES h ( p ) ( m )
donde p es la contraseña, IV es el IV y m es el primer bloque del texto plano (los primeros 16 bytes) . Si desea crear una tabla precomputada, entonces esa función f es lo que debe evaluar para cada contraseña. La tabla resultante será aplicable solo a los casos que usen exactamente el mismo IV y exactamente el mismo primer bloque de texto simple conocido. Si la IV o el texto simple conocido es diferente, entonces no solo la tabla es una mala idea para romper una sola instancia, sino que también se convierte en una mala idea en general, ya que la tabla solo se podrá usar una vez.
Un punto crítico es la función h : el proceso mediante el cual una contraseña se convierte en una clave de cifrado. Si la función h es una adecuada hashing de contraseña La función , tiene un salt, que se genera una nueva para cada contraseña, y esto elimina completamente las tablas precalculadas, incluso si el IV y el mensaje se reutilizan exactamente.
Incluso si h es una función hash básica, rápida y sin sal (por ejemplo, una sola invocación de SHA-256), aún no puede reutilizar las tablas existentes (arco iris), porque no tiene acceso a la salida de hash; sólo tienes el texto cifrado. El paso de encriptación es suficiente para poner su contexto fuera de los contextos para los que ya existen tablas arco iris.
Por lo tanto, si desea implementar sus intentos de ruptura, deberá implementar algún mecanismo de fuerza bruta . Recorre la Web para recopilar implementaciones de AES y de la función h , cualquiera que sea la función hash. Póngalos juntos en algún código que pruebe contraseñas potenciales. Compilar, correr, ser paciente.
En cualquier caso, dicha fuerza bruta solo funciona en la medida en que la contraseña utilizada sea una de las contraseñas que pueda probar de manera plausible dentro de los límites de su paciencia. Si la clave AES no se deriva realmente de una contraseña, sino que se generó de forma aleatoria a partir de un PRNG criptográficamente seguro , olvídelo. No lo forzarás.
Lo que puede hacer depende del contexto. Por ejemplo, si tiene acceso a un dispositivo o sistema que realiza el cifrado con la clave que no conoce, pero en los datos que puede elegir (a selected-plaintext attack ), entonces la previsibilidad del IV (siempre es el mismo, en su descripción) le permite realizar una fuerza bruta en los datos (no en la clave), lo cual, Dependiendo de los datos, puede ser muy eficiente.