Você provavelmente já leu que os sites armazenam sua senha como um "hash" em vez da coisa real. Então como os atacantes que roubam esses hashes os transformam de volta em senhas? Uma das respostas mais antigas e engenhosas é a rainbow table - e entendê-la também explica por que uma pequena técnica, a salga, silenciosamente a derrota.
O que é uma rainbow table
Quando você cria uma conta, um bom site não armazena sua senha real. Ele armazena um hash: a saída de uma função de mao única que embaralha a senha em uma cadeia de tamanho fixo, de um jeito que não pode ser simplesmente revertido. Se alguém rouba o banco de dados, obtém os hashes, não as senhas - e ainda precisa descobrir qual senha produziu cada hash.
Uma rainbow table é uma forma de fazer isso rapidamente. É uma consulta massiva e pré-calculada que liga os hashes de volta às senhas que os geraram. O atacante faz o custoso trabalho de hash com antecedência, armazena de forma compacta, e depois apenas consulta cada hash roubado. Essa é 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 possível ao vivo até 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 "redução" e armazenam apenas o início e o fim de cada cadeia. Isso mantém uma tabela que seria impossivelmente grande pequena o suficiente para ser útil. Para quebrar um hash roubado, o atacante reconstrói a cadeia relevante e recupera a senha original.

Por que a salga as derrota
Aqui está a parte importante, e a boa notícia. Uma rainbow table só funciona se uma determinada senha sempre produzir o mesmo hash. A defesa é um sal: um valor único e aleatório adicionado a cada senha antes de ela ser transformada em hash. Com sais por usuário, duas pessoas com a senha idêntica acabam com hashes completamente diferentes, e uma tabela pré-calculada não tem valor - o atacante precisaria de uma rainbow table separada para cada sal possível, o que não é prático.
Os sistemas modernos vão além, combinando sais com funcoes de hash deliberadamente lentas como bcrypt, scrypt ou Argon2. O hash lento torna cara até a adivinhação ao vivo, e a salga elimina o atalho da pré-computação. Juntas, elas tornam as rainbow tables uma ameaça sobretudo histórica - 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 são frequentemente confundidas:
- Brute force gera o hash de cada combinacao possível ao vivo até uma coincidir - lento, derrotado por senhas longas. Veja o que é um ataque de força bruta.
- Dictionary attack testa uma lista de senhas prováveis em vez de todas as combinacoes - mais rápido, derrotado por não usar senhas comuns ou reutilizadas. Ver o que é um ataque de dicionário.
- Credential stuffing repete pares reais de nome de usuário e senha vazados - derrotado por senhas únicas. Veja o que é credential stuffing.
- Rainbow table pré-calcula o trabalho de hash e o consulta - derrotada especificamente pela salga.
O que isso significa para você
Você não pode controlar como um site armazena seus hashes, e sites confiáveis já usam sal e hash lento, o que barra as rainbow tables de imediato. O que você pode controlar é a única coisa que limita o dano quando um site erra: uma senha única e longa em cada conta. Se um site armazena os hashes mal e suas senhas são quebradas, uma senha que você não usou em nenhum outro lugar não expoe nada além daquela única conta. Um gerenciador de senhas torna a geração e o armazenamento dessas senhas únicas algo sem esforço, que é a lição prática por trás de cada um desses ataques.
★ Audit Cure53 2024 · ✓ Plan gratuit · Cross-platform
Proteja as suas contas → NordPassPalavras-passe fortes e únicas · scanner de fugas · plano gratuito→Perguntas frequentes
O que é uma rainbow table?
Uma rainbow table é uma tabela grande e pré-calculada que mapeia hashes de senhas de volta às senhas que os produziram. Os sites armazenam senhas como hashes em vez de texto simples, então 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 antecedência e armazena os resultados de forma compacta, para que o atacante possa consultar um hash roubado e encontrar a senha correspondente rapidamente. É uma troca clássica de tempo por memória: muito armazenamento adiantado em troca de quebra rápida depois.
Como funciona um ataque de rainbow table?
As senhas normalmente são armazenadas como hashes - embaralhamentos de mao única que não 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 é lento, então as rainbow tables pre-calculam longas cadeias de etapas de hash-e-redução e armazenam apenas os extremos, o que mantém a tabela pequena o suficiente para ser prática. Dado um hash roubado, o atacante reconstrói a cadeia relevante para recuperar a senha original. O detalhe é que isso só funciona contra hashes que não foram salgados individualmente.
Como se defender contra rainbow tables?
Com um sal. Um sal é um valor único e aleatório adicionado a cada senha antes de ela ser transformada em hash, de modo que dois usuários com a mesma senha obtenham hashes completamente diferentes. Como uma rainbow table é pré-calculada para entradas sem sal, um sal por usuário a torna inútil - o atacante precisaria de uma tabela separada para cada sal possível, o que não é viável. O armazenamento moderno de senhas combina sais por usuário com funcoes de hash deliberadamente lentas como bcrypt, scrypt ou Argon2, que juntas tornam as rainbow tables uma ameaça em grande parte histórica, e não atual.
Rainbow table vs brute force vs dictionary attack - qual a diferença?
As tres tentam recuperar senhas a partir de hashes, mas de formas diferentes. Um ataque de brute force calcula o hash de cada combinacao possível ao vivo até uma coincidir - completo, mas lento. Um dictionary attack testa uma lista de senhas prováveis (palavras comuns e senhas vazadas) em vez de todas as combinacoes. Uma rainbow table pré-calcula o trabalho de hash com antecedência 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. Você não pode controlar como um site armazena seus hashes, e sites bem administrados já usam sal e hashes lentos, o que neutraliza as rainbow tables. O que você pode controlar é usar uma senha única e longa em cada site, para que, mesmo que um site armazene os hashes mal e seja quebrado, a senha exposta não libere mais nada. Um gerenciador de senhas torna isso prático.



