Una tabla rainbow es una optimización para invertir funciones hash: encontrar la contraseña cuando todo lo que tienes es su hash. Aunque esto no es estrictamente necesario aquí, recomiendo leer What are rainbow tables and how are they used?, que tiene una muy buena explicación que borra algunos conceptos erróneos comunes.
Hay dos partes para el cifrado RAR (o casi cualquier cosa que use una contraseña para cifrar algunos datos). Primero, una clave de cifrado se deriva de la contraseña, utilizando un key derivation function (KDF). Luego, la clave de cifrado se utiliza para cifrar o descifrar los datos.
Incluso si el KDF es una función hash, una tabla rainbow no ayudaría: el atacante no tiene la salida del KDF. Cuando se usa una contraseña para autenticación, la salida de KDF es lo que está almacenado en la base de datos. Cuando se utiliza una contraseña para el cifrado, la salida de KDF es la clave secreta, que es lo que persigue el atacante.
En cualquier caso, rainbow tables only help against unsalted hashes. WinRAR uses a good KDF (PBKDF2) que incluye una sal.
A KDF transforma una cadena de longitud variable en una clave de tamaño fijo. Una propiedad clave de un KDF es que debe diferenciar las cadenas de entrada del mapa con claves distintas. Un cryptographic hash function (SHA-1, SHA-256, ...) logra esto. Cuando la cadena de entrada es una contraseña proporcionada humana, hay otras dos propiedades importantes que una función hash no alcanza por sí solo:
- Si dos personas eligen la misma contraseña, no debe llegar a tener el mismo llave.
- El KDF debe ser lento para calcular, de modo que un atacante no pueda encontrar la contraseña por fuerza bruta.
Una sal logra la primera propiedad. La segunda propiedad se logra haciendo algo como esto: tomar la contraseña, agregar la sal, cortar el lote; toma este hash, agrega la sal, hash el lote; repite muchas veces
Una tabla de arcoiris es una optimización para calcular preimágenes a través de funciones "unidireccionales": funciones que son fáciles de calcular en una dirección pero casi imposible de invertir, es decir, dado x es fácil de calcular y = f (x) pero dado que no hay un método conocido para encontrar x tal que y = f (x) aparte de adivinar x y verificar. Las funciones hash son así. La encriptación con una clave simétrica no es así: el atacante no puede calcular f más de lo que puede calcular su inversa. Por lo tanto, las tablas de arco iris no pueden ayudar a romper el cifrado simétrico.
Porque 'Hashing! = Encryption' – NullUserException