Saltar al contenido
GEEKnodes

Informática

Qué es un hash SHA-256 y cómo verificar que una descarga es buena

Qué es una función hash, por qué MD5 y SHA-1 ya no sirven para seguridad y cómo comprobar el SHA-256 de una descarga en Windows, macOS y Linux.

Descargas una ISO de 5 GB, la grabas en un USB y el instalador falla a mitad. ¿Se corrompió la descarga o el problema es otro? Junto a muchas descargas aparece una cadena larga de letras y números: el hash. En esta guía verás qué es, por qué MD5 ya no vale para seguridad y cómo comprobarlo en Windows, macOS y Linux con un solo comando.

En resumen

  • Un hash es una huella digital del fichero: si cambia un solo bit, cambia el hash entero.
  • Para comprobar integridad usa SHA-256; MD5 y SHA-1 están rotos frente a ataques deliberados.
  • El hash solo protege si lo obtienes de una fuente fiable; si no, lo que da garantías es la firma digital.

Qué es una función hash

Una función hash toma datos de cualquier tamaño (un texto, una foto, una ISO de varios gigas) y devuelve un resultado de longitud fija. Con SHA-256 siempre son 256 bits, que se escriben como 64 caracteres hexadecimales.

Una función hash convierte un fichero de cualquier tamaño en una huella de 64 caracteres; cambiar una letra cambia todo el resultado
Entrada de cualquier tamaño, salida de longitud fija y efecto avalancha

Tiene cuatro propiedades que la hacen útil:

  1. Determinista: el mismo fichero da siempre el mismo hash, en cualquier ordenador y sistema.
  2. Efecto avalancha: cambiar un bit produce un hash completamente distinto, no uno parecido.
  3. Unidireccional: a partir del hash no se puede reconstruir el fichero.
  4. Resistente a colisiones: debe ser inviable encontrar dos ficheros distintos con el mismo hash.

Mira el efecto avalancha con dos textos que solo se diferencian en una letra:

SHA-256("hola") = b221d9dbb083a7f33428d7c2a3c3198ae925614d70210e28716ccaa7cd4ddb79
SHA-256("Hola") = e633f4fc79badea1dc5db970cf397c8248bac47cc3acf9915ba60b5d76b0e88f

No hay ningún parecido. Por eso basta con comparar unos cuantos caracteres del principio y del final para detectar que algo ha cambiado, aunque lo correcto es comparar el hash completo.

Hash no es cifrado. Cifrar es reversible con la clave; un hash no se «descifra». Tampoco es compresión: 64 caracteres no pueden contener un fichero de 5 GB.

Algoritmos habituales

AlgoritmoLongitudCaracteres hex¿Seguro hoy?Uso razonable
MD5128 bits32No (colisiones desde 2004)Detectar corrupción accidental, cachés
SHA-1160 bits40No (colisión práctica en 2017)Sistemas antiguos, compatibilidad
SHA-256256 bits64SíVerificar descargas, firmas, certificados
SHA-512512 bits128SíIgual que SHA-256

La longitud del hash publicado te dice qué algoritmo es: 32 caracteres es casi seguro MD5, 64 es SHA-256.

Por qué MD5 y SHA-1 ya no sirven para seguridad

En 2004 un equipo de investigadores demostró cómo fabricar colisiones en MD5: dos ficheros distintos con el mismo hash. Hoy se generan en segundos con un portátil. En 2012 el malware Flame usó una colisión MD5 para falsificar un certificado y hacerse pasar por software legítimo.

SHA-1 aguantó más, pero en 2017 se publicó la primera colisión práctica: dos PDF diferentes con idéntico SHA-1. Desde entonces navegadores y autoridades de certificación lo han retirado.

¿Qué significa esto en la práctica?

  • Contra corrupción accidental (un corte de red, un disco con sectores dañados), MD5 sigue detectando el error. Los fallos aleatorios no fabrican colisiones.
  • Contra manipulación deliberada, MD5 y SHA-1 no garantizan nada. Un atacante podría preparar una versión maliciosa con el mismo hash.

Si el proyecto publica varios hashes, usa siempre el SHA-256 o el SHA-512.

Cómo calcular el hash en cada sistema

Windows (PowerShell)

PowerShell trae Get-FileHash, que usa SHA-256 por defecto:

Get-FileHash .\ubuntu.iso
Get-FileHash .\ubuntu.iso -Algorithm SHA512

Para no comparar a ojo, deja que PowerShell compare por ti. El operador -eq no distingue mayúsculas de minúsculas, así que da igual cómo esté escrito el hash publicado:

(Get-FileHash .\ubuntu.iso).Hash -eq "pega_aqui_el_hash_publicado"

Devuelve True si coincide.

Windows (símbolo del sistema)

Si prefieres la consola clásica, certutil hace lo mismo:

certutil -hashfile ubuntu.iso SHA256

Admite MD5, SHA1, SHA256, SHA384 y SHA512. Escríbelo en mayúsculas para evitar sorpresas en versiones antiguas.

macOS

shasum -a 256 ~/Downloads/ubuntu.iso

También puedes usar shasum -a 512 o md5 si el proyecto solo publica MD5.

Linux

sha256sum ubuntu.iso
sha512sum ubuntu.iso
md5sum ubuntu.iso

Resumen de comandos

SistemaSHA-256Comprobar contra fichero
Windows PowerShellGet-FileHash ficheroComparar con -eq
Windows CMDcertutil -hashfile fichero SHA256Manual
macOSshasum -a 256 ficheroshasum -a 256 -c fichero.sha256
Linuxsha256sum ficherosha256sum -c fichero.sha256

Comprobar con un fichero .sha256 o SHA256SUMS

Muchos proyectos no ponen el hash en la web, sino en un fichero de texto: ubuntu.iso.sha256, SHA256SUMS o similar. Su formato es sencillo: el hash, dos espacios y el nombre del fichero.

Pasos para verificar: descargar la ISO y su fichero .sha256 en la misma carpeta, ejecutar la comprobación y obtener OK o FAILED
Fichero y .sha256 en la misma carpeta, un comando y resultado OK o FAILED
3f1a9c...e07b  ubuntu.iso

Pasos:

  1. Descarga el fichero y su .sha256 en la misma carpeta.
  2. Abre una terminal en esa carpeta.
  3. Ejecuta la comprobación:
sha256sum -c ubuntu.iso.sha256

En macOS, shasum -a 256 -c ubuntu.iso.sha256. Si todo va bien verás ubuntu.iso: OK. Si sale FAILED, el fichero no coincide.

Cuando SHA256SUMS lista muchos ficheros y solo has bajado uno, añade --ignore-missing para que no se queje del resto:

sha256sum -c --ignore-missing SHA256SUMS

Los límites del hash: cuándo no basta

Aquí está lo que casi nadie explica. Un hash demuestra que tu fichero es idéntico al que generó ese hash. No demuestra quién lo generó.

Si atacan la web de descargas pueden cambiar la ISO y el hash; la firma con clave del proyecto lo detecta
El hash de la misma web no protege si la web está comprometida; la firma digital sí

Si un atacante compromete la web de descargas, puede cambiar la ISO y también el hash publicado en la misma página. Tu comprobación saldrá perfecta y habrás instalado la versión manipulada. Ha pasado en casos reales de servidores comprometidos.

Formas de reducir ese riesgo:

  • Obtén el hash por otro canal: la web oficial por HTTPS cuando la descarga viene de un mirror, el anuncio del proyecto, su repositorio de código.
  • Verifica la firma digital cuando exista. El proyecto firma el fichero de hashes con su clave privada y tú lo compruebas con su clave pública, que no está en el mismo servidor:
gpg --verify SHA256SUMS.gpg SHA256SUMS

Si la firma es válida y la clave es la oficial del proyecto, el fichero de hashes es auténtico, y con él la ISO. En Windows, los ejecutables firmados muestran el editor verificado en Propiedades › Firmas digitales.

Qué compruebasDetecta corrupciónDetecta manipulación
MD5 / SHA-1SíNo
SHA-256 de la misma webSíSolo si la web no está comprometida
SHA-256 por otro canalSíSí, en la práctica
Firma digital verificadaSíSí

Errores habituales

  • Calcular el hash de otro fichero: el navegador renombra a ubuntu (1).iso si ya existía. Revisa el nombre exacto.
  • Comparar algoritmos distintos: calculas SHA-256 y lo comparas con un MD5 publicado. Nunca coincidirán. Fíjate en la longitud.
  • Descarga aún sin terminar: el hash de un fichero a medias no sirve. Espera a que acabe.
  • Fichero .sha256 en otra carpeta: -c busca el fichero por el nombre que aparece dentro, en el directorio actual.
  • Saltos de línea de Windows: un .sha256 editado en Windows puede dar FAILED en Linux por el retorno de carro final. Vuelve a descargarlo en lugar de editarlo.
  • Pensar que hash correcto significa programa seguro: solo garantiza que es el fichero publicado. Si el autor original incluye algo malicioso, el hash también lo «certifica».

Relacionados

Preferencias de accesibilidad

Perfiles rápidos

Texto y lectura

Tamaño del texto
Por defecto
Altura de línea
Por defecto
Espaciado entre letras
Por defecto
Espaciado entre palabras
Por defecto

Color

Movimiento y orientación

Cursor