Qué es un hash y por qué está en todas partes en la tecnología
Probablemente has visto cadenas como esta:
e3b0c44298fc1c149afbf4c8996fb924
27ae41e4649b934ca495991b7852b855
Aparecen en descargas de software ("verifica el hash SHA-256"), en conversaciones sobre blockchain, en discusiones sobre seguridad de contraseñas y en incontables herramientas de desarrollo. Pero ¿qué es realmente un hash y por qué es tan fundamental para la tecnología moderna?
El concepto en lenguaje sencillo
Una función hash toma cualquier entrada, una palabra, una frase, un archivo entero, y produce una salida de longitud fija llamada valor hash (también llamado digest, checksum o huella digital). Las propiedades clave son:
- Determinista. La misma entrada siempre produce la misma salida.
- Longitud fija. Sin importar lo grande que sea la entrada, la salida siempre tiene el mismo tamaño.
- Unidireccional. No puedes reconstruir la entrada original a partir de la salida hash.
- Efecto avalancha. Un cambio mínimo en la entrada produce un hash completamente diferente.
Piensa en ello como una huella dactilar para datos. Igual que tu huella dactilar te identifica de forma única pero no puede usarse para reconstruir tu cara, un hash identifica de forma única un dato pero no puede usarse para reconstruir el original.
Un ejemplo sencillo
Esto es lo que la función hash SHA-256 hace con dos entradas muy similares:
| Entrada | Hash SHA-256 (primeros 16 caracteres) |
|---|---|
| "Hello" | 185f8db32271fe25... |
| "hello" | 2cf24dba5fb0a30e... |
| "hello!" | ce06092fb948d9ff... |
Cambiar un solo carácter (H mayúscula a h minúscula) o añadir un signo de exclamación produce un hash completamente diferente. No hay patrón, no hay relación predecible. Este es el efecto avalancha en acción.
¿Sabías que? El hash SHA-256 de una entrada vacía (literalmente nada) es e3b0c44298fc1c14.... Esta es una constante bien conocida. Cada implementación de SHA-256 en el mundo produce exactamente esta misma salida para una entrada vacía.
Algoritmos hash comunes
MD5
- Salida: 128 bits (32 caracteres hexadecimales)
- Estado: Roto para fines de seguridad. Las colisiones (entradas diferentes que producen el mismo hash) pueden generarse en segundos.
- Todavía se usa para: Comprobaciones de integridad de archivos donde la seguridad no es una preocupación (por ejemplo, verificar que una descarga no se corrompió).
SHA-1
- Salida: 160 bits (40 caracteres hexadecimales)
- Estado: Obsoleto para seguridad. Se han demostrado colisiones.
- Todavía se usa para: Sistemas heredados, identificadores de commits en Git.
SHA-256
- Salida: 256 bits (64 caracteres hexadecimales)
- Estado: Estándar actual. Sin ataques prácticos conocidos.
- Usado para: Almacenamiento de contraseñas, firmas digitales, blockchain, verificación de archivos, certificados TLS.
SHA-512
- Salida: 512 bits (128 caracteres hexadecimales)
- Estado: Estándar actual. Margen de seguridad aún mayor que SHA-256.
- Usado para: Aplicaciones de alta seguridad, algunos esquemas de hashing de contraseñas.
Advertencia MD5 y SHA-1 nunca deben usarse para fines de seguridad (contraseñas, firmas digitales, certificados). Están criptográficamente rotos. Usa SHA-256 o SHA-512 para cualquier cosa relacionada con seguridad.
Dónde se usan los hashes
Almacenamiento de contraseñas
Cuando creas una cuenta, el sitio web no almacena (o no debería almacenar) tu contraseña real. En su lugar, almacena el hash de tu contraseña. Cuando inicias sesión, el sistema calcula el hash de la contraseña que introduces y lo compara con el hash almacenado. Si coinciden, accedes.
Esto significa que incluso si una base de datos es vulnerada, los atacantes obtienen hashes, no contraseñas. No pueden revertir el hash para encontrar tu contraseña (aunque pueden intentar adivinarla calculando hashes de contraseñas comunes y comparando).
El hashing moderno de contraseñas va más allá con algoritmos como bcrypt, scrypt y Argon2, que añaden salt (datos aleatorios) y son deliberadamente lentos para hacer impracticable la adivinación por fuerza bruta.
Verificación de archivos
Cuando descargas software, el sitio web a menudo proporciona un hash SHA-256 del archivo. Después de descargar, calculas el hash del archivo tú mismo y comparas. Si los hashes coinciden, el archivo es exactamente lo que el editor pretendía. Si difieren, el archivo fue corrompido o manipulado durante la descarga.
Esperado: a1b2c3d4e5f6...
Tu archivo: a1b2c3d4e5f6... ✓ Coincide — el archivo es auténtico
Blockchain y criptomonedas
Cada bloque en una blockchain contiene el hash del bloque anterior, creando una cadena inquebrantable. Si alguien intenta alterar una transacción pasada, el hash de ese bloque cambia, lo que rompe la cadena desde ese punto en adelante, haciendo la manipulación inmediatamente detectable.
La minería de Bitcoin es esencialmente una competición para encontrar una entrada que produzca un hash SHA-256 que comience con un cierto número de ceros.
Firmas digitales
Cuando firmas digitalmente un documento, en realidad no cifras el documento entero con tu clave privada. En su lugar, se calcula el hash del documento y se cifra el hash. Esto es mucho más rápido y produce una firma compacta.
Deduplicación de datos
Los servicios de almacenamiento en la nube usan hashes para detectar archivos duplicados. Si dos usuarios suben el mismo archivo, tiene el mismo hash, y el servicio solo necesita almacenar una copia.
Control de versiones Git
Cada commit, archivo y árbol en Git se identifica por su hash SHA-1. Así es como Git sabe si un archivo ha cambiado y cómo rastrea toda la historia de un proyecto.
¿Sabías que? Git está migrando gradualmente de SHA-1 a SHA-256. La transición comenzó porque se demostraron colisiones SHA-1 en 2017, lo que teóricamente permitiría a alguien crear dos commits diferentes con el mismo identificador.
El problema de la irreversibilidad (y por qué importa)
La naturaleza unidireccional de los hashes es tanto su mayor fortaleza como una fuente frecuente de confusión.
No puedes "descifrar" un hash. Un hash no es cifrado. El cifrado es bidireccional: cifras con una clave, descifras con una clave. El hashing es unidireccional: puedes calcular el hash a partir de la entrada, pero no puedes calcular la entrada a partir del hash.
La única forma de "revertir" un hash es adivinar la entrada original, calcular el hash de tu suposición y comprobar si coincide. Para entradas cortas y simples (como contraseñas comunes), esto es factible. Para entradas largas y aleatorias, es computacionalmente imposible.
Por eso la longitud de la contraseña importa tanto. El hash de "password123" puede encontrarse probando contraseñas comunes. El hash de "j8#kL9$mN2@pQ5&" llevaría más tiempo que la edad del universo encontrarlo adivinando.
Pruébalo tú mismo
La mejor forma de entender los hashes es experimentar. Calcula el hash de una palabra, luego cambia un carácter y observa cómo la salida cambia completamente. Calcula el hash de un archivo antes y después de modificarlo y compara la diferencia.
Consejo Genera y verifica hashes para cualquier texto o archivo: Cómo generar y verificar hashes. Prueba SHA-256, MD5, SHA-512 y más — al instante, gratis, en tu navegador.
Explora los hashes de forma práctica:
Gratis, instantáneo y sin necesidad de registro.