Hashing Explicado: MD5, SHA, y Cuándo Usar Cada Uno
Las funciones hash convierten datos en huellas digitales. Así es como funcionan y por qué MD5 aún no está muerto.
Descargas un archivo. El sitio web muestra un checksum MD5. Se supone que debes verificarlo de alguna manera. ¿Pero por qué? ¿Y cuál es la diferencia entre MD5 y SHA-256?
Las funciones hash están en todos lados en el software. Entenderlas te ayuda a usarlas correctamente.
Qué Hace el Hashing
Una función hash toma cualquier entrada y produce una salida de tamaño fijo. Siempre la misma salida para la misma entrada. Cambia un bit de la entrada y la salida cambia completamente.
"hola" → 5d41402abc4b2a76b9719d911017c592 (MD5)
"Hola" → 8b1a9953c4611296a827abf8c47804d7 (MD5)
Una letra mayúscula cambia todo el hash. Ese es el punto.
Hash vs Encriptación
El hashing es de un solo sentido. No puedes revertir un hash para obtener los datos originales.
La encriptación es de dos sentidos. Con la clave correcta, puedes desencriptar y recuperar el original.
Si alguien dice que puede "desencriptar" un hash MD5, está rompiéndolo (probando entradas hasta que una coincida) o está confundido sobre cómo funciona el hashing.
Los Algoritmos Comunes
MD5 - Salida de 128 bits. Rápido pero criptográficamente roto. Bien para checksums, no para seguridad.
SHA-1 - 160 bits. También roto para uso criptográfico. Los sistemas legados aún lo usan.
SHA-256 - 256 bits. Estándar actual. Usa esto cuando la seguridad importa.
SHA-512 - 512 bits. Ligeramente más seguro, a veces más rápido en sistemas de 64 bits.
BLAKE2/BLAKE3 - Alternativas modernas. Más rápido que SHA-256 con seguridad similar.
Cuándo MD5 Está Bien
MD5 tiene mala reputación porque está "roto". Pero roto para criptografía no significa inútil.
Verificaciones de integridad de archivos. Verificar que una descarga no se haya corrompido. Un atacante necesitaría crear un archivo malicioso con el mismo hash, lo que requiere más esfuerzo de lo que vale para la mayoría de ataques en contextos no de seguridad.
Claves de caché. Hashear contenido para generar identificadores únicos. Sin implicaciones de seguridad.
Deduplicación. Encontrar archivos duplicados comparando hashes.
Cuándo Usar SHA-256 o Mejor
Almacenamiento de contraseñas. En realidad, usa bcrypt o Argon2 en su lugar. Están diseñados para contraseñas.
Firmas digitales. Integridad de documentos donde adversarios podrían intentar falsificación.
Cualquier cosa crítica de seguridad. Cuando un atacante tiene incentivo para encontrar colisiones.
El Problema de las Colisiones
Una colisión es cuando dos entradas diferentes producen el mismo hash. La matemática del cumpleaños dice que las colisiones se vuelven probables antes de lo que esperarías.
Para MD5, los investigadores han encontrado formas de crear colisiones intencionalmente. Dos archivos diferentes, mismo hash. Por eso está "roto".
Para SHA-256, no existen ataques de colisión prácticos. Todavía.
Ejemplos Prácticos
Verificando descargas:
sha256sum ubuntu.iso
# Compara la salida con el hash en la página de descarga
Almacenando claves de API: Almacena el hash, no la clave real. Cuando los usuarios envían una clave, hashéala y compara.
Commits de Git:
Git usa SHA-1 para identificar commits. Por eso los hashes de commits se ven como a1b2c3d4e5f6...
No Inventes el Tuyo
Nunca inventes tu propio esquema de hashing. "MD5 dos veces" o "SHA-256 con salt anexado" son peores que usar patrones establecidos.
Para contraseñas: bcrypt, scrypt o Argon2. Para integridad: SHA-256. Para velocidad: BLAKE3.
Los expertos ya lo han descubierto.
Las funciones hash son simples en concepto pero matizadas en aplicación. Elige el algoritmo correcto para el trabajo, y no uses hashing criptográfico donde un checksum simple funcionaría.