Gerador de Hash e HMAC
- MD5inseguro
- SHA-1inseguro
- SHA-256
- SHA-512
MD5 e SHA-1 estão quebrados e não devem ser usados para senhas ou assinaturas. Continuam adequados para checksums e chaves de cache.
Nada do que você digita aqui é armazenado, registrado ou compartilhado.
Digite ou cole um texto para ver seus hashes MD5, SHA-1, SHA-256 e SHA-512 de uma vez, ou mude para HMAC para assiná-lo com uma chave secreta. Tudo roda no seu navegador, então nem o texto nem a chave saem do seu dispositivo.
Como usar
- Cole seu texto no campo de entrada.
- Os quatro hashes são calculados conforme você digita.
- Copie qualquer hash com o botão ao lado dele.
O que um hash garante
Um hash criptográfico transforma uma entrada de qualquer tamanho num digest de tamanho fixo, de forma determinística: os mesmos bytes sempre dão o mesmo resultado, e um único bit alterado muda cerca de metade da saída. Três propriedades o tornam útil, e usos diferentes precisam de propriedades diferentes.
Resistência à pré-imagem significa que, dado um digest, não é possível encontrar uma entrada que o produza. Resistência à segunda pré-imagem significa que, dada uma entrada, não é possível encontrar outra entrada diferente com o mesmo digest. Resistência a colisões significa que não é possível encontrar quaisquer duas entradas que colidam, e é a mais fraca das três diante de ataques, porque o atacante escolhe os dois lados.
Essa última distinção é o motivo pelo qual um algoritmo quebrado não está igualmente quebrado para todo uso. Colisões de MD5 podem ser geradas em segundos, mas ninguém consegue inverter um digest MD5, então usar MD5 como chave de cache ou checksum sem adversário é aceitável, enquanto usá-lo como assinatura não é.
A situação de cada algoritmo
O MD5 é considerado quebrado desde 2004, e colisões de prefixo escolhido - em que o atacante cria dois documentos com conteúdos diferentes que geram o mesmo hash - hoje são baratas. Ele foi usado para forjar uma autoridade certificadora funcional em 2008 e pelo malware Flame em 2012. Use-o para checksums, ETags e chaves de cache; nunca para algo que um adversário ganharia ao subverter.
O SHA-1 veio em seguida. A primeira colisão prática foi demonstrada em 2017 com dois PDFs, e uma colisão de prefixo escolhido saiu em 2020 a um custo de dezenas de milhares de dólares. Os navegadores deixaram de aceitar certificados SHA-1 há anos, e o Git vem migrando para longe dele. Trate-o como um MD5 que durou um pouco mais.
SHA-256 e SHA-512 são os padrões atuais e não têm fraquezas práticas conhecidas. Ambos são da família SHA-2; o SHA-512 costuma ser mais rápido em hardware de 64 bits apesar da saída maior. O SHA-3 existe como reserva de estrutura diferente, e não como substituto, e o BLAKE3 vale ser conhecido quando a velocidade em arquivos grandes importa.
HMAC, e por que não simplesmente fazer hash da chave com a mensagem
Um hash simples não prova nada sobre quem o gerou, já que qualquer um pode calculá-lo. O HMAC acrescenta uma chave secreta, então um digest que confere mostra que o remetente conhecia a chave e que a mensagem não foi alterada. É isso que assina as entregas de webhook do Stripe, do GitHub e de todo mundo, e que autentica as requisições à API da AWS.
A construção intuitiva - fazer o hash da chave seguida da mensagem - é insegura na família SHA-2, porque essas são funções Merkle-Damgård e o digest é todo o seu estado interno. Um atacante com um digest válido pode retomar a partir desse estado e acrescentar dados, produzindo um digest válido para uma mensagem mais longa sem nunca conhecer a chave. A estrutura aninhada do HMAC, que faz hash duas vezes com duas chaves derivadas, é o que impede isso.
Um cuidado ao verificar: compare os digests em tempo constante. Uma comparação de strings comum retorna assim que encontra uma diferença, e essa diferença de tempo é mensurável com requisições suficientes, o que permite ao atacante recuperar a assinatura byte a byte. A maioria das linguagens oferece uma função específica para isso.
Hash não é criptografia, nem armazenamento de senhas
O hash é de mão única e não tem chave: não há nada para descriptografar nem como recuperar a entrada. Se você precisa dos dados de volta, o que você quer é criptografia, que é uma ferramenta totalmente diferente.
Para senhas, um hash rápido é exatamente a escolha errada. Velocidade é vantagem do atacante: hardware comum testa bilhões de palpites SHA-256 por segundo contra um banco roubado, e digests sem salt podem ser consultados diretamente em tabelas pré-calculadas. Armazenar senhas exige uma função propositalmente lenta e com uso intenso de memória, com salt por senha - bcrypt, scrypt ou Argon2id, que é a recomendação atual.
Há um uso indevido mais sutil que vale citar: fazer hash de um identificador para anonimizá-lo. Fazer hash de e-mails ou telefones não protege nada, porque o espaço de entradas possíveis é pequeno o bastante para ser enumerado. Qualquer um com o digest pode fazer hash de todos os endereços que tem e comparar. O hash de um valor de baixa entropia é uma chave de busca, não uma anonimização.
Verificando um download, passo a passo
Um checksum publicado responde a uma única pergunta: os bytes que recebi são os mesmos que o publicador tinha? Calcule o hash do arquivo localmente - shasum -a 256 file.iso no macOS, sha256sum no Linux, Get-FileHash no PowerShell - e compare o digest com o que está na página de download. Um único caractere diferente significa que o arquivo não é o mesmo arquivo.
O que essa comparação não diz é se a página do publicador era legítima. Se um atacante consegue trocar o download, normalmente também consegue trocar o checksum ao lado dele, e é por isso que projetos sérios assinam o arquivo de checksums com uma chave GPG em vez de apenas publicar o digest. Verificar a assinatura e depois o checksum é a cadeia que realmente prova alguma coisa.
É também por isso que o MD5 continua aceitável como checksum num cenário sem adversário e é inaceitável para uma assinatura. Contra um download corrompido, o MD5 dá conta; contra alguém que quer dois arquivos com o mesmo digest, ele está quebrado desde 2004.
Hashes como endereços, não apenas como conferência
Boa parte da infraestrutura moderna identifica conteúdo pelo hash, e não por um nome. O Git nomeia cada objeto pelo digest do seu conteúdo, e é por isso que o identificador de um commit é estável, evidencia adulteração e independe de onde o repositório está. Digests de imagens de contêiner funcionam do mesmo jeito, assim como os arquivos de lock de pacotes, que fixam uma dependência em bytes exatos em vez de num número de versão que alguém poderia republicar.
A deduplicação usa a mesma ideia: um sistema de backup que calcula o hash de cada bloco guarda blocos idênticos uma única vez, e uma rede de distribuição de conteúdo pode fazer cache por digest sem risco de servir dado velho, porque conteúdo diferente tem endereço diferente.
As árvores de Merkle estendem isso. Calcular o hash de pares de hashes subindo nível a nível produz um único digest raiz que se compromete com um conjunto inteiro de dados, o que permite a um cliente verificar que um item pertence a ele sem baixar tudo. Logs de transparência de certificados, blockchains e vários bancos de dados replicados se apoiam nessa estrutura.
Como verificar a assinatura de um webhook do jeito certo
O padrão é o mesmo na Stripe, no GitHub, no Slack e na maioria dos outros. Quem envia calcula um HMAC do corpo bruto da requisição com um segredo compartilhado e coloca o digest em um cabeçalho; quem recebe recalcula e compara. Quatro detalhes decidem se a implementação é sólida.
Primeiro, calcule o hash do corpo bruto, não de uma versão reserializada do JSON já parseado - a ordem das chaves e os espaços mudam os bytes e, portanto, o digest. Segundo, compare em tempo constante, porque uma comparação de strings comum revela onde está a primeira diferença, e requisições suficientes transformam esse tempo na assinatura. Terceiro, inclua no payload assinado o timestamp que o remetente fornece e rejeite qualquer coisa com mais de alguns minutos, ou uma requisição capturada pode ser reenviada indefinidamente.
Quarto, aceite dois segredos ao mesmo tempo. A rotação é impossível se quem recebe conhece apenas um, e a prática usual é aceitar qualquer um deles durante uma curta janela de sobreposição.
Escolhendo parâmetros para hash de senhas
Argon2id é a recomendação atual e, ao contrário de um hash simples, recebe parâmetros: memória, iterações e paralelismo. O custo de memória é o que derrota hardware especializado, já que GPUs e ASICs têm muito mais poder de cálculo do que memória rápida por núcleo. Um ponto de partida comum é 19 MiB com duas iterações, e mais do que isso onde o hardware permitir.
O ajuste é empírico. Meça na máquina que vai executar isso e escolha o maior custo que mantenha um login abaixo de cerca de um quarto de segundo, lembrando que um pico de logins multiplica esse custo por cada requisição simultânea. bcrypt com fator de trabalho 12 continua aceitável e é mais fácil de colocar em produção em algumas stacks; o scrypt fica entre os dois.
A migração não exige a senha de ninguém. Guarde o algoritmo e os parâmetros junto de cada digest, verifique conforme o que o registro armazenado diz e refaça o hash com as novas configurações no momento de um login bem-sucedido. Em alguns meses, a maior parte das contas ativas migra sozinha.
Onde o hash é a ferramenta errada
Aplicar hash a um identificador para anonimizá-lo não funciona, e vale entender o motivo em vez de decorá-lo. Um hash é determinístico e o espaço de entrada é pequeno: só existe um tanto de endereços de e-mail e de números de telefone, então quem tiver os digests pode calcular o hash de todos os candidatos que possui e cruzar. Vários esquemas de publicidade e analytics vendidos como preservadores de privacidade se apoiam exatamente nesse erro.
Quando você realmente precisa comparar identificadores sem revelá-los, as primitivas são outras: hashes com chave, usando um segredo que mais ninguém tem, ou protocolos feitos para interseção privada de conjuntos.
Dois outros usos indevidos aparecem com frequência. Um hash não é um algoritmo de compressão, já que nada pode ser recuperado dele. E um hash não criptográfico como CRC32 ou MurmurHash é excelente para tabelas de hash e checksums e inútil onde um adversário escolhe a entrada, porque dá para fabricar colisões de propósito e degradar uma estrutura de dados até virar uma varredura linear.
Perguntas frequentes
- O que é HMAC e quando preciso dele?
- HMAC combina um hash com uma chave secreta para provar que uma mensagem veio de alguém que possui essa chave e não foi alterada. Um hash simples não prova nenhuma das duas coisas, porque qualquer um pode recalculá-lo. HMAC é o que assina payloads de webhook e requisições de API. Mude para o modo HMAC e informe a chave.
- MD5 é seguro de usar?
- Não para segurança. O MD5 tem ataques práticos de colisão e nunca deve ser usado para senhas, assinaturas ou integridade contra um atacante motivado. Continua perfeitamente razoável para usos não adversariais como checksums, chaves de cache e ETags, e é por isso que ele está aqui.
- Então como devo fazer hash de senhas?
- Com nenhum destes. Armazenar senhas exige um algoritmo lento e com sal, feito para essa tarefa, como bcrypt, scrypt ou Argon2. Um hash rápido de uso geral como o SHA-256 pode ser quebrado por força bruta a bilhões de tentativas por segundo.
- Minha entrada é enviada para um servidor?
- Não. Os hashes SHA usam a Web Crypto API do navegador e o MD5 é implementado em JavaScript na própria página, então seu texto nunca sai do seu dispositivo.
- Por que o MD5 não está na Web Crypto API do navegador?
- Ele foi deliberadamente deixado de fora por ser criptograficamente quebrado, então aqui ele é implementado à parte. A implementação é verificada contra os vetores de teste oficiais da RFC 1321.
- Funciona com texto acentuado e outros idiomas?
- Sim. A entrada é codificada em UTF-8 antes do hash, então português acentuado, japonês, chinês, coreano e emoji produzem exatamente os mesmos hashes que qualquer ferramenta de linha de comando padrão.
Última atualização:
Inclua os passos, o resultado esperado e o resultado real. Remova segredos e dados pessoais.
