Cómo identificar el tipo de hash sin adivinar: herramientas y técnicas prácticas Alternativas: - Cómo reconocer el tipo de hash sin conjeturas: guía de herramientas y métodos efectivos - Identificar el tipo de hash sin hacer conjeturas: revisión de herra

Cómo identificar el tipo de hash sin adivinar: herramientas y técnicas prácticas Alternativas: - Cómo reconocer el tipo de hash sin conjeturas: guía de herramientas y métodos efectivos - Identificar el tipo de hash sin hacer conjeturas: revisión de herra

A veces llega una cadena enigmática de letras y números y todo el mundo pregunta qué tipo de hash es. Hay cientos de variantes, desde el antiguo MD5 hasta esquemas modernos de contraseñas como bcrypt, scrypt y Argon2id. La buena noticia es que casi siempre se puede reconocer el tipo sin brujería si se mira la longitud, el alfabeto, prefijos característicos y el contexto del sistema, y luego confirmar las sospechas con herramientas. A continuación he reunido un algoritmo de trabajo y un repaso de utilidades que ahorran horas de vida y nervios.

Cómo empezar un análisis rápido

Antes de recurrir a la «magia» hay tres comprobaciones simples que sorprenden por su eficacia. No requieren red y aclaran el 70% de los casos.

  • Longitud cuente los caracteres. 32 suele ser MD5 o NTLM, 40 parece SHA-1, 64 indica SHA-256, 128 sugiere SHA-512. Si la longitud es impar o extrañamente corta, quizá no sea un hash criptográfico sino, por ejemplo, un CRC32 o simplemente Base64 de algo.
  • Alfabeto los caracteres hex [0-9a-f] apuntan a hexadecimal. La presencia de ./$ y + suele indicar Base64 o formatos modulares de archivos/sistemas.
  • Prefijos los formatos modulares suelen identificarse por prefijos. $1$ es md5crypt, $5$ sha256crypt, $6$ sha512crypt, $2a$/$2b$/$2y$ es bcrypt, $argon2id$ se describe por sí mismo, $pbkdf2-sha256$ aparece en marcos web. En PostgreSQL la contraseña empieza con md5, en MySQL a menudo con * + 40 hex en mayúsculas.

Guía de longitudes y pistas

Esto no es «la verdad absoluta», sino una orientación para reducir la lista de sospechosos. Siempre verifique el contexto y la sal.

Indicador Candidatos Pistas
32 hex MD5, NTLM, LM NTLM suele estar en mayúsculas, sin sal; LM a menudo contiene aad3b435b51404eeaad3b435b51404ee en la mitad de la pareja
40 hex SHA-1, esquemas antiguos de MySQL MySQL: * + 40 HEX; Apache {SHA} — Base64 de SHA-1
64 hex SHA-256 Si hay $5$ — ya es sha256crypt
128 hex SHA-512 $6$ — sha512crypt
60 caracteres bcrypt Siempre empieza con $2a$/$2b$/$2y$ seguido de la «coste», por ejemplo $12$
Prefijo modular md5/sha256/sha512-crypt, PBKDF2, scrypt, Argon2 $1$, $5$, $6$, $pbkdf2-sha256$, $scrypt$, $argon2id$
Base64 con llaves Apache {SHA}, {SSHA} A menudo en .htpasswd
md5 + 32 hex PostgreSQL Formato md5<md5(password+username)>
Empieza con $argon2id$ Argon2id Parámetros v, m, t, p directamente en la cadena

Herramientas que realmente ayudan

A continuación montamos el arsenal. Es mejor disponer de opciones locales y en la nube para verificación cruzada. Abajo hay enlaces a proyectos verificados.

1. Name-That-Hash CLI

Herramienta abierta de la comunidad HashPals que intenta «adivinar» el tipo mediante firmas, longitudes, prefijos y contexto. Funciona sin conexión, ofrece una lista de candidatos con puntuaciones y sugiere modos para atacantes como hashcat y John.

  • Repositorio: GitHub
  • Instalación: pip install name-that-hash o pipx install name-that-hash
  • Ejemplos:
    # cadena única
    nth --text "5f4dcc3b5aa765d61d8327deb882cf99"
    
    # desde archivo
    nth --file hashes.txt
    
    # mostrar solo las hipótesis más probables
    nth --text "$2b$12$4u2mQJ7..." --most-likely

2. hashID

Clásico en Python. Usa un conjunto de expresiones regulares y heurísticas. Sí, a veces da «demasiados candidatos», pero como filtro rápido sirve.

  • Repositorio: GitHub
  • Ejecutar:
    python hashid.py 5baa61e4c9b93f3f0682250b6cf8331b
    python hashid.py -m "$6$rounds=5000$salt$..."   # mostrar modos de hash

3. hash-identifier

Otro identificador ligero en Python. Puede reemplazar a hashID pero muchos ya lo tienen en su kit de pentesting.

  • Repositorio: GitHub
  • Ejecutar:
    python hash-identifier.py

4. CyberChef

Navaja suiza universal para trabajar con datos. No tiene un botón «adivinar hash», pero cuenta con operaciones Magic, cálculo de hashes, decodificación y fuerza bruta de variantes. Muy útil para verificar hipótesis y estudiar formatos.

  • Versión en línea: CyberChef
  • Consejo: pruebe la cadena: decodificar Base64 → comprobar la longitud → calcular el hash de la cadena de prueba «password» y comparar.

5. Identificadores en línea

Cuando hay internet a mano, puede verificar hipótesis en servicios en línea. Son útiles como «segunda opinión», pero no envíe datos sensibles.

  • hashes.com identificación rápida y ejemplos de formatos
  • TunnelsUp analizador gráfico con pistas

6. Referencia de modos de hashcat

No es un «identificador», pero cuando ya tiene una sospecha, la lista de modos y ejemplos evita errores en los parámetros. A menudo es la prueba final.

Algoritmo paso a paso para reconocer

Para no convertir el proceso en un «y si», mantenga un guion corto. Funciona bien tanto en forense como en bug bounty.

  1. Reúna contexto de dónde vino la cadena: base de datos, registros, aplicación web, SO. Los frameworks tienen formatos propios, por ejemplo Django pbkdf2_sha256$ o Joomla con $P$.
  2. Cuente longitud y alfabeto registre los datos concretos: longitud, conjunto de caracteres, si tiene prefijo.
  3. Mire los prefijos todo lo que empieza por $ casi siempre se describe por sí mismo.
  4. Pase por utilidades locales primero nth, luego hashID. Compare los candidatos principales.
  5. Verificación cruzada en línea la misma cadena en hashes.com o TunnelsUp. Si coinciden tres fuentes, probablemente sea ese formato.
  6. Prueba con una cadena conocida use «password» o «123456», calcule los candidatos en CyberChef y compare formato y longitud.
  7. Mantenga un manual operativo anote los indicadores claros en la wiki del equipo para no volver a buscarlos en cada proyecto.

Errores frecuentes y cómo evitarlos

La mayoría de errores no vienen por «malas herramientas», sino por formatos similares y sales olvidadas. Esto es en lo que más se cae.

  • MD5 y NTLM mismo tamaño ambos 32 hex. El contexto y la capitalización ayudan. NTLM suele estar en mayúsculas y se calcula sobre UTF-16LE.
  • «Es Base64 y no un hash» la presencia de = al final y de +/ sugiere codificación. Decodifique y vea el contenido.
  • La sal cambia la longitud md5crypt/sha*crypt, PBKDF2, bcrypt, scrypt y Argon2 incluyen la sal y parámetros en la cadena. Nunca intente «romper como MD5» algo que tiene aspecto $6$....
  • Servicios en línea y privacidad no envíe hashes reales de usuarios a formularios externos. Anonimice la sal o use herramientas locales.
  • CRC y sumas de comprobación cadenas cortas de 8 caracteres suelen ser CRC32, no criptográficamente seguras. No las confunda con «hashes de contraseña».

Mini guía de expresiones regulares

Si necesita filtrar logs rápidamente, estas máscaras RegEx ayudan a identificar candidatos. No son perfectas, pero son prácticas.

# 32 hex (MD5/NTLM/LM)
b[a-f0-9]{32}b

# 40 hex (SHA-1)
b[a-f0-9]{40}b

# bcrypt
$2[aby]$d{2}$[./A-Za-z0-9]{53}

# sha256/512-crypt
$(5|6)$[./A-Za-z0-9]+$[./A-Za-z0-9]+b

# Argon2 (id/i/d)
$argon2(id|i|d)$v=d+$.*$.+

Ejemplos prácticos

A continuación un par de escenas «en vivo» sobre cómo razonar paso a paso.

Ejemplo 1 cadena corta de ocho caracteres

9e107d9d

Es sospechosamente corto para un hash criptográfico. Comprobamos en CyberChef que es CRC32 de «fox» y entendemos que es una suma de comprobación. Intentar «romper una contraseña» a partir de ello no tiene sentido.

Ejemplo 2 60 caracteres con prefijo

$2b$12$LzQ1kZs7QFQv4Q5kE3Z3Se0xXGxHk1Y7oS2Gx3hVZ0QJX7FJrHq5e

Es bcrypt. Vemos $2b$ y el «coste» $12$. Para ataques hará falta el modo correspondiente en hashcat. La cuestión deja de ser «qué es» y pasa a «qué parámetros usar en el diccionario y la máscara».

Ejemplo 3 32 hex en mayúsculas

32ED87BDB5FDC5E9CBA88547376818D4

Parece NTLM. Confirme con nth y compárelo con example hashes. Si es un volcado de Windows, casi seguro que lo es.

Integración en el flujo de trabajo

Para que el reconocimiento no se convierta en «recordar cómo se hacía cada seis meses», automatice la rutina.

  • Crear una envoltura simple un wrapper sobre nth + hashID que acepte una cadena, muestre la intersección de los principales candidatos y liste los modos de hashcat.
  • Wiki del equipo una página con la tabla de prefijos y formatos típicos del manual. Añada también notas sobre sus productos.
  • Política de datos regla estricta «hashes reales — solo offline». Para demos y tickets use ejemplos sintéticos.

Lista de verificación breve

  • Primero longitud, alfabeto, prefijo. Después las herramientas.
  • El contexto decide: servidor, framework, SO indican el formato.
  • Verifique cruzado offline y online; no confíe en una sola fuente.
  • No confunda codificación básica con criptografía.
  • Las sales y parámetros suelen vivir dentro de la cadena; no los «recorte».

Enlaces útiles

Guárdelos en marcadores; le servirán en el momento más inesperado.

P.D. Si tiene dudas, intente crear el mismo hash de «password» y compare formato y longitud. Nada despeja más que experimentar con una muestra de prueba.


Alt text