¿Qué es SHA-256? Cómo funciona, MD5 vs SHA-256 y checksums

SHA-256 es una función hash criptográfica que convierte cualquier entrada, desde una sola letra hasta un archivo de varios gigabytes, en un valor fijo de 256 bits, que normalmente se escribe como 64 caracteres hexadecimales. Pertenece a la familia SHA-2, que el NIST publicó en FIPS 180-2 en 2002. La misma entrada siempre produce el mismo hash, y a partir del hash no se puede recuperar la entrada.

Pruébalo gratis: Hash de texto en línea Gratis y sin necesidad de cuenta.

Entonces, ¿qué es SHA-256 en la práctica y para qué sirve? Sobre todo para demostrar que unos datos no han cambiado: los checksums de descargas, los certificados TLS, Git, Bitcoin y las peticiones firmadas a APIs dependen de él. Esta guía explica cómo funciona SHA-256, en qué se diferencian MD5 vs SHA-256, qué es un checksum y cómo verificar un checksum SHA-256 en Windows, macOS y Linux. Cada hash de este artículo se calculó con código y se comprobó dos veces. Para probar los ejemplos, pégalos en el generador de hash gratuito.

¿Qué es SHA-256?

SHA significa Secure Hash Algorithm (algoritmo de hash seguro). SHA-2 fue diseñado por la NSA y estandarizado por el NIST, primero en FIPS 180-2 (2002) y hoy en FIPS 180-4. La familia tiene varios miembros, con el nombre de su tamaño de salida: SHA-224, SHA-256, SHA-384 y SHA-512, además de SHA-512/224 y SHA-512/256. SHA-256 es el más utilizado.

Un hash funciona como una huella digital de los datos. Este es un ejemplo de hash SHA-256 para la palabra "hello" y para una entrada vacía:

SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("")      = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Los dos resultados tienen la misma longitud, porque la salida siempre es de 256 bits. Son 32 bytes y, como un dígito hexadecimal guarda 4 bits, hacen falta 256 ÷ 4 = 64 caracteres hexadecimales.

Cómo funciona SHA-256, en resumen

  1. Relleno. Al mensaje se le añade un bit 1, luego ceros y por último su longitud original como número de 64 bits, de modo que el total sea múltiplo de 512 bits.
  2. Bloques. El mensaje rellenado se divide en bloques de 512 bits.
  3. Compresión. Cada bloque pasa por 64 rondas de operaciones sencillas sobre palabras de 32 bits: rotaciones de bits, XOR, AND y suma módulo 2³². Estas rondas mezclan el bloque en un estado interno de ocho palabras de 32 bits (8 × 32 = 256 bits).
  4. Salida. Tras el último bloque, el estado es el hash.

Cada bloque modifica el estado con el que empieza el siguiente, así que un cambio en cualquier parte de la entrada afecta al resultado.

Propiedades clave de SHA-256

El efecto avalancha es fácil de ver. "hello" y "Hello" se diferencian en una letra, y las letras h (01101000) y H (01001000) solo se diferencian en un bit:

SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("Hello") = 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969

Los dos hashes difieren en 125 de sus 256 bits, cerca de la mitad que cabría esperar de una salida aleatoria, y en 61 de los 64 caracteres hexadecimales.

Un límite: la resistencia a preimagen protege datos impredecibles, no cadenas cortas y fáciles de adivinar. El hash de "hello" aparece en cualquier tabla de búsqueda en línea, porque cualquiera puede calcular el hash de palabras comunes y guardar los resultados.

¿Qué es un checksum?

Un checksum (suma de comprobación) es un valor corto que se calcula a partir de unos datos para saber más adelante si han cambiado. Los checksums sencillos como CRC32, que se usan en archivos ZIP y paquetes de red, detectan errores accidentales como una descarga defectuosa o un disco dañado, pero son fáciles de falsificar a propósito.

SHA-256 usado como checksum también protege contra la manipulación deliberada, porque nadie puede crear un archivo modificado que coincida con el valor original. Hay una condición: el hash esperado debe venir de una fuente de confianza, como el sitio HTTPS oficial del proyecto o un archivo de checksums firmado. Un atacante que controle la página de descarga puede cambiar el archivo y el hash publicado a la vez.

Dónde se usa SHA-256

MD5 vs SHA-256 (y SHA-1, SHA-512)

Algoritmo Salida Caracteres hex Publicado Estado de seguridad
MD5 128 bits 32 1992 (RFC 1321) Roto: colisiones prácticas desde 2004
SHA-1 160 bits 40 1995 (FIPS 180-1) Roto: primera colisión pública en 2017
SHA-256 256 bits 64 2002 (FIPS 180-2) Seguro: sin colisiones conocidas
SHA-512 512 bits 128 2002 (FIPS 180-2) Seguro: sin colisiones conocidas

La misma entrada con los cuatro:

MD5("hello")     = 5d41402abc4b2a76b9719d911017c592
SHA-1("hello")   = aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-512("hello") = 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043

¿Qué es MD5? MD5 es un hash de 128 bits más antiguo, de 1992. En 2004, un equipo dirigido por Xiaoyun Wang mostró cómo construir dos entradas distintas con el mismo hash MD5, y trabajos posteriores hicieron que esas colisiones se calcularan rápidamente. MD5 no debe usarse donde alguien pueda fabricar a propósito un archivo que coincida.

SHA-1 resistió más tiempo. En febrero de 2017, el CWI de Ámsterdam y Google anunciaron SHAttered: dos archivos PDF distintos con el mismo hash SHA-1. El NIST recomienda sustituir SHA-1 por completo antes del 31 de diciembre de 2030.

SHA-256 no tiene ningún ataque práctico conocido. Una búsqueda de colisiones por fuerza bruta necesitaría unos 2¹²⁸ intentos, algo muy lejos del alcance de cualquier ordenador actual.

Así que, al elegir entre MD5 vs SHA-256, usa SHA-256 para todo lo relacionado con la seguridad. MD5 sigue sirviendo cuando nadie intenta engañarte, por ejemplo para detectar corrupción accidental o encontrar archivos duplicados en tu propio disco.

SHA-256 y SHA-512 son seguros; SHA-256 es la opción por defecto con más soporte. SHA-3 (FIPS 202, 2015) es un diseño distinto, estandarizado como alternativa y no porque SHA-2 estuviera roto.

Hash no es cifrado

El cifrado, como AES, es reversible: con la clave correcta recuperas los datos originales. Un hash no tiene clave ni vuelta atrás; siempre ocupa 256 bits por grande que sea la entrada, así que los datos originales no están en la salida. Las webs que dicen "descifrar SHA-256" solo buscan hashes de palabras y contraseñas comunes que calcularon de antemano.

Por qué SHA-256 a secas no sirve para contraseñas

SHA-256 está diseñado para ser rápido, y ese es justamente el problema con las contraseñas. Si se filtra una base de datos con hashes SHA-256 de contraseñas, los atacantes pueden probar miles de millones de intentos por segundo con tarjetas gráficas. Sin sal, además, dos usuarios con la misma contraseña obtienen el mismo hash.

Las contraseñas necesitan una función de hash lenta y con sal: Argon2id, scrypt o bcrypt (o PBKDF2 con muchas iteraciones). Hacen que cada intento sea costoso. Para conocer los detalles de la sal y qué pasa cuando se filtra una contraseña con hash, lee qué ocurre cuando se aplica hash a una contraseña.

Cómo verificar un checksum SHA-256

  1. Copia el valor SHA-256 esperado de la página oficial de descarga o del archivo de checksums.
  2. Calcula el hash del archivo que has descargado.
  3. Compara los 64 caracteres, no solo los primeros. En hexadecimal, mayúsculas y minúsculas dan igual.

Si los valores no coinciden, borra el archivo y vuelve a descargarlo de la fuente oficial.

Windows

En el Símbolo del sistema:

certutil -hashfile ubuntu.iso SHA256

Añade siempre SHA256: sin él, certutil usa SHA-1. En PowerShell, Get-FileHash usa SHA-256 por defecto y puede hacer la comparación por ti:

Get-FileHash .\ubuntu.iso
(Get-FileHash .\ubuntu.iso).Hash -eq "paste-the-expected-hash-here"

La segunda línea muestra True o False; -eq no distingue mayúsculas de minúsculas, así que la salida en mayúsculas coincide con un checksum en minúsculas.

macOS

shasum -a 256 ubuntu.iso
shasum -a 256 -c ubuntu.iso.sha256

La primera línea muestra el hash. La segunda lo compara con un archivo de checksums, que contiene el hash, dos espacios y el nombre del archivo.

Linux

sha256sum ubuntu.iso
sha256sum -c SHA256SUMS --ignore-missing

Con -c, sha256sum lee el archivo de checksums y muestra ubuntu.iso: OK o FAILED. --ignore-missing omite las entradas de archivos que no has descargado.

Una trampa habitual al calcular el hash de un texto en la terminal: echo "hello" | sha256sum da 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 y no el valor 2cf24d… de arriba, porque echo añade un salto de línea. Usa printf 'hello' | sha256sum para calcular el hash de exactamente cinco bytes.

En el navegador

El generador de hash MD5 y SHA-256 calcula MD5, SHA1, SHA224, SHA256, SHA384, SHA512, Keccak-256 y RIPEMD160 a la vez, en modo Texto o Archivo.

Dos límites: el archivo entero se carga primero en memoria, por lo que para ISO de varios gigabytes son mejor opción las herramientas de línea de comandos de arriba. Y la fila llamada SHA3 es Keccak-512 con el relleno original, que difiere de NIST SHA3-512.

Preguntas frecuentes

¿Se puede descifrar o revertir SHA-256?

No. SHA-256 es una función unidireccional sin clave. Los "descifradores de SHA-256" solo encuentran entradas que ya estaban en sus tablas de búsqueda, lo que funciona con palabras comunes y contraseñas débiles, pero no con datos aleatorios.

¿SHA-256 sigue siendo seguro?

Sí. No se conoce ningún ataque práctico de colisión ni de preimagen contra SHA-256, y el NIST lo sigue aprobando. Incluso un gran ordenador cuántico con el algoritmo de Grover, según lo que se sabe hoy, solo reduciría el esfuerzo de preimagen de unas 2²⁵⁶ a unas 2¹²⁸ operaciones.

¿Por qué un hash SHA-256 tiene 64 caracteres?

El hash tiene 256 bits. En hexadecimal, cada carácter representa 4 bits, así que 256 ÷ 4 = 64 caracteres. El mismo valor son 32 bytes, o 44 caracteres en Base64.

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

SHA-2 es la familia de funciones hash definida en FIPS 180-4. SHA-256 es uno de sus miembros, junto con SHA-224, SHA-384 y SHA-512. Cuando un programa dice "SHA-2" sin indicar tamaño, normalmente se refiere a SHA-256.

¿Pueden dos archivos tener el mismo hash SHA-256?

En teoría sí, porque hay infinitos archivos posibles y solo 2²⁵⁶ hashes posibles. En la práctica, nadie ha encontrado nunca dos entradas distintas con el mismo hash SHA-256, así que si los hashes coinciden se considera prueba de que los archivos son idénticos.

Pruébalo gratis: Hash de texto en línea Gratis y sin necesidad de cuenta.