# Tabla arcoíris

Las tablas arcoíris o tablas Rainbow son tablas de consulta que ofrecen un compromiso espacio-tiempo para obtener claves en texto simple a partir del resultado de una función de hash.

## Antecedentes

Cualquier sistema informático que requiera una autenticación por contraseña debe contener una base de datos de contraseñas, ya sea ordenada o en texto plano, y existen diversos métodos para el almacenamiento de dichas contraseñas. Debido a que las tablas son vulnerables al robo, el almacenamiento de la contraseña en texto llano es peligroso. Por lo tanto, la mayoría de las bases de datos almacenan un hash criptográfico de la contraseña del usuario en la base de datos. En un entorno así, nadie, incluyendo la propia autenticación de sistema puede determinar cual es la contraseña del usuario simplemente observando el valor almacenado en la base de datos. En cambio, cuando un usuario introduce su contraseña para autenticarse, se calcula el hash de la contraseña introducida y se compara con el valor almacenado para ese usuario (que fue hash antes de ser almacenado). Si los dos valores hash coinciden, se concede el acceso.
Una persona que tenga acceso a la tabla de contraseñas no puede simplemente copiar la entrada de la base de datos del usuario para obtener acceso (utilizar el hash como una contraseña sería, por supuesto, un error ya que el sistema de autenticación haría un hash por segunda vez, produciendo un resultado que no coincide con el valor almacenado). Con el fin de obtener la contraseña de un usuario, hay que encontrar una contraseña que produce el mismo valor hash.
Las tablas arcoíris son una herramienta que se ha desarrollado en un esfuerzo por obtener una contraseña mirando solamente a un valor hash.
Las tablas de arcoíris no siempre son necesarias, ya que existen métodos más simples de reversión de hash disponible. Como ataques de fuerza bruta y ataques de diccionario que son los métodos más simples disponibles, sin embargo, estos no son adecuados para sistemas que utilizan contraseñas largas, debido a la dificultad de almacenar todas las opciones disponibles.
Para abordar esta cuestión de la escala, se generaron tablas de búsqueda inversa que almacena sólo una pequeña selección de los hashes que cuando se invierte podría generar contraseñas de cadenas largas de texto. Aunque la búsqueda inversa de un hash en una tabla encadenada llevará más tiempo de cálculo, el tiempo de búsqueda en la tabla en sí misma puede ser mucho menor, por lo que los hashes de las contraseñas más largas se pueden almacenar.
Las tablas arcoíris son un refinamiento de esta técnica de encadenamiento y proporcionan una solución a un problema llamado «colisiones en cadena».

## Hash

Hash es una función que se aplica a un archivo de cualquier tipo, ya sea documentos, fotos, música, etc. de la cual se obtiene una clave que representa de manera única a ese archivo.
Las funciones hash criptográficas se utilizan mucho en las descargas de Internet para comprobar la integridad de un archivo, es decir, poder comprobar si en la descarga del fichero ha habido algún tipo de error. Para ello se comprueba que el hash obtenido del fichero descargado sea igual al original en el servidor (normalmente los autores de los archivos suelen indicarlo).

## Funcionamiento

A continuación se explica mediante un ejemplo el funcionamiento de las tablas arcoíris. Se desea averiguar cual es la contraseña que produce el hash «re3xes»
* Primero se aplica la reducción (aplicar una función hash pero en sentido contrario) que se utilizó por última vez en la tabla y comprobar si la contraseña obtenida aparece en la última columna de la tabla (paso 1).
* Si no resulta (en este caso, rambo no aparece en la tabla) se repite el proceso, pero ahora con las dos últimas reducciones (paso 2).
    Si en este proceso se fallara de nuevo, se repetiría el proceso pero aplicando 3 reducciones, después 4 y así hasta que se encuentre la contraseña. De no ser así, el ataque habría fracasado.
* Si el proceso ha sido positivo (paso 3, en este caso linux23 aparece en la tabla al final de la cadena), la contraseña se recupera en el principio de la cadena que produce linux23. Aquí nos encontramos con passwd al principio de la cadena almacenada en la tabla.
* En este punto (paso 4) se genera una cadena y en cada iteración se compara el hash con el que queremos obtener. En este caso nos encontramos con el hash re3xes en la cadena. Por tanto la contraseña actual «culture» genera este hash que es la que se busca.
Es importante saber que las tablas arcoíris se crean a partir de una función de hash específica, por ejemplo, para romper los hashes de MD5 necesitaremos unas tablas arcoíris basadas en hashes de MD5 y para SHA, tablas arcoíris SHA.
Esta técnica fue desarrollada por Philippe Oechslin como un método basado en el compromiso espacio-tiempo o tiempo-memoria.

## Aplicaciones

Los programas que utilizan las tablas arcoíris siempre han de utilizarse como auditoría de tus contraseñas en lo que se llama hacking ético.
Un ejemplo de herramienta que utiliza estas tablas es el programa Ophcrack, el cual permite crackear las contraseñas de Windows. Para evitar que aplicaciones como esta no rompan contraseñas tan fácilmente, es aconsejable utilizar Salts.

## Salts

En criptografía, se denomina salt a un fragmento aleatorio (caracteres, números...) que se añade a un hash para conseguir que si dos usuarios generan una misma contraseña, su hash no sea idéntico y con ello evitar problemas de seguridad.
Los salts también ayudan contra las tablas arcoíris al extender la longitud y con ello la complejidad de la contraseña.