Segurança

O que é uma função hash e o que ela não pode fazer

Uma impressão digital de tamanho fixo para qualquer quantidade de dados: serve exatamente para três coisas, e não serve para uma quarta que as pessoas insistem em tentar.

Uma função hash recebe qualquer entrada — uma única letra, uma imagem de disco de 4 GB, um arquivo vazio — e devolve uma string de tamanho fixo chamada digest. A mesma entrada sempre dá o mesmo digest. Uma entrada diferente dá um digest completamente diferente. E não existe jeito de rodar a função ao contrário para tirar a entrada de volta. É essa a ideia toda: uma impressão digital curta e estável que identifica os dados sem contê-los.

Dê a palavra hash ao SHA-256 e você recebe 64 caracteres hexadecimais. Dê a ele as obras completas de Shakespeare e você recebe 64 caracteres hexadecimais. Não dê nada a ele e você ainda recebe 64 caracteres hexadecimais, todos diferentes entre si.

O que diferencia uma função hash de qualquer outra função

Cinco propriedades, e as duas últimas são as que separam um hash criptográfico de um hash barato:

A propriedade de avalanche fica mais fácil de acreditar depois que você vê. Digite uma frase no gerador de hash daqui, mude uma letra e todo digest da página é substituído por inteiro. Os cinco algoritmos também discordam completamente uns dos outros, o que vale a pena ver antes de você passar uma tarde se perguntando por que o seu checksum não bate com o de outra pessoa.

Por que dois arquivos podem compartilhar um hash, e por que isso não é problema

Existem infinitas entradas possíveis e exatamente 2256 digests SHA-256 possíveis. Colisões não são uma falha de design; são uma certeza matemática. A afirmação de segurança é mais estreita e mais estranha: colisões existem, e ninguém consegue encontrar uma.

Para o SHA-256 o número relevante não é 2256 e sim mais ou menos 2128, o ponto em que o problema do aniversário dá uma chance de cinquenta por cento de dois digests aleatórios colidirem. São cerca de 340 undecilhões de tentativas. Não é um número que alguém alcance.

O que importa na prática é a diferença entre dois tipos de quebra. Uma colisão significa que um atacante constrói duas entradas com o mesmo digest e escolhe as duas, o que serve para enfiar um segundo documento por baixo de uma assinatura. Uma pré-imagem significa que ele parte de um digest que você já tem e encontra algo que bate com ele. Colisões são bem mais fáceis de achar, e é por isso que MD5 e SHA-1 caíram por ataques de colisão muito antes de alguém chegar perto de uma pré-imagem em qualquer um dos dois.

Para que as pessoas realmente usam hashes

Fora isso, o "hash" de tabela hash quer dizer algo relacionado, mas bem mais fraco. Essas funções existem para espalhar chaves pelos buckets de forma rápida e uniforme, e são trivialmente reversíveis por design. Nunca recorra a uma delas quando você precisar das garantias criptográficas acima, e nunca recorra ao SHA-256 para indexar um dicionário.

O que um hash não é

Não é criptografia

Criptografia é uma viagem de ida e volta: uma chave transforma o texto puro em texto cifrado e a mesma chave o transforma de volta. O hashing não tem chave nem caminho de volta. O digest de um arquivo de 4 GB tem 32 bytes, ou seja, quase toda a informação foi jogada fora, não escondida. Se você precisa ler os dados de novo mais tarde, o que você queria era criptografia com uma senha, não um digest. Quem "passa um hash" numa mensagem para mandá-la em segredo apenas destruiu a mensagem.

Não torna privado um dado pequeno e previsível

Calcular o hash de um endereço de e-mail, de um número de telefone ou de um número de documento de identidade não anonimiza nada. O atacante não precisa reverter coisa alguma: ele calcula o hash de todos os valores possíveis e procura o seu. A quantidade de números de telefone é limitada. Tabelas pré-computadas deixam isso ainda mais barato. Um hash só esconde uma entrada que já era impossível de adivinhar desde o começo.

É a ferramenta errada para guardar senhas sozinha

Um SHA-256 puro de uma senha é rápido de calcular, e é exatamente esse o problema: uma GPU moderna testa bilhões de candidatas por segundo. Guardar senhas exige um salt por usuário, para que uma tabela só não consiga atacar todas as contas de uma vez, e uma função feita de propósito para ser lenta. bcrypt, scrypt e Argon2 — este último escolhido pela Password Hashing Competition em 2015 — são as que devem ser usadas. Nenhum dos cinco algoritmos da ferramenta acima tem lugar perto de um banco de dados de senhas.

Qual algoritmo você deve usar?

AlgoritmoDigestVeredito
SHA-25664 caracteres hexO padrão. Nenhum ataque prático conhecido.
SHA-512128 caracteres hexMesma família, palavras de 64 bits. Costuma ser mais rápido em hardware de 64 bits.
SHA-3variaUm design interno diferente, padronizado em 2015. Um seguro, não um upgrade.
SHA-140 caracteres hexColisões demonstradas pelo CWI Amsterdam e pelo Google em 2017. Não use para assinaturas.
MD532 caracteres hexColisões desde 2004, segundos em um notebook. Só para checksums legados.

Escolha SHA-256 a menos que algo obrigue você a outra coisa. O NIST anunciou em dezembro de 2022 que o SHA-1 deve sair de uso até o fim de 2030, e o prazo é generoso: ele já está impróprio para assinaturas há anos. MD5 e SHA-1 ainda pegam um download corrompido, porque ninguém tem um ataque de pré-imagem prático contra nenhum dos dois, e continuam não oferecendo proteção nenhuma contra quem controlava o arquivo desde o início.

O que um checksum que bate realmente prova

Ele prova que os bytes que você tem são os bytes que quem publicou aquele checksum estava descrevendo. Isso é menos do que parece. Se o link de download e o checksum estão na mesma página, um atacante que trocou o arquivo trocou o número embaixo dele na mesma edição. Você verificou o arquivo contra ele mesmo.

Autenticidade de verdade exige uma assinatura: um digest assinado com uma chave em que você já confia, conferido com algo como gpg --verify. O hash continua fazendo o trabalho ali dentro — assinar 32 bytes é barato onde assinar um gigabyte não é — mas a confiança vem da chave, não do digest. Um checksum sozinho é uma verificação de consistência. Trate-o como tal e ele é genuinamente útil.

Se você quer ver isso tudo em vez de aceitar de fé, o gerador de hash produz os cinco digests de uma vez para texto ou para um arquivo, e aceita um checksum publicado para comparar, assim você não precisa ler 64 caracteres hexadecimais em duas telas. Nada é enviado: o arquivo é lido e hasheado na sua própria máquina.

A propriedade de mão única só vale quando a entrada era impossível de adivinhar, o que transforma "dá para reverter esse hash?" em uma pergunta completamente diferente sobre quantas candidatas um atacante consegue testar. Quanto tempo levaria para quebrar sua senha percorre a aritmética, e a distância entre o melhor e o pior caso é maior do que a maioria imagina.

Perguntas frequentes

O que é uma função hash em termos simples?

É uma função que transforma qualquer quantidade de dados em uma string curta e de tamanho fixo chamada digest. A mesma entrada sempre dá o mesmo digest, e mudar um único caractere da entrada muda o digest inteiro. Você não consegue voltar do digest para os dados originais.

Qual é a diferença entre hashing e criptografia?

Criptografia é reversível: uma chave transforma os dados em texto cifrado e os transforma de volta. O hashing é de mão única e não tem chave, então os dados originais não podem ser recuperados de jeito nenhum. Use criptografia quando precisar ler os dados depois, e hashing quando só precisar conferir se duas coisas são idênticas.

Dá para reverter um hash?

Não diretamente. Um digest tem o mesmo tamanho não importa o tamanho da entrada, então a maior parte da informação não existe mais. Os sites de consulta parecem reverter hashes porque calculam de antemão o hash de bilhões de entradas prováveis e procuram uma correspondência, o que funciona contra valores curtos ou comuns e falha completamente contra valores longos e aleatórios.

Qual algoritmo de hash eu devo usar?

SHA-256, a menos que você tenha um motivo específico para não usar. Ele é rápido, está disponível em toda linguagem e navegador, e não tem nenhum ataque prático contra ele. SHA-512 é uma alternativa razoável e costuma ser mais rápido em hardware de 64 bits apesar da saída mais longa.

Por que o MD5 não é mais seguro?

Dois arquivos diferentes podem ser fabricados para produzir o mesmo digest MD5 em segundos com hardware comum, uma técnica publicada em 2004. Isso quebra qualquer uso em que um digest faz as vezes de um documento, como uma assinatura. O MD5 ainda detecta um download corrompido por acidente, porque encontrar uma entrada para um digest que você não escolheu continua impraticável.

É seguro guardar senhas com hash SHA-256?

Não. O SHA-256 foi feito para ser rápido, e uma placa de vídeo consegue testar bilhões de tentativas por segundo contra ele. Guardar senhas exige um salt por usuário e uma função deliberadamente lenta como bcrypt, scrypt ou Argon2.

Última atualização 19 de setembro de 2026