Seguridad · 4 min de lectura ·

MD5, SHA-1 o SHA-256: ¿qué hash deberías usar?

Sumas de comprobación, integridad de archivos, contraseñas y firmas necesitan cosas distintas. Una guía breve para elegir el hash adecuado y el error que hay que evitar.

Una función hash convierte cualquier entrada en una huella corta de longitud fija. La misma entrada da siempre el mismo hash, y cambiar un solo byte cambia el resultado por completo. Lo que distingue a los algoritmos es lo difícil que resulta engañarlos.

"hello"  MD5      5d41402abc4b2a76b9719d911017c592
"hello"  SHA-256  2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

MD5 y SHA-1: rotos para la seguridad

Se pueden crear en segundos dos entradas distintas con el mismo hash MD5, y las colisiones prácticas de SHA-1 son públicas desde 2017. No los uses para firmas, certificados ni nada que un atacante pueda manipular. Siguen sirviendo como comprobaciones rápidas, por ejemplo para detectar archivos duplicados o generar claves de caché.

SHA-256: la opción segura por defecto

Para comprobar integridad, verificar descargas, firmas digitales y direccionamiento por contenido, SHA-256 de la familia SHA-2 es la opción estándar. SHA-3 y BLAKE2 son alternativas modernas con un nivel de seguridad similar.

CRC32: para accidentes, no para ataques

CRC32 y Adler-32 son sumas de comprobación rápidas que detectan corrupción accidental en transferencias y archivos comprimidos. Cualquiera puede fabricar a propósito un valor que coincida, así que no protegen contra manipulaciones.

Nunca guardes contraseñas con un hash rápido

Es el error más común. La velocidad es justo lo que no quieres para contraseñas: una tarjeta gráfica puede probar miles de millones de hashes SHA-256 por segundo. Usa un algoritmo lento y con sal pensado para contraseñas, como Argon2, bcrypt o scrypt, a través de la biblioteca de contraseñas de tu framework.

Hash, cifrado y codificación son cosas distintas

Codificación  Base64, hex, URL   reversible por cualquiera, sin clave
Cifrado       AES, RSA           reversible solo con la clave
Hash          SHA-256, MD5       de un solo sentido, no se puede revertir

Un hash no se puede «descifrar». Las webs que dicen revertir MD5 solo buscan el hash en enormes tablas de entradas conocidas, algo que funciona con palabras comunes y contraseñas cortas y falla con cualquier cosa larga y aleatoria.

Verificar una descarga

Muchos proyectos publican una suma SHA-256 junto a sus descargas. Calcula el hash del archivo que has recibido y compara ambos valores; si un solo carácter difiere, el archivo está dañado o no es el que publicó el autor. Todos los sistemas operativos tienen un comando integrado:

Linux        sha256sum file.iso
macOS        shasum -a 256 file.iso
Windows      certutil -hashfile file.iso SHA256
PowerShell   Get-FileHash file.iso -Algorithm SHA256

Longitud de los hashes

MD5 produce 128 bits (32 caracteres hexadecimales), SHA-1 160 bits (40), SHA-256 256 bits (64) y SHA-512 512 bits (128). Si necesitas demostrar quién creó un mensaje, y no solo que no ha cambiado, usa un HMAC o una firma digital: cualquiera que modifique el contenido puede recalcular un hash simple.

Cuál usar, en una línea

  • Comprobar una descarga o una copia de seguridad: SHA-256.
  • Firmas, certificados y todo lo relacionado con la seguridad: SHA-256 o superior, nunca MD5 ni SHA-1.
  • Encontrar archivos duplicados o crear claves de caché: MD5 o SHA-1 sirven y son rápidos.
  • Detectar errores de transmisión en un protocolo o un archivo comprimido: CRC32.
  • Guardar contraseñas: ninguno de ellos; usa Argon2, bcrypt o scrypt.

Por qué tus hashes no coinciden

Si dos herramientas dan hashes distintos para el «mismo» texto, la entrada casi nunca es la misma: un salto de línea final, finales de línea de Windows o otra codificación de texto cambian todo el resultado. El generador de hashes de 4Dev calcula el hash del texto como bytes UTF-8, igual que md5sum, sha256sum y hashlib de Python, y admite 17 algoritmos, entre ellos MD5, SHA-1, SHA-2, SHA-3, BLAKE2 y CRC32.

Abrir el generador de hashes

LinkedInXFacebook