Identificar o algoritmo de um hash

identifica o algoritmo provável de um hash (MD5, SHA-1, SHA-256, bcrypt, argon2...) a partir do seu comprimento e formato, e tenta encontrar o texto claro através de um dicionário de palavras-passe comuns
Cole qualquer hash (hexadecimal, bcrypt $2y$..., argon2 $argon2id$...). A ferramenta deteta o algoritmo provável.

O que é um hash criptográfico?

Um hash (ou impressão criptográfica) é o resultado de uma função que transforma um dado de entrada de tamanho arbitrário (uma palavra-passe, um ficheiro, uma cadeia) numa cadeia de tamanho fixo. Esta função é unidirecional: a partir de um hash, é matematicamente inviável recuperar a entrada original. Duas entradas idênticas produzem sempre o mesmo hash, mas a menor mudança na entrada modifica completamente o resultado.

A nossa ferramenta identifica o algoritmo provável de um hash a partir do seu formato, e tenta um lookup contra um dicionário de palavras-passe ultracomuns pré-calculadas nos principais algoritmos.

Como identificar um hash?

A identificação assenta em três indícios:

  • O comprimento: cada algoritmo produz uma impressão de tamanho fixo.
  • O formato: hexadecimal puro, Base64, ou Modular Crypt Format com prefixos específicos.
  • O prefixo: os hashes de palavras-passe modernos seguem o formato $id$params$salt$hash, em que id identifica sem ambiguidade a função utilizada.

Comprimentos hexadecimais comuns

  • 8 caracteres: CRC32 (soma de controlo, não é um hash criptográfico)
  • 32 caracteres: MD5, MD4, NTLM, RIPEMD-128
  • 40 caracteres: SHA-1, RIPEMD-160
  • 64 caracteres: SHA-256, SHA3-256
  • 96 caracteres: SHA-384, SHA3-384
  • 128 caracteres: SHA-512, SHA3-512, Whirlpool

Um comprimento sozinho não basta para concluir: MD5 e NTLM partilham o mesmo tamanho de 32 caracteres hexa, por exemplo. A nossa ferramenta devolve então a lista dos algoritmos possíveis.

Prefixos Modular Crypt Format

Os hashes de palavras-passe vindos de crypt() ou de bibliotecas modernas utilizam um prefixo explícito:

  • $1$: MD5 crypt
  • $5$: SHA-256 crypt
  • $6$: SHA-512 crypt
  • $2y$, $2a$, $2b$: Bcrypt (variantes conforme a plataforma)
  • $argon2i$, $argon2id$, $argon2d$: Argon2 (variantes de uso, sendo Argon2id hoje recomendado)

Exemplo de hash Bcrypt

$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy

Casos de uso

  • Análise de fugas de dados: identificar o algoritmo utilizado por uma base comprometida para avaliar a dificuldade do ataque.
  • Debug: confirmar rapidamente que algoritmo gerou uma impressão encontrada numa resposta de API ou num log.
  • Auditoria de segurança: identificar um sistema que ainda armazena palavras-passe em MD5 ou SHA-1 (a proscrever).
  • Forense: caracterizar um artefacto numa investigação.

Porque é que um hash não é reversível

Uma função de hash é concebida para ser de sentido único. Não existe nenhum algoritmo de "desencriptação de hash", porque um hash não é uma cifragem: é uma projeção. Várias entradas diferentes podem em teoria produzir o mesmo hash (colisão), portanto mesmo conhecendo uma entrada que produza o hash certo, não tem a garantia de que é a entrada original.

Na prática, "quebrar" um hash significa testar massivamente entradas candidatas até encontrar aquela cuja impressão coincide. É o que fazem os ataques por dicionário e por força bruta.

Lookup de dicionário integrado

A nossa ferramenta integra um mini-dicionário de 39 palavras-passe ultracomuns: cadeia vazia, password, admin, 123456, qwerty, letmein, etc. Estas 39 entradas estão pré-calculadas em 10 algoritmos (MD5, SHA-1, SHA-256, SHA-512, MD4, NTLM, etc.). Se o seu hash corresponder a uma destas impressões, a ferramenta devolve-lhe a palavra-passe em claro.

Esta funcionalidade ilustra porque é que os hashes simples não são adequados às palavras-passe: um atacante nem precisa de calcular, consulta uma tabela.

Hash simples vs hash de palavra-passe

Nem todos os hashes têm o mesmo valor para armazenar palavras-passe:

  • Hashes simples (MD5, SHA-256, SHA-512): concebidos para serem rápidos, o que é um defeito quando se quer resistir a um ataque por força bruta. Não incluem sal por defeito, portanto dois utilizadores com a mesma palavra-passe terão o mesmo hash, expondo a ataques por tabelas pré-calculadas (rainbow tables).
  • Hashes de palavra-passe (bcrypt, scrypt, Argon2): concebidos para serem lentos por construção, integram um sal aleatório e um fator de custo configurável. Argon2id é hoje o estado da arte recomendado pela OWASP.

Como utilizar a ferramenta

  1. Cole o hash no campo de entrada.
  2. A ferramenta deteta o formato (comprimento, prefixo) e propõe os algoritmos possíveis.
  3. Se o hash corresponder a uma palavra-passe ultracomum, a palavra em claro aparece.
  4. Caso contrário, obtém a lista dos algoritmos candidatos a explorar mais com uma ferramenta dedicada.

Perguntas frequentes

Porque é que o meu hash bcrypt não é encontrado no dicionário?

O Bcrypt utiliza um sal aleatório único por hash: mesmo com a palavra-passe password, cada utilizador produz um hash diferente. O pré-cálculo de dicionário não funciona portanto. É precisamente a propriedade que torna o bcrypt resistente aos ataques por tabelas.

Que fazer se vários algoritmos forem possíveis para o mesmo comprimento?

Cruze com outros indícios: a fonte do hash (Active Directory aponta para NTLM, Linux /etc/shadow para SHA-512 crypt, uma base MySQL antiga para MD5, etc.) e o contexto aplicacional. A igual comprimento, MD5 continua estatisticamente o mais provável em sistemas antigos.

Como "quebrar" um hash na prática?

Para testes de segurança legítimos (auditoria, pentest), as ferramentas padrão são John the Ripper e hashcat. Aceitam wordlists enormes (rockyou, etc.) e exploram a GPU para testar milhares de milhões de candidatos por segundo. A viabilidade depende do algoritmo: MD5 e SHA-1 cedem rapidamente, bcrypt e Argon2 atrasam o ataque em várias ordens de grandeza.

O dicionário integrado é consultável?

O dicionário é voluntariamente minimalista (39 entradas) e serve para ilustrar a fragilidade dos hashes simples em palavras-passe triviais. Para uma cobertura séria, utilize uma wordlist externa (rockyou, SecLists) com o John the Ripper ou o hashcat.

É possível "descodificar" um hash?

Não. Um hash não é uma cifragem: não existe função inversa. Qualquer site que prometa "descodificar um hash" aplica na realidade um lookup numa base pré-calculada. Se a sua palavra-passe é única e longa, não figura lá.

Exemplo de pedido

curl -X POST https://cdrn.fr/api/v1/tools/hash-identifier/execute \
  -H "Content-Type: application/json" \
  -d '{"hash":"..."}'

Esquema de entrada

Campo Tipo Obrigatório Predefinição
hash text

Pontos de acesso

  • GET https://cdrn.fr/api/v1/tools - lista todas as ferramentas disponíveis
  • GET https://cdrn.fr/api/v1/tools/hash-identifier - obtém o esquema desta ferramenta
  • POST https://cdrn.fr/api/v1/tools/hash-identifier/execute - executa esta ferramenta com um payload JSON