Hashcat y GPU cracking:
por qué tu contraseña se rompe (o no) en segundos
Herramientas de Kali Linux | unfantasmaenelsistema.com
Cuando una base de datos se filtra, las contraseñas casi nunca aparecen en texto claro: aparecen como hashes, cadenas de longitud fija que resultan de pasar la contraseña por una función matemática de un solo sentido. La promesa es que, a partir del hash, no se puede volver a la contraseña. La realidad es que sí se puede, probando candidatos uno a uno y comparando: eso es el descifrado de contraseñas, y Hashcat es la herramienta de referencia para hacerlo.
Ya hablamos de John the Ripper en un artículo anterior. Aquí el ángulo es distinto: qué cambia cuando el trabajo lo hace una tarjeta gráfica en lugar del procesador, por qué eso convierte ataques de días en ataques de minutos, y —lo más importante— qué defensas concretas dejan ese cálculo en inútil. Este artículo es, en el fondo, la justificación técnica de por qué usamos contraseñas largas, gestores de contraseñas y MFA.
Qué aprenderás en este artículo
Por qué una GPU es órdenes de magnitud más rápida que una CPU para esto · Los modos de ataque de Hashcat: diccionario, reglas, máscara, híbrido y combinador · Cómo se identifica un tipo de hash y qué significa el parámetro -m · Qué es un KDF lento (bcrypt, scrypt, Argon2) y por qué arruina el ataque · Las defensas que hacen que el GPU cracking deje de importar
Uso legal y responsable
Descifrar hashes de contraseñas solo es legítimo sobre material propio, en un laboratorio aislado, o dentro de una auditoría con autorización expresa y por escrito del titular del sistema · Hacerlo contra credenciales de terceros sin permiso constituye acceso ilícito a sistemas informáticos (en España, art. 197 bis y 264 del Código Penal) y descubrimiento y revelación de secretos · Todos los ejemplos de este artículo asumen hashes generados por ti mismo en tu propia máquina con fines de aprendizaje
1. Por qué la GPU lo cambia todo
Un procesador (CPU) moderno tiene un puñado de núcleos muy rápidos y muy flexibles, pensados para tareas variadas que dependen unas de otras. Una tarjeta gráfica (GPU) tiene miles de núcleos mucho más simples, diseñados para hacer la misma operación sobre muchos datos a la vez. Calcular hashes es exactamente ese tipo de problema: la misma función, aplicada a millones de contraseñas candidatas independientes entre sí.
El resultado es una diferencia brutal de rendimiento. Para un hash rápido y sin sal robusta como MD5 o NTLM (el que usa Windows internamente), una CPU de gama alta ronda los cientos de millones de intentos por segundo; una sola GPU de consumo actual supera con holgura la decena de miles de millones. Con varias GPUs en paralelo, el orden de magnitud vuelve a subir.
| Tipo de hash | Velocidad orientativa en una GPU de consumo | Lectura |
|---|---|---|
| MD5 | Decenas de miles de millones/s | Prácticamente instantáneo para contraseñas cortas |
| NTLM (Windows) | Decenas de miles de millones/s | Igual de frágil; por eso importa la longitud |
| SHA-256 simple | Miles de millones/s | Rápido: no fue diseñado para almacenar contraseñas |
| bcrypt (coste 10-12) | Decenas de miles/s | Millones de veces más lento: ese es el objetivo |
| Argon2id | Miles/s o menos | Diseñado para resistir GPU y hardware dedicado |
La conclusión ya se ve en la tabla: el factor decisivo no es la herramienta, es el algoritmo con que se guardó la contraseña. Contra MD5 o NTLM, casi cualquier contraseña humana cae. Contra Argon2id bien configurado, el mismo ataque se vuelve económicamente absurdo.
2. Anatomía de un ataque con Hashcat
Hashcat recibe tres cosas: un archivo con los hashes a atacar, un número de modo (-m) que le dice qué algoritmo son, y un modo de ataque (-a) que define cómo genera los candidatos. A partir de ahí recorre el espacio de candidatos, hashea cada uno con el algoritmo indicado y compara con la lista.
# Estructura general de una ejecucion de hashcat hashcat -m <modo_hash> -a <modo_ataque> hashes.txt <fuente_de_candidatos> [opciones] # Ver la referencia de modos de hash (hay cientos) hashcat --help | less # Ejemplo de laboratorio: hash MD5 propio generado por ti echo -n 'Contrasena-de-prueba-2026' | md5sum | cut -d' ' -f1 > hashes.txt
2.1 El parámetro -m: identificar el hash
Antes de atacar hay que saber qué se está atacando. Herramientas como hashid o name-that-hash proponen candidatos a partir del formato, pero el contexto manda: un hash de 32 caracteres hexadecimales puede ser MD5 (-m 0) o NTLM (-m 1000), y solo saber de dónde salió lo aclara. Algunos modos habituales en laboratorio:
| Modo -m | Algoritmo | Dónde aparece |
|---|---|---|
| 0 | MD5 | Sistemas antiguos, retos de CTF |
| 100 | SHA1 | Bases de datos heredadas |
| 1000 | NTLM | Hashes de contraseña locales de Windows |
| 1800 | sha512crypt | /etc/shadow en Linux moderno |
| 3200 | bcrypt | Frameworks web bien configurados |
| 22000 | WPA-PBKDF2-PMKID/EAPOL | Handshakes de wifi WPA2 propios |
2.2 Los modos de ataque -a
- Diccionario (-a 0): prueba palabra por palabra una lista de contraseñas conocidas (rockyou.txt y similares). Es el primero que se lanza porque la mayoría de contraseñas humanas ya están en alguna lista
- Reglas (-a 0 con -r): aplica transformaciones a cada palabra del diccionario — añadir un número al final, cambiar ‘a’ por ‘@’, capitalizar. Multiplica la cobertura sin multiplicar el tamaño de la lista
- Máscara / fuerza bruta (-a 3): genera candidatos según un patrón de posiciones, por ejemplo ‘?u?l?l?l?l?d?d’ (mayúscula, cuatro minúsculas, dos dígitos). Es fuerza bruta dirigida
- Híbrido (-a 6 y -a 7): combina diccionario y máscara — palabra del diccionario más un sufijo generado, o al revés
- Combinador (-a 1): concatena cada palabra de una lista con cada palabra de otra, para atacar contraseñas del estilo ‘dos palabras juntas’
# 1) Diccionario simple contra tus hashes de laboratorio hashcat -m 0 -a 0 hashes.txt rockyou.txt # 2) Diccionario + reglas (best64 es el ruleset clasico de arranque) hashcat -m 0 -a 0 hashes.txt rockyou.txt -r rules/best64.rule # 3) Mascara: exactamente 8 caracteres, letra inicial + minusculas + 2 digitos hashcat -m 0 -a 3 hashes.txt '?u?l?l?l?l?l?d?d' # 4) Hibrido: palabra del diccionario + 3 digitos al final hashcat -m 0 -a 6 hashes.txt rockyou.txt '?d?d?d'
3. Rendimiento: benchmarking y ajustes
Antes de lanzar un ataque largo conviene medir. hashcat -b ejecuta un benchmark de todos los modos y te dice cuántos intentos por segundo alcanza tu hardware con cada algoritmo. Con ese dato y el tamaño del espacio de candidatos se estima si el ataque tardará minutos, semanas o siglos.
# Benchmark completo del equipo hashcat -b # Benchmark de un solo modo hashcat -b -m 22000 # Ataque con perfil de trabajo agresivo y optimizacion de kernel hashcat -m 0 -a 0 hashes.txt rockyou.txt -O -w 3
- -O (optimized kernel): más rápido, pero limita la longitud máxima de contraseña candidata (típicamente a 27-32 caracteres según el modo). Suele compensar
- -w (workload profile): de 1 (bajo, el equipo sigue usable) a 4 (pesado, la máquina se dedica solo a esto). En un portátil, vigilar la temperatura
- –status –status-timer 10: informe de progreso periódico con velocidad, avance y ETA
- Potfile: Hashcat guarda en hashcat.potfile todo hash ya resuelto y no lo vuelve a atacar. –show consulta esa caché sin relanzar nada
Sobre las listas de palabras y las reglas
rockyou.txt viene de una filtración real de 2009 y se usa como material de referencia estándar en formación; hay listas más grandes y modernas derivadas de filtraciones posteriores · La eficacia de un ataque de diccionario depende más de la calidad de la lista y de las reglas que de la potencia bruta de la GPU · Descargar ‘listas de contraseñas’ de foros aleatorios es una vía habitual de colar malware: usa las que vienen con Kali o repositorios reconocidos
4. El otro lado: qué hace que este ataque fracase
Todo lo anterior existe para llegar a esta sección. Un atacante con hashes en la mano tiene dos límites: el algoritmo con que se guardaron y la entropía de la propia contraseña. Las defensas trabajan sobre ambos.
4.1 KDF lentos: bcrypt, scrypt y Argon2
Una función de derivación de clave (KDF) para contraseñas está diseñada para ser deliberadamente lenta y costosa en memoria. Donde MD5 hace una operación, bcrypt hace miles de iteraciones encadenadas; scrypt y Argon2 además exigen mucha RAM por intento, lo que anula la ventaja de tener miles de núcleos GPU que comparten un ancho de banda de memoria limitado.
| Función | Coste ajustable | Resistencia a GPU |
|---|---|---|
| MD5 / SHA-1 / SHA-256 | Ninguno | Nula: no son para esto |
| PBKDF2 | Iteraciones | Baja-media: la GPU sigue siendo eficaz |
| bcrypt | Factor de coste (work factor) | Alta: poco uso de memoria pero muy lento |
| scrypt | CPU y memoria | Muy alta |
| Argon2id | Tiempo, memoria y paralelismo | Muy alta: ganador del Password Hashing Competition |
4.2 Sal y pimienta
La sal es un valor aleatorio único por usuario que se añade a la contraseña antes de hashear. No hace más lento un intento individual, pero obliga a atacar cada hash por separado en lugar de todos a la vez, y deja inservibles las rainbow tables (tablas precalculadas). La pimienta es un secreto adicional guardado aparte de la base de datos —por ejemplo en la configuración de la aplicación o en un HSM— de modo que filtrar solo la base de datos no basta para atacar.
4.3 Entropía: longitud por encima de complejidad
- Cada carácter adicional multiplica el espacio de búsqueda; añadir un símbolo raro solo lo suma. Una frase de contraseña de cuatro o cinco palabras aleatorias supera a ‘P@ssw0rd!’ por varios órdenes de magnitud
- Un gestor de contraseñas permite tener credenciales largas, únicas y aleatorias en cada servicio sin memorizarlas: es la defensa más rentable frente al relleno de credenciales tras una filtración
- El MFA hace que un hash descifrado no baste para entrar: el segundo factor sigue faltando
- Del lado del servidor: limitar intentos, detectar y alertar sobre fugas, y migrar hashes antiguos a un KDF moderno en el siguiente inicio de sesión válido del usuario
Checklist rápido para quien almacena contraseñas
Usa Argon2id (o bcrypt si Argon2 no está disponible), nunca un hash rápido a secas · Sal única por usuario, generada con un CSPRNG, almacenada junto al hash · Considera una pimienta fuera de la base de datos · Revisa el factor de coste cada pocos años: debe seguir tardando ~250-500 ms por verificación · Fuerza longitud mínima generosa y comprueba las contraseñas contra listas de filtraciones conocidas
5. Montar un laboratorio para practicar
La forma correcta de aprender esto es generar tus propios hashes y atacarlos, sin tocar nada ajeno. Un ciclo de práctica típico:
- Genera hashes de contraseñas que tú elijas con distintos algoritmos (md5sum, openssl passwd, htpasswd -B para bcrypt)
- Identifica el modo -m correcto y confírmalo con un ataque de diccionario que sepas que va a acertar
- Compara tiempos: la misma contraseña en MD5 frente a bcrypt frente a Argon2 — la diferencia se ve en el propio benchmark
- Practica máscaras e híbridos sobre contraseñas ‘realistas’ que tú mismo definas
- Plataformas legales para ir más allá: retos de CTF, máquinas de HackTheBox o TryHackMe, y los conjuntos de ejemplo del repositorio de Hashcat
Recordatorio final
El wifi WPA2 (modo 22000) solo se ataca sobre tu propia red y tu propio handshake · Los hashes de /etc/shadow solo se atacan en tu propia máquina · Cualquier hash obtenido de un sistema que no te pertenece necesita una autorización escrita previa; sin ella, el simple hecho de intentarlo ya es delito
Conclusión
Hashcat con GPU no es magia: es la misma comparación de siempre, hecha muchísimas veces por segundo. Su verdadera lección no es ofensiva sino defensiva — deja meridianamente claro que un hash rápido como MD5 o NTLM no protege nada, y que la seguridad real de una contraseña almacenada depende de tres decisiones de diseño: un KDF lento y con coste de memoria, sal única por usuario, y contraseñas con suficiente longitud.
Si guardas contraseñas de otras personas, trata este artículo como una lista de comprobación. Si solo tienes las tuyas, la conclusión es igual de directa: gestor de contraseñas, frases largas y MFA en todo lo que importe. Eso es lo que convierte una GPU de miles de núcleos en un montón de calor desperdiciado.
Referencias
hashcat.net/wiki — Documentación oficial, tabla de modos y ejemplos de hashes · OWASP Password Storage Cheat Sheet — Recomendaciones actualizadas de KDF y parámetros · RFC 9106 — Especificación de Argon2 · haveibeenpwned.com/Passwords — API de comprobación de contraseñas filtradas (k-anonymity) · Nuestro artículo sobre John the Ripper, para el enfoque en CPU y formatos de hash
unfantasmaenelsistema.com | Seguridad, sistemas y todo lo que no debería funcionar (pero funciona)

