🔬 Herramienta Educativa de Seguridad

Hash Collision Lab

Comprende de forma práctica por qué MD5 y SHA-1 ya no son seguros. Genera, descarga y verifica colisiones de hash reales con tus propios datos.

MD5 Roto 2004
SHA-1 Roto 2017
SHA-256 Recomendado

🔬 Explorador de Hash

Escribe cualquier texto y observa cómo se transforma en un "hash" — una huella digital única e irreversible.

Esperando entrada...
¿Qué es un hash?
Es como una "huella digital" de tu información. No importa si escribes una letra o un libro: el resultado siempre tiene el mismo tamaño. Y si cambias una sola coma, la huella cambia por completo.

MD5 → 32 caracteres hex (128 bits)  |  SHA-1 → 40 caracteres hex (160 bits)
Ambos están criptográficamente rotos — se recomienda SHA-256 o superior.

💥 Colisión Real de MD5

Dos bloques de 128 bytes diferentes que producen el mismo hash MD5. Diferencias en rojo. Basado en Wang & Yu (2004).

Bloque A — hexadecimal
Bloque B — hexadecimal
0 caracteres hex diferentes entre ambos bloques
🔓
¡COLISIÓN CONFIRMADA! — Datos diferentes, mismo hash
¿Qué significa?
Un atacante puede crear dos documentos con el mismo hash. Te presenta el legítimo para que lo firmes, y luego lo reemplaza por uno malicioso. Tu firma digital seguiría siendo "válida".

📥 Genera tu Propia Colisión

Escribe tu texto y genera dos archivos diferentes con el mismo hash. Descárgalos y verifícalo con cualquier herramienta externa.

1
Personaliza el contenido
Vista previa:
Escribe algo arriba para ver los hashes en tiempo real.
2
Descarga archivos con colisión verificable

Cada archivo = bloque de colisión diferente (Wang & Yu 2004) + tu texto. Gracias a Merkle-Damgård, ambos producen el mismo hash MD5.

📄
colision_A.bin
Bloque A + tu texto
📄
colision_B.bin
Bloque B + tu texto

En 2017, investigadores de Google y CWI Ámsterdam lograron la primera colisión práctica de SHA-1: dos PDFs visualmente diferentes con el mismo hash SHA-1. Estos son los archivos originales de la investigación, alojados en el repositorio oficial del autor.

📋
shattered-1.pdf
PDF fondo azul — 422 KB
Fuente: GitHub oficial
⬇ Descargar PDF 1
📋
shattered-2.pdf
PDF fondo rojo — 422 KB
Fuente: GitHub oficial
⬇ Descargar PDF 2
Hash SHA-1 idéntico de ambos PDFs:
38762cf7f55934b34d179ae6a4c80cadccbb7f0a

Requirió 9.2 quintillones de compresiones SHA-1 (6,500 años-CPU + 110 años-GPU ≈ $110,000 USD).
Paper: Stevens et al., CRYPTO 2017  |  Repo: GitHub oficial
💡 Es solo demostrativo.

Dos contratos con contenido diferente que ilustran el impacto práctico de una colisión.

📋
contrato_original.pdf
Contrato legítimo
📋
contrato_alterado.pdf
Contrato manipulado
3
Verifica que los hashes son idénticos

🔍 Instrucciones de verificación

Get-FileHash .\colision_A.bin -Algorithm MD5 | Format-List Get-FileHash .\colision_B.bin -Algorithm MD5 | Format-List
md5sum colision_A.bin colision_B.bin
Get-FileHash .\shattered-1.pdf -Algorithm SHA1 | Format-List Get-FileHash .\shattered-2.pdf -Algorithm SHA1 | Format-List # Ambos deben dar: 38762cf7f55934b34d179ae6a4c80cadccbb7f0a
sha1sum shattered-1.pdf shattered-2.pdf
import hashlib for f in ['colision_A.bin','colision_B.bin']: print(f, hashlib.md5(open(f,'rb').read()).hexdigest()) for f in ['shattered-1.pdf','shattered-2.pdf']: print(f, hashlib.sha1(open(f,'rb').read()).hexdigest())
¿Por qué funciona la colisión MD5 con texto personalizado?
MD5 usa Merkle-Damgård: si dos bloques iniciales distintos producen el mismo estado interno, cualquier dato idéntico añadido después mantiene la colisión:
MD5(Bloque_A + tu_texto) == MD5(Bloque_B + tu_texto)
¿Y SHA-1? — El mismo principio, mayor escala
SHA-1 también usa Merkle-Damgård, por lo que es vulnerable al mismo tipo de extensión. La diferencia es la dificultad: encontrar los bloques iniciales que colisionan en SHA-1 requirió 9.2 quintillones de cálculos (~$110,000 USD), mientras que en MD5 se logra en milisegundos. Los PDFs de SHAttered son la prueba:
SHA1(PDF_azul) == SHA1(PDF_rojo) == 38762cf7...bb7f0a
Ambos PDFs comparten los mismos bloques de colisión iniciales, pero muestran imágenes diferentes gracias a una manipulación del formato JPEG dentro del PDF.

🎲 Birthday Attack

La "paradoja del cumpleaños" demuestra que encontrar colisiones es mucho más fácil de lo que parece.

🎂Analogía: Con 23 personas, hay >50% de probabilidad de que dos compartan cumpleaños (entre 365 días). Lo mismo con los hashes: no necesitas probar todas las combinaciones.
Combinaciones
65,536
Intentos colisión
~307
Veces más rápido
213x

🌊 Efecto Avalancha

Un buen hash cambia radicalmente con el más mínimo cambio en la entrada.

Caracteres diferentes
Porcentaje de cambio
¿Por qué importa?
El efecto avalancha garantiza que no puedes "adivinar" el contenido original. Un buen hash cambia ~50% de su salida ante cualquier cambio mínimo.

📚 Entendiendo las Colisiones de Hash

Explicado de forma sencilla, sin conocimientos técnicos previos.

🏷️ ¿Qué es un Hash?

🍰Imagina que eres pastelero. Cada pastel tiene una foto de 10×10 cm. No importa su tamaño, la foto siempre mide lo mismo. Si cambias un ingrediente, la foto es completamente diferente. Un hash funciona igual.
  • Determinista: Mismo dato = mismo hash, siempre.
  • Irreversible: No se puede reconstruir el dato original.
  • Tamaño fijo: Sin importar la entrada, la salida tiene la misma longitud.
  • Efecto avalancha: Un cambio mínimo produce un hash totalmente diferente.

🌍 ¿Dónde se usan?

  • Contraseñas: Los sitios guardan el hash, no tu contraseña real.
  • Descargas: Si el hash coincide con el oficial, nadie modificó el archivo.
  • Firmas digitales: Se firma el hash del documento. CEW Forense usa SHA-256.
  • Bitcoin: Cada bloque contiene el hash del anterior (blockchain).

💥 ¿Qué es una Colisión?

🏠100 apartamentos, 200 inquilinos. Es inevitable que dos compartan. Infinitos datos posibles, finitos hashes → eventualmente dos datos producen el mismo hash. El problema es cuando alguien puede fabricarlas a voluntad.

⚠️ ¿Por qué es peligroso?

📝Ataque del contrato falso:

1. Atacante crea dos contratos con mismo hash: uno normal, otro perjudicial.
2. Te muestra el normal. Lo firmas digitalmente.
3. Reemplaza por el malicioso. Tu firma sigue "válida".
4. Existe un documento perjudicial con tu firma legítima.
  • !
    2012 — Flame: Falsificó certificados de Microsoft con colisiones MD5.
  • !
    2008: Certificado SSL falso generado usando colisiones MD5.
  • !
    2017 — SHAttered: Google creó dos PDFs con el mismo SHA-1.

📅 Línea del Tiempo

MD5 — Roto desde 2004

1991 — Se publica como estándar.
1996 — Primeras debilidades teóricas.
2004 — Wang & Yu: colisiones en <1 hora.
2006 — Klima: colisiones en segundos.
2012 — Malware Flame falsifica certificados.
Hoy — Colisiones en milisegundos. Totalmente roto.

SHA-1 — Roto desde 2017

1995 — Adoptado mundialmente.
2005 — Primeros ataques teóricos.
2017 — Google: SHAttered, primera colisión práctica.
2020 — Colisiones chosen-prefix por ~$11,000 USD.
Hoy — Navegadores ya no aceptan SHA-1.

🛡️ ¿Qué usar hoy?

  • SHA-256 / SHA-3: Estándar actual. CEW Forense, Bitcoin, SSL.
  • BLAKE3: Moderno y ultra rápido.
  • bcrypt / Argon2: Para contraseñas (resistentes a GPU).
Regla: Si un sistema usa MD5 o SHA-1 para seguridad, es vulnerable.

🎯 Resumen en 30 segundos

  • 📌
    Hash = huella digital de un archivo.
  • 📌
    Colisión = dos archivos distintos con la misma huella.
  • 📌
    MD5 roto en 2004. SHA-1 roto en 2017.
  • 📌
    Las colisiones permiten falsificar documentos firmados.
  • 📌
    Usa SHA-256 para seguridad y Argon2/bcrypt para contraseñas.