MD5 vs SHA-256: diferencias y recomendaciones

MD5 y SHA-256 son dos funciones de hash criptográfico. Producen una huella de tamaño fijo a partir de una entrada de tamaño arbitrario. Se encuentran por todas partes: verificación de integridad de archivos, firmas, identificadores únicos, certificados TLS, blockchain. Su estatus de seguridad, en cambio, es muy diferente: MD5 está roto desde 2004 para los usos criptográficos, SHA-256 sigue siendo seguro en 2026. Este artículo hace balance.

Recordatorio sobre las funciones de hash

Una función de hash criptográfico transforma un mensaje de longitud arbitraria en una huella de tamaño fijo. Tres propiedades esperadas:

  • Resistencia a la preimagen: dado un hash, debe ser inviable encontrar el mensaje original.
  • Resistencia a la segunda preimagen: dado un mensaje, debe ser inviable encontrar otro que produzca el mismo hash.
  • Resistencia a las colisiones: debe ser inviable encontrar dos mensajes distintos que produzcan el mismo hash.

Una función se considera rota en cuanto una de estas propiedades cae. Para MD5, la resistencia a las colisiones cayó en 2004.

MD5: 128 bits, roto desde 2004

MD5 (Message Digest 5) es una función diseñada por Ronald Rivest en 1991 y estandarizada por la RFC 1321. Produce una huella de 128 bits (16 bytes, 32 caracteres hexadecimales).

En 2004, Wang y Yu publican un ataque que produce colisiones MD5 en pocas horas en un PC. Desde entonces, el coste de generación de una colisión ha caído a unos segundos. En 2008, unos investigadores fabricaron un falso certificado SSL firmado con MD5 reconocido como válido por todos los navegadores. En 2012, el malware Flame utilizaba una colisión MD5 para firmar su ejecutable como un binario legítimo de Microsoft.

Conclusión: MD5 ya no debe usarse en cuanto un atacante pueda influir en la entrada. Todos los usos criptográficos (firmas, integridad frente a un adversario, derivación de claves) quedan excluidos. Solo algunos usos sin hostilidad siguen siendo aceptables, como un checksum de transferencia de red o una clave de caché: MD5 sigue siendo rápido, y la colisión involuntaria sigue siendo estadísticamente imposible.

SHA-256: 256 bits, seguro en 2026

SHA-256 pertenece a la familia SHA-2 publicada por el NIST en 2001 y estandarizada por FIPS 180-4. Produce una huella de 256 bits (32 bytes, 64 caracteres hexadecimales).

No se conoce ningún ataque práctico contra SHA-256. El mejor ataque teórico sobre colisiones cubre 31 rondas de 64, sin implicación práctica. El coste por fuerza bruta para encontrar una colisión es del orden de 2^128 operaciones, fuera del alcance de cualquier infraestructura conocida.

SHA-256 se utiliza en: TLS (certificados X.509), Git (desde la transición a SHA-256), Bitcoin (prueba de trabajo), firmas de paquetes Linux, Windows Update, etc. Es hoy el hash recomendado por defecto para la mayoría de los usos criptográficos generales.

Diferencias prácticas

Longitud de salida

MD5("hello")     = 5d41402abc4b2a76b9719d911017c592               (32 chars hex)
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 chars hex)

Velocidad

MD5 es alrededor de 2 a 3 veces más rápido que SHA-256 en la misma máquina. En una CPU moderna, MD5 procesa varios GB/s por núcleo, SHA-256 ronda el GB/s. En las CPU recientes con la extensión SHA-NI, la diferencia se reduce considerablemente.

Seguridad

Es la única diferencia que realmente cuenta: MD5 está roto para las colisiones, SHA-256 no lo está. Si la seguridad frente a un adversario está en juego, la elección está decidida.

Tabla comparativa

Criterio MD5 SHA-256
Año19912001
Tamaño de salida128 bits / 32 hex256 bits / 64 hex
Resistencia a las colisionesRota desde 2004Sin ataque práctico
Velocidad relativa2 a 3 veces más rápidaReferencia
Aceleración por hardwareNinguna dedicadaSHA-NI en CPU recientes
Uso criptográficoDesaconsejadoRecomendado
Uso de integridad no hostilAceptableRecomendado
Cumplimiento normativoRechazado (PCI-DSS, FIPS)Aceptado

Casos de uso

Cuándo MD5 sigue siendo aceptable

  • Clave de caché aplicativo (Redis, memcached) sin implicación de seguridad
  • Detección de duplicados en un dataset no hostil
  • Checksum de una transferencia de red para detectar una corrupción accidental
  • Huella de una cadena para reparto (sharding) sin restricción adversarial

Cuándo SHA-256 se impone

  • Verificación de integridad frente a un atacante (descargas firmadas, paquetes)
  • Firmas digitales, certificados X.509
  • Identificadores Git de commits y objetos
  • Derivación de claves (en combinación con HKDF)
  • Cualquier aplicación sujeta a una exigencia normativa (PCI-DSS, ANSSI, FIPS)

Ejemplos concretos

En PHP, ambas funciones están disponibles mediante la función hash():

// Huella de una cadena
$md5    = hash('md5',     'hello world');
$sha256 = hash('sha256',  'hello world');

// Huella de un archivo (lectura en streaming)
$md5File    = hash_file('md5',    '/path/to/file.iso');
$sha256File = hash_file('sha256', '/path/to/file.iso');

Puedes generar estas huellas directamente en línea con nuestro generador de hash de texto, hashear un archivo con el generador de hash de archivo, o identificar un tipo de hash desconocido con el identificador de hash.

Recomendación

La regla 2026 es simple: SHA-256 por defecto. MD5 ya no debe aparecer en tu código en cuanto un atacante pueda influir en la entrada, lo que cubre la práctica totalidad de los casos en servidor. El rendimiento superior de MD5 ya no justifica su uso: la diferencia se ha vuelto insignificante con las aceleraciones SHA-NI presentes en las CPU x86 y ARM modernas.

Preguntas frecuentes

¿Es MD5 todavía seguro para contraseñas?

No, nunca. Y este punto es independiente de las colisiones: MD5 es demasiado rápido. Una GPU rompe varios miles de millones de hashes MD5 por segundo, lo que vuelve trivial cualquier ataque por diccionario o fuerza bruta. Para las contraseñas, utiliza bcrypt, Argon2 o scrypt (consulta nuestra comparativa Bcrypt vs Argon2).

¿Cuál es la diferencia entre SHA-256 y SHA-2?

SHA-2 es la familia, SHA-256 es uno de sus miembros. La familia incluye SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 y SHA-512/256. Se diferencian por el tamaño de salida y el tamaño de los bloques internos. SHA-256 es la variante más utilizada.

¿Hay que pasar a SHA-3?

No necesariamente. SHA-3 (publicado en 2015) se basa en una construcción radicalmente diferente (Keccak / sponge), pero SHA-256 sigue siendo seguro. SHA-3 sirve sobre todo como plan B en caso de un problema inesperado en SHA-2. Elige SHA-3 si una norma lo exige, o si quieres una diversidad criptográfica. De lo contrario, SHA-256 sigue siendo la opción estándar.

¿Se puede invertir un hash MD5 o SHA-256?

No, por construcción: un hash pierde información. Los sitios de «descifrado» de MD5 solo consultan bases enormes de hashes precalculados (rainbow tables) para entradas comunes. Para datos aleatorios largos, recuperar la entrada es imposible con ambos algoritmos.

¿Será roto SHA-256 por un ordenador cuántico?

El algoritmo de Grover divide por dos la seguridad efectiva de los hashes frente a un atacante cuántico: SHA-256 ofrecería entonces unos 128 bits de seguridad, lo que sigue siendo ampliamente suficiente. No hay urgencia del lado del hash, al contrario que en criptografía asimétrica.