Una tabla arcoíris (rainbow table) es una estructura de datos precalculada que permite recuperar contraseñas a partir de hashes sin sal mucho más rápido que calculando cada hash durante el ataque.
Cómo funcionan las tablas arcoíris
Descifrar un hash suele implicar probar contraseñas candidatas hasta que una coincide. Guardar una tabla con todas las contraseñas y sus hashes sería rápido, pero exigiría un almacenamiento enorme. Las tablas arcoíris, presentadas por Philippe Oechslin en 2003 a partir de la compensación tiempo-memoria de Martin Hellman de 1980, encuentran un término medio:
- La tabla se compone de cadenas: una contraseña se convierte en hash, una «función de reducción» transforma ese hash en una nueva candidata, que vuelve a pasar por la función, y así miles de veces.
- Solo se guardan el primer y el último valor de cada cadena, lo que ahorra muchísimo espacio.
- Para descifrar un hash, el atacante recalcula la cadena a partir de él, busca un punto final coincidente y regenera la cadena para hallar la contraseña.
Cada tabla sirve solo para un algoritmo de hash y un conjunto de caracteres y longitud definidos. Herramientas como RainbowCrack y Ophcrack popularizaron el método, sobre todo contra los hashes LM y NTLM de Windows, que no llevan sal.
Por qué son importantes
Frente a hashes rápidos sin sal como MD5, SHA-1 o NTLM, las tablas arcoíris reducen el tiempo de descifrado de contraseñas cortas de días a minutos. Muchas brechas antiguas de sitios web expusieron precisamente ese tipo de hashes. Hoy los ataques de diccionario con GPU y Hashcat suelen ser más rápidos y flexibles, pero las tablas arcoíris siguen ilustrando por qué importa cómo se almacenan los hashes.
Cómo protegerse
- Añadir una sal aleatoria y única a cada contraseña antes de calcular el hash: así las tablas precalculadas resultan inútiles.
- Usar algoritmos específicos para contraseñas como Argon2, bcrypt, scrypt o PBKDF2.
- Desactivar los hashes LM heredados y reducir la dependencia de NTLM.
- Exigir contraseñas o frases de contraseña largas.





