Identificar o algoritmo de um hash
- Painel
- Documentação
- API
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 queididentifica 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
- Cole o hash no campo de entrada.
- A ferramenta deteta o formato (comprimento, prefixo) e propõe os algoritmos possíveis.
- Se o hash corresponder a uma palavra-passe ultracomum, a palavra em claro aparece.
- 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íveisGET https://cdrn.fr/api/v1/tools/hash-identifier- obtém o esquema desta ferramentaPOST https://cdrn.fr/api/v1/tools/hash-identifier/execute- executa esta ferramenta com um payload JSON