Parte: 2 — Criptografía aplicada · Fuente: Serious Cryptography (Aumasson) y NIST FIPS 180-4 / FIPS 202 ⏱️ Duración estimada: 90 min · Nivel: Intermedio
Comprender qué es una función hash criptográfica, qué tres propiedades debe cumplir (resistencia a preimagen, segunda preimagen y colisión), por qué MD5 y SHA-1 están rotos, y en qué se diferencian SHA-2, SHA-3 (Keccak) y BLAKE2/3. El alumno aprenderá para qué sirven realmente los hashes y para qué no (no cifran, no protegen contraseñas por sí solos).
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Qué es y qué no es un hash | Evita malentendidos frecuentes |
| 2 | Propiedades (preimagen, colisión) | Definen su seguridad |
| 3 | Efecto avalancha | Un bit cambia toda la salida |
| 4 | MD5 y SHA-1 rotos | Lección de obsolescencia |
| 5 | SHA-2 y Merkle-Damgård | Estándar dominante |
| 6 | SHA-3 (esponja) y BLAKE | Alternativas modernas |
| 7 | Extensión de longitud | Trampa de diseño |
h, es inviable hallar m con hash(m)=h.m1, es inviable hallar m2≠m1 con igual hash.m1≠m2 con igual hash (limitada por el cumpleaños: ~2^(n/2)).openssl version
sha256sum --version 2>/dev/null || echo "usa openssl dgst"
pip install cryptography
Todo local. Los hashes se calculan sobre datos propios.
bash
echo -n "hola" | openssl dgst -md5
echo -n "hola" | openssl dgst -sha1
echo -n "hola" | openssl dgst -sha256
echo -n "hola" | openssl dgst -sha3-256
Efecto avalancha: cambia una letra (hola → Hola) y compara el SHA-256; observa que casi todos los bits cambian.
Colisión de MD5 (histórica). Descarga los famosos bloques de colisión de MD5 (p. ej. los PDF de Marc Stevens) y verifica con md5sum que dos archivos distintos comparten hash. Nunca uses MD5 para integridad.
Integridad de archivos: genera sha256sum *.iso > SHA256SUMS y verifica con sha256sum -c SHA256SUMS.
Extensión de longitud (concepto). Explica por qué hash(clave || mensaje) con SHA-256 es vulnerable a extensión y por qué HMAC (clase 052) lo resuelve.
Construye un verificador de integridad que, dado un directorio, genere un manifiesto con el SHA-256 de cada archivo y luego detecte cualquier alteración. Criterio de aceptación: si modificas un solo byte de cualquier archivo, tu verificador lo reporta indicando la ruta afectada.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Usar MD5/SHA-1 para integridad de seguridad | Rotos; migra a SHA-256/SHA-3 |
| "Ciframos con SHA-256" | Un hash no cifra; usa AES/ChaCha20 |
hash(clave\|\|msg) como MAC |
Vulnerable a extensión; usa HMAC |
| Hash de contraseña con SHA-256 simple | Demasiado rápido; usa Argon2/bcrypt (clase 057) |
Comparar hashes con == en contexto sensible |
Riesgo de timing; usa comparación constante |
❓ ¿SHA-256 o SHA-3? Ambos son seguros. SHA-3 aporta diversidad de diseño e inmunidad a extensión de longitud; SHA-2 sigue siendo perfectamente válido.
❓ ¿Un hash garantiza que nadie modificó el archivo? Solo si el hash se obtuvo por un canal confiable; si el atacante controla ambos, puede sustituirlos. Combínalo con firmas.
❓ ¿Por qué las colisiones importan si "es improbable"? Porque atacantes las fabrican intencionadamente (SHAttered); afectan firmas y control de versiones.
Clase 050 — Criptografía de curva elíptica (ECC)