Pular para o conteudo
Central da TI
inovacao

O que é função hash? Entenda matemática que transforma dados em códigos

Por Kuraiq6 min de leitura
Compartilhar:
O que é função hash? Entenda matemática que transforma dados em códigos

Resumo em 30 segundos

Entenda o que são funções hash, como funcionam os principais algoritmos e onde elas aparecem no desenvolvimento de software além da criptografia

Neste artigo

Um desenvolvedor júnior pergunta por que usamos MD5 para verificar integridade de arquivos , e essa pergunta simples esconde um dos conceitos mais fundamentais da computação moderna. Se você já baixou um arquivo grande e ficou na dúvida se ele chegou íntegro, ou se já se perguntou como sites protegem senhas sem precisar armazená-las em texto puro, a resposta passa inevitavelmente pelas funções hash.

O que é uma função hash, afinal?

Uma função hash é um algoritmo matemático que recebe qualquer quantidade de dados como entrada e produz uma sequência de caracteres de tamanho fixo como saída. Não importa se você passou uma palavra de três letras ou um arquivo de vídeo de 10 GB: o resultado sempre terá o mesmo comprimento, determinado pelo algoritmo escolhido.

A analogia mais precisa é a de uma impressão digital digital. Assim como a sua digital é única e reproduzível , ela é sempre a mesma, independentemente de quantas vezes você a coleta , , uma função hash sempre gera o mesmo resultado para os mesmos dados de entrada. Mude um único caractere do texto original e o hash muda completamente. Essa propriedade tem nome técnico: efeito avalanche.

Três características definem uma boa função hash:

  • Determinismo: a mesma entrada sempre gera a mesma saída.

  • Rapidez computacional: o cálculo deve ser eficiente independentemente do tamanho da entrada.

  • Resistência a colisões: dois inputs diferentes não devem gerar o mesmo hash , ou, quando isso acontece, deve ser extremamente difícil de provocar intencionalmente.

Os principais algoritmos: MD5, SHA-1 e SHA-256

Nem todo algoritmo hash é igual, e escolher o errado para o contexto errado pode comprometer um sistema inteiro.

MD5

O MD5 produz um hash de 128 bits, geralmente representado por 32 caracteres hexadecimais. Durante anos foi amplamente usado para verificação de integridade de arquivos. O problema: pesquisadores demonstraram ser possível criar colisões intencionais com o MD5 , ou seja, gerar dois arquivos diferentes que produzem o mesmo hash. Por isso, ele não deve ser usado para fins de segurança ou autenticação. Para verificar se um arquivo baixado está íntegro, ainda funciona razoavelmente bem. Para proteger senhas? Jamais.

SHA-1

O SHA-1 foi o sucessor do MD5 e produzia hashes de 160 bits. Por anos foi padrão em certificados SSL e assinaturas digitais. Em 2017, o Google demonstrou publicamente o primeiro ataque de colisão prático contra o SHA-1, conhecido como SHAttered. Desde então, a indústria migrou em massa para versões mais robustas.

SHA-256 e a família SHA-2

O SHA-256 produz um hash de 256 bits e, até o momento, não existem ataques de colisão práticos documentados contra ele. É o padrão atual para verificação de integridade, certificados digitais e, sim, também é o algoritmo usado no mecanismo de prova de trabalho do Bitcoin. Quando um site fornece o hash SHA-256 de um arquivo para download, você pode calculá-lo localmente e comparar: se os valores forem idênticos, o arquivo chegou sem alterações.

Onde o hash aparece no cotidiano do desenvolvimento

A teoria é importante, mas o valor real das funções hash está nas aplicações práticas. Elas aparecem em lugares que muitos desenvolvedores nem percebem.

Verificação de integridade de arquivos

Esse é o caso de uso mais imediato. Você baixa um arquivo de 2 GB, calcula o hash localmente e compara com o valor fornecido pelo servidor original. Se os hashes baterem, o arquivo está íntegro. Se diferir em um único bit, algo aconteceu no caminho , seja corrupção de dados, seja, em cenários mais graves, adulteração intencional.

Armazenamento seguro de senhas

Nenhum sistema bem projetado armazena senhas em texto puro. O que os bancos de dados guardam é o hash da senha , geralmente combinado com um valor aleatório chamado salt, que previne ataques de tabela arco-íris. Quando você faz login, o sistema aplica a mesma função hash à senha que você digitou e compara o resultado com o que está armazenado. A senha original nunca fica registrada em lugar nenhum.

Otimização de cache e consultas

Um uso menos óbvio, mas extremamente poderoso: transformar queries complexas em hashes e usá-los como chaves de cache. Em vez de armazenar a query SQL completa como identificador, você armazena seu hash , um string curto e de tamanho fixo. Isso reduz o custo de comparação de chaves e pode acelerar significativamente a performance de sistemas que fazem muitas consultas repetidas ao banco de dados.

Hash tables e indexação

As famosas tabelas hash , que você conhece como dicionários em Python, objetos em JavaScript ou HashMaps em Java , são estruturas de dados que usam funções hash para mapear chaves a posições de memória. O resultado é uma busca com complexidade média O(1), ou seja, quase instantânea, independentemente do tamanho da coleção. Sem hashing, procurar um produto específico em um catálogo de dezenas de milhares de itens exigiria percorrer todos eles sequencialmente.

Deduplicação de conteúdo

Grandes plataformas de armazenamento e streaming usam hashing para identificar conteúdo duplicado. A lógica é simples: se dois arquivos têm o mesmo hash criptográfico, são idênticos , não há necessidade de armazenar duas cópias. Serviços de armazenamento em nuvem aplicam essa técnica antes mesmo do upload: calculam o hash do arquivo no cliente e verificam se aquele hash já existe nos servidores. Se existir, o upload nem precisa acontecer.

Limitações e armadilhas que todo desenvolvedor deve conhecer

Funções hash não são bala de prata. Existem contextos em que usá-las de forma ingênua pode criar vulnerabilidades sérias.

  • Hashes rápidos são ruins para senhas: algoritmos como MD5 e SHA-256 foram projetados para ser rápidos. Para senhas, isso é um problema: um atacante com hardware adequado consegue testar bilhões de combinações por segundo. Para armazenar senhas, use funções especificamente projetadas para ser lentas, como bcrypt, scrypt ou Argon2.

  • Colisões existem e importam: toda função hash tem colisões teóricas , afinal, infinitos inputs precisam mapear para um espaço finito de outputs. O que diferencia algoritmos seguros dos inseguros é a dificuldade de encontrar essas colisões intencionalmente.

  • Hash não é criptografia: funções hash são operações de mão única , você não pode recuperar os dados originais a partir do hash. Isso é intencional e útil para senhas, mas significa que hash e criptografia são ferramentas diferentes para finalidades diferentes.

Por que entender hashing é fundamental hoje

Sistemas distribuídos, microsserviços e arquiteturas orientadas a eventos, o hashing aparece em cada vez mais camadas do stack: na distribuição de carga entre servidores (consistent hashing), na identificação de commits no Git, na geração de tokens de autenticação e na estrutura de dados por trás de blockchains. Não é um conceito restrito a especialistas em criptografia , é parte do vocabulário básico de qualquer desenvolvedor que lida com dados, performance ou segurança.

A próxima vez que você precisar decidir entre armazenar um dado inteiro ou apenas sua representação única e compacta, ou quando quiser garantir que uma informação não foi alterada no caminho, a função hash provavelmente é a ferramenta certa. A pergunta que fica é: em qual parte do sistema que você mantém hoje o hashing poderia estar sendo subutilizado.

Compartilhar:

Leia tambem

Usamos cookies próprios para medir o uso do site (métricas anônimas, sem vender dados). Você pode aceitar ou recusar.