Comparativas Seguridad

MD5 frente a SHA-256 frente a bcrypt

MD5 está roto, SHA-256 es el hash rápido de uso general y bcrypt es un hash de contraseñas lento a propósito. Para qué sirve cada uno y cuál usar.

Última revisión:

AdSense Placeholder
Slot: header_reference_page
En esta página

Los tres se llaman «hash», pero resuelven problemas distintos. MD5 es un hash rápido cuya resistencia a colisiones está rota desde 2004; resérvelo para sumas de comprobación sin adversario. SHA-256 es la opción rápida y segura de uso general para la integridad de archivos, las firmas y HMAC. bcrypt es una función de hash de contraseñas lenta a propósito que añade sal automáticamente; úsela (o Argon2 o scrypt) para contraseñas, y nunca MD5 ni SHA-256 a secas.

De un vistazo

Propiedad MD5 SHA-256 bcrypt
Diseñado para Hash general (1992) Hash general (familia SHA-2, 2001) Almacenar contraseñas (1999)
Salida 128 bits, 32 caracteres hexadecimales 256 bits, 64 caracteres hexadecimales Cadena de 60 caracteres con versión, coste, sal y hash
Velocidad Muy rápido Rápido Lento a propósito, ajustable
Sal Ninguna (la añade usted) Ninguna (la añade usted) Sal de 128 bits integrada
Factor de trabajo Ninguno Ninguno Parámetro de coste: 2^coste rondas
Límite de entrada Prácticamente ninguno Prácticamente ninguno Solo se usan los primeros 72 bytes
Resistencia a colisiones Rota: una colisión se obtiene en segundos Ningún ataque conocido No es su objetivo
Úselo para Solo sumas de comprobación sin fines de seguridad Integridad de archivos, firmas, HMAC, identificadores de contenido Contraseñas

La misma entrada en cada función:

Función Entrada correct horse battery staple
MD5 9cc2ae8a1ba7a93da39b46fc1019c481
SHA-256 c4bbcb1fbec99d65bf59d85c8cb62ee2db963f0fe106f483d9afa73bd4e39a8a
bcrypt, coste 12 $2a$12$dPxev78KNUQr7ZVJEsj1QuHnlgkTm.VnudJ/Cny1cr4OIlm0ogWU.

MD5 y SHA-256 dan siempre la misma salida para la misma entrada. bcrypt da una cadena distinta cada vez porque elige una sal aleatoria nueva; la cadena guarda la versión (2a), el coste (12), la sal de 22 caracteres y el hash de 31 caracteres, es decir, todo lo necesario para verificar la contraseña más tarde. Pruebe los tres con el generador de hash y el generador bcrypt.

MD5

MD5 es rápido y sigue en todas partes, pero en 2004 se publicaron colisiones prácticas (dos entradas distintas con el mismo hash), y después llegaron las colisiones de prefijo elegido, que se usaron para falsificar un certificado de autoridad de certificación en 2008 y para firmar el malware Flame en 2012. Un atacante que pueda influir en la entrada puede hacer que dos archivos compartan hash MD5.

Elija MD5 solo cuando detecte daños accidentales, como una descarga que se corrompió en tránsito, y nadie gane nada falsificando una coincidencia, o cuando un sistema antiguo no publique otra cosa. Incluso entonces, SHA-256 cuesta poco más.

SHA-256

SHA-256 forma parte de la familia SHA-2 normalizada por el NIST. No se conoce ningún ataque práctico de colisión ni de preimagen, y los procesadores modernos tienen instrucciones específicas para calcularlo. En él confían los gestores de paquetes, el nuevo formato de objetos de Git, los certificados TLS, la firma de código y Bitcoin.

Elija SHA-256 cuando necesite una huella de unos datos: verificar una descarga con la calculadora de sumas de comprobación de archivos, almacenamiento direccionado por contenido, firmas digitales o un código de autenticación de mensajes. Para esto último, use HMAC-SHA-256 (pruebe el generador HMAC) en lugar de SHA-256(clave + mensaje), que es vulnerable a ataques de extensión de longitud.

No lo elija para contraseñas. Su rapidez es justo lo que quiere quien intenta descifrarlas.

bcrypt

bcrypt se basa en la costosa preparación de claves del cifrado Blowfish, repetida 2^coste veces. Subir el coste en uno duplica el trabajo: generar un hash en JavaScript tardó unos 55 ms con coste 10, 105 ms con coste 11 y 213 ms con coste 12 en nuestra prueba, y un atacante paga el mismo precio por cada intento. La sal se genera y se guarda automáticamente, así que dos usuarios con la misma contraseña obtienen hashes distintos.

Elija bcrypt cuando almacene contraseñas. Está disponible casi en todas partes, incluidos los archivos de contraseñas de los servidores web (vea el generador de htpasswd). Cuidado con el límite de 72 bytes: las frases de paso más largas se truncan sin aviso. Argon2id, ganador de la Password Hashing Competition, es la opción moderna más robusta donde esté disponible, porque además exige mucha memoria, lo que frena los ataques con GPU.

¿Cuál elegir?

  • Guardar contraseñas de usuarios: bcrypt (coste de 10 a 12 o más), o Argon2id o scrypt. Nunca MD5 ni SHA-256 solos, con sal o sin ella.
  • Comprobar un archivo o una descarga: SHA-256. MD5 solo si es la única suma publicada.
  • Firmar o autenticar mensajes: HMAC-SHA-256 o un esquema de firma de verdad.
  • Generar identificadores o claves de caché a partir del contenido: SHA-256 (truncado si necesita algo más corto).
  • Cualquier cosa relacionada con la seguridad en código nuevo: MD5 no.

Para saber cómo funcionan por dentro, vea Cómo funciona el hashing.

Pruebe estas herramientas

Véase también

  • Guía Cómo funciona el hashing
    Qué hace una función hash, el efecto avalancha mostrado con salida real de SHA-256, qué algoritmos siguen siendo seguros.
  • Glosario Hash
    Un hash es la huella de longitud fija que una función hash calcula de cualquier entrada.
  • Glosario Sal (salt)
    Una sal (salt) es un valor aleatorio único que se añade a una contraseña antes de calcular su hash.
  • Glosario Ataque de fuerza bruta
    Un ataque de fuerza bruta prueba todas las contraseñas o claves posibles, o una enorme lista de las probables, hasta que una funciona.
  • Glosario Suma de comprobación (checksum)
    Una suma de comprobación (checksum) es un valor pequeño calculado a partir de unos datos para detectar errores accidentales al guardarlos o.
  • Glosario HMAC
    HMAC (código de autenticación de mensajes basado en hash) es un hash con clave secreta que prueba que un mensaje viene de quien tiene la.

Preguntas frecuentes

Solo donde nadie intenta engañarle: detectar corrupción accidental, eliminar duplicados de sus propios archivos o comparar con la suma de comprobación que publica un sistema antiguo. Nunca para firmas, certificados, contraseñas ni nada que un atacante pueda manipular.

La sal impide las tablas precalculadas y hace que contraseñas iguales parezcan distintas, pero SHA-256 sigue siendo rápido, así que una base de datos robada puede atacarse con miles de millones de intentos por segundo en GPU. bcrypt hace que cada intento cueste una cantidad de trabajo ajustable.

El más alto que mantenga un inicio de sesión cómodamente rápido en su servidor, a menudo unos cientos de milisegundos. Hoy lo habitual es un coste de 10 a 12; cada punto más duplica el tiempo, así que mida en su propio hardware.

AdSense Placeholder
Slot: footer_leaderboard