Hashing & cracking
Los hashes aparecen en todas partes: contraseñas, integridad, firmas, tokens. Esta ficha cubre qué garantías dan (y cuáles no), cómo se crackean contraseñas en la práctica, y los ataques estructurales como length extension y las colisiones.
Propiedades y usos
Sección titulada «Propiedades y usos»Un hash criptográfico (SHA-256, SHA-3, BLAKE2) debe ser:- unidireccional (preimagen): dado h, inviable hallar m con hash(m)=h- resistente a 2ª preimagen y a COLISIÓN: inviable hallar dos m distintos con igual hash
OJO con el uso:- integridad/huella -> SHA-256/SHA-3 vale- autenticidad -> NO uses hash a secas; usa HMAC- contraseñas -> NO uses SHA/MD5; usa Argon2id/bcrypt/scrypt (hash LENTO + salt)Por qué SHA-256 “pelado” es malo para contraseñas
Sección titulada «Por qué SHA-256 “pelado” es malo para contraseñas»SHA-256 es RÁPIDO -> una GPU prueba miles de millones/seg -> se crackea por diccionarioSolución: salt valor aleatorio por usuario -> rompe rainbow tables y hashes precomputados lento factor de coste (Argon2/bcrypt) -> cada intento cuesta; la GPU deja de rentar pepper secreto global fuera de la BD (defensa en profundidad)Cracking de contraseñas (laboratorio)
Sección titulada «Cracking de contraseñas (laboratorio)»# 1. IDENTIFICAR el tipo de hashhashid '$2b$12$...' # o hashcat --identify# 2. elegir modo hashcat (-m): 0=MD5, 100=SHA1, 1400=SHA256, 3200=bcrypt, 1800=sha512crypt...# 3. diccionario + reglashashcat -m 0 hashes.txt rockyou.txt -r rules/best64.rule# 4. máscara (fuerza bruta estructurada) si el diccionario fallahashcat -m 0 hashes.txt -a 3 '?u?l?l?l?l?d?d?d'# John equivalente:john --format=raw-sha256 --wordlist=rockyou.txt hashes.txtPara hashes de Windows/AD (NTLM, Net-NTLMv2, Kerberos) ver ad-creds y ad-kerberos.
Length extension (el fallo de “hash(secreto‖mensaje)”)
Sección titulada «Length extension (el fallo de “hash(secreto‖mensaje)”)»# en Merkle-Damgård (MD5, SHA-1, SHA-256): conocido hash(secreto‖msg) y len(secreto),# se puede calcular hash(secreto‖msg‖padding‖EXTRA) SIN conocer el secreto# -> rompe esquemas de "firma" caseros tipo MAC = sha256(secret + data)# herramienta: hashpump / hash_extender# ARREGLO: usar HMAC-SHA256 (no es extensible) o SHA-3/BLAKE2Colisiones
Sección titulada «Colisiones»MD5 colisiones triviales hoy (segundos) -> jamás para firmas/integridadSHA-1 colisión real: SHAttered (2017) y chosen-prefix (2019) -> deprecado# impacto: dos ficheros distintos con igual hash (p. ej. certificados, binarios firmados)Herramientas
Sección titulada «Herramientas»- hashcat (GPU, el estándar), John the Ripper (CPU/formatos exóticos).
- hashid / name-that-hash (identificación), hashpump (length extension), CyberChef.
Defensa
Sección titulada «Defensa»- Contraseñas: Argon2id (o bcrypt/scrypt) con salt por usuario y parámetros de coste altos.
- Integridad/autenticidad: HMAC-SHA256 o firma; nunca
hash(secreto‖msg). - Abandonar MD5/SHA-1 para cualquier uso de seguridad; monitorizar fugas de credenciales.
- Rate limiting y MFA para que, aun con hashes robados, el impacto sea limitado.
CVEs y casos reales
Sección titulada «CVEs y casos reales»- SHAttered (2017): primera colisión práctica de SHA-1 (dos PDFs distintos, mismo hash).
- Flame (2012): malware que falsificó un certificado Microsoft abusando de una colisión MD5.
- Filtraciones masivas (LinkedIn 2012: SHA-1 sin salt) crackeadas casi por completo.
Checklist de prueba
Sección titulada «Checklist de prueba»- Identificar el algoritmo del hash (hashid/—identify)
- ¿Contraseñas con hash rápido sin salt? → crackeo por diccionario
- Ejecutar hashcat/John con diccionario + reglas, luego máscaras
- ¿Esquema
hash(secreto‖msg)? → probar length extension - ¿MD5/SHA-1 en firmas/integridad? → riesgo de colisión
- Verificar que passwords usan Argon2/bcrypt/scrypt
- Comprobar comparación de hashes en tiempo constante