password-security-guideINFO

O Que e uma Rainbow Table? Como Quebra Hashes de Senhas e Por Que a Salga a Impede

Uma rainbow table e uma tabela pre-calculada de hashes que atacantes usam para reverter rapidamente hashes de senhas roubadas. Como funciona, por que um simples sal a torna inutil, e como difere de brute force e dictionary attack.

Por Eric Gerard · Editor · PwdFortress4 min de leituraPhoto: Pexels

Voce provavelmente ja leu que os sites armazenam sua senha como um "hash" em vez da coisa real. Entao como os atacantes que roubam esses hashes os transformam de volta em senhas? Uma das respostas mais antigas e engenhosas e a rainbow table - e entende-la tambem explica por que uma pequena tecnica, a salga, silenciosamente a derrota.

O que e uma rainbow table

Quando voce cria uma conta, um bom site nao armazena sua senha real. Ele armazena um hash: a saida de uma funcao de mao unica que embaralha a senha em uma cadeia de tamanho fixo, de um jeito que nao pode ser simplesmente revertido. Se alguem rouba o banco de dados, obtem os hashes, nao as senhas - e ainda precisa descobrir qual senha produziu cada hash.

Uma rainbow table e uma forma de fazer isso rapidamente. E uma consulta massiva e pre-calculada que liga os hashes de volta as senhas que os geraram. O atacante faz o custoso trabalho de hash com antecedencia, armazena de forma compacta, e depois apenas consulta cada hash roubado. Essa e toda a ideia: gastar armazenamento agora para economizar tempo depois.

Como o ataque funciona

Quebrar um hash por brute force significa gerar o hash de cada tentativa possivel ao vivo ate uma coincidir - correto, mas lento em grande escala. As rainbow tables aceleram isso com um truque de armazenamento engenhoso. Em vez de salvar cada hash, elas constroem longas cadeias de etapas alternadas de hash e "reducao" e armazenam apenas o inicio e o fim de cada cadeia. Isso mantem uma tabela que seria impossivelmente grande pequena o suficiente para ser util. Para quebrar um hash roubado, o atacante reconstroi a cadeia relevante e recupera a senha original.

Numeros verdes descendo por uma tela. As rainbow tables trocam grande armazenamento por velocidade, pre-calculando hashes para que os roubados possam ser consultados em vez de quebrados ao vivo.
Numeros verdes descendo por uma tela. As rainbow tables trocam grande armazenamento por velocidade, pre-calculando hashes para que os roubados possam ser consultados em vez de quebrados ao vivo.

Por que a salga as derrota

Aqui esta a parte importante, e a boa noticia. Uma rainbow table so funciona se uma determinada senha sempre produzir o mesmo hash. A defesa e um sal: um valor unico e aleatorio adicionado a cada senha antes de ela ser transformada em hash. Com sais por usuario, duas pessoas com a senha identica acabam com hashes completamente diferentes, e uma tabela pre-calculada nao tem valor - o atacante precisaria de uma rainbow table separada para cada sal possivel, o que nao e pratico.

Os sistemas modernos vao alem, combinando sais com funcoes de hash deliberadamente lentas como bcrypt, scrypt ou Argon2. O hash lento torna cara ate a adivinhacao ao vivo, e a salga elimina o atalho da pre-computacao. Juntas, elas tornam as rainbow tables uma ameaca sobretudo historica - perigosa contra sistemas antigos ou mal construidos que armazenam hashes sem sal, mas neutralizada por qualquer um que faca o armazenamento de senhas corretamente hoje.

Como se compara a outros ataques

Ajuda colocar as rainbow tables ao lado dos ataques com os quais sao frequentemente confundidas:

  • Brute force gera o hash de cada combinacao possivel ao vivo ate uma coincidir - lento, derrotado por senhas longas. Veja o que e um ataque de forca bruta.
  • Dictionary attack testa uma lista de senhas provaveis em vez de todas as combinacoes - mais rapido, derrotado por nao usar senhas comuns ou reutilizadas.
  • Credential stuffing repete pares reais de nome de usuario e senha vazados - derrotado por senhas unicas. Veja o que e credential stuffing.
  • Rainbow table pre-calcula o trabalho de hash e o consulta - derrotada especificamente pela salga.

O que isso significa para voce

Voce nao pode controlar como um site armazena seus hashes, e sites confiaveis ja usam sal e hash lento, o que barra as rainbow tables de imediato. O que voce pode controlar e a unica coisa que limita o dano quando um site erra: uma senha unica e longa em cada conta. Se um site armazena os hashes mal e suas senhas sao quebradas, uma senha que voce nao usou em nenhum outro lugar nao expoe nada alem daquela unica conta. Um gerenciador de senhas torna a geracao e o armazenamento dessas senhas unicas algo sem esforco, que e a licao pratica por tras de cada um desses ataques.

Perguntas frequentes

O que e uma rainbow table?

Uma rainbow table e uma tabela grande e pre-calculada que mapeia hashes de senhas de volta as senhas que os produziram. Os sites armazenam senhas como hashes em vez de texto simples, entao um atacante que rouba o banco de dados de hashes ainda precisa descobrir as senhas originais. Em vez de gerar o hash de cada tentativa na hora, uma rainbow table faz esse trabalho com antecedencia e armazena os resultados de forma compacta, para que o atacante possa consultar um hash roubado e encontrar a senha correspondente rapidamente. E uma troca classica de tempo por memoria: muito armazenamento adiantado em troca de quebra rapida depois.

Como funciona um ataque de rainbow table?

As senhas normalmente sao armazenadas como hashes - embaralhamentos de mao unica que nao podem ser simplesmente revertidos. Para quebra-los, um atacante precisa descobrir qual entrada produz um determinado hash. Calcular isso ao vivo para bilhoes de tentativas e lento, entao as rainbow tables pre-calculam longas cadeias de etapas de hash-e-reducao e armazenam apenas os extremos, o que mantem a tabela pequena o suficiente para ser pratica. Dado um hash roubado, o atacante reconstroi a cadeia relevante para recuperar a senha original. O detalhe e que isso so funciona contra hashes que nao foram salgados individualmente.

Como se defender contra rainbow tables?

Com um sal. Um sal e um valor unico e aleatorio adicionado a cada senha antes de ela ser transformada em hash, de modo que dois usuarios com a mesma senha obtenham hashes completamente diferentes. Como uma rainbow table e pre-calculada para entradas sem sal, um sal por usuario a torna inutil - o atacante precisaria de uma tabela separada para cada sal possivel, o que nao e viavel. O armazenamento moderno de senhas combina sais por usuario com funcoes de hash deliberadamente lentas como bcrypt, scrypt ou Argon2, que juntas tornam as rainbow tables uma ameaca em grande parte historica, e nao atual.

Rainbow table vs brute force vs dictionary attack - qual a diferenca?

As tres tentam recuperar senhas a partir de hashes, mas de formas diferentes. Um ataque de brute force calcula o hash de cada combinacao possivel ao vivo ate uma coincidir - completo, mas lento. Um dictionary attack testa uma lista de senhas provaveis (palavras comuns e senhas vazadas) em vez de todas as combinacoes. Uma rainbow table pre-calcula o trabalho de hash com antecedencia e consulta as respostas, trocando armazenamento por velocidade. A salga derrota especificamente as rainbow tables, porque quebra a suposicao de que a mesma senha sempre gera o mesmo hash.

Ainda devo me preocupar com rainbow tables?

Para suas proprias contas, de forma indireta. Voce nao pode controlar como um site armazena seus hashes, e sites bem administrados ja usam sal e hashes lentos, o que neutraliza as rainbow tables. O que voce pode controlar e usar uma senha unica e longa em cada site, para que, mesmo que um site armazene os hashes mal e seja quebrado, a senha exposta nao libere mais nada. Um gerenciador de senhas torna isso pratico.