# Tabela arco-íris

Uma tabela arco-íris (do inglês rainbow table) é uma tabela pré-computada para reverter funções hash criptográficas, geralmente para quebrar hashes de senhas. As tabelas são geralmente usadas na recuperação de uma senha (ou números de cartão de crédito, etc.) até um determinado comprimento, que consiste em um conjunto limitado de caracteres. É um exemplo prático de uma troca de espaço-tempo, usando menos tempo de processamento do computador e mais armazenamento do que um ataque de força bruta, que calcula um hash a cada tentativa, mas mais tempo de processamento e menos armazenamento do que uma tabela de pesquisa simples com uma entrada por hash. O uso de uma função de derivação de chave que emprega um sal torna esse ataque inviável.
As tabelas do arco-íris foram inventadas por Philippe Oechslin como uma aplicação de um algoritmo anterior mais simples de Martin Hellman.
É utilizada normalmente para que um ataque contra senhas digeridas seja possível.

## Pano de fundo

Qualquer sistema de computador que exija autenticação por senha deve conter um banco de dados de senhas, ofuscadas ou em texto puro, e existem vários métodos de armazenamento de senhas. Como as tabelas são vulneráveis ​​a roubo, o armazenamento da senha em texto simples é perigoso. Portanto, a maioria dos bancos de dados armazena um hash criptográfico da senha de um usuário no banco de dados. Nesse sistema, ninguém - incluindo o sistema de autenticação - pode determinar qual é a senha de um usuário apenas olhando o valor armazenado no banco de dados. Em vez disso, quando um usuário digita uma senha para autenticação, o sistema calcula o valor do hash para a senha fornecida e esse valor é comparado ao hash armazenado para esse usuário. A autenticação é bem-sucedida se os dois hashes corresponderem.
Depois de coletar um hash de senha, o uso do referido hash como senha falharia, pois o sistema de autenticação calcularia o hash uma segunda vez. Para aprender a senha de um usuário, uma senha que produz o mesmo valor de hash deve ser encontrada, geralmente por meio de um ataque de força bruta ou de dicionário.
As tabelas arco-íris são um tipo de ferramenta desenvolvida para derivar uma senha, observando apenas um valor de hash. Elas nem sempre são necessárias, pois existem métodos mais simples de reversão de hash disponíveis. Ataques de força bruta e ataques de dicionário são os métodos mais diretos disponíveis. No entanto, eles não são adequados para sistemas que usam senhas longas devido à dificuldade de armazenar todas as opções disponíveis e pesquisar em um banco de dados tão extenso para executar uma pesquisa inversa de um hash.
Para resolver esse problema de escala, foram geradas tabelas de pesquisa inversa que armazenavam apenas uma seleção menor de hashes que, quando revertidos, poderiam gerar longas cadeias de senhas. Embora a pesquisa inversa de um hash em uma tabela encadeada leve mais tempo computacional, a própria tabela de pesquisa pode ser muito menor, portanto, os hashes de senhas mais longas podem ser armazenados. As tabelas arco-íris são um refinamento dessa técnica de encadeamento e fornecem uma solução para um problema chamado colisão de cadeias.