Función hash (Hash Function)
Se lee en aproximadamente 5 minutos
Última actualización: 2026-04-02
Qué es una función hash
Una función hash convierte datos de cualquier longitud en un valor de longitud fija (hash o digest). La misma entrada siempre produce el mismo hash, pero es computacionalmente imposible recuperar los datos originales. Esta propiedad se llama "unidireccionalidad".
Por ejemplo, SHA-256 de hello produce 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824. Si cambia un solo carácter, el hash cambia completamente (efecto avalancha).
Las funciones hash difieren del cifrado: el cifrado es reversible con una clave, el hash es irreversible. Esta diferencia es la razón por la que se eligen funciones hash para almacenamiento de contraseñas y detección de alteraciones.
Comparación de algoritmos principales
Para verificación general: SHA-256. Para contraseñas: bcrypt o Argon2. No usar MD5 ni SHA-1 para seguridad.
Rol en almacenamiento de contraseñas
Los servicios web nunca deben almacenar contraseñas en texto plano. Si la base de datos se filtra, todas las contraseñas quedarían expuestas.
El método correcto es almacenar el hash. Al iniciar sesión, se hashea la contraseña ingresada y se compara con el hash almacenado. El servidor nunca necesita conocer la contraseña original.
Sin embargo, el hash simple es insuficiente: la misma contraseña produce el mismo hash, permitiendo ataques con tablas precalculadas (rainbow tables) que mapean contraseñas comunes a sus hashes.
La contramedida es el "salt": un valor aleatorio único por contraseña que se concatena antes del hash. Misma contraseña con diferente salt produce diferente hash, invalidando las rainbow tables. bcrypt y Argon2 generan y aplican el salt automáticamente.
Uso en blockchain
Blockchain aprovecha las propiedades del hash. Cada bloque contiene el hash del bloque anterior, formando una cadena.
Si se alteran datos de un bloque, su hash cambia y no coincide con el registrado en el siguiente bloque. Alterar un bloque requiere recalcular todos los posteriores, lo cual es prácticamente imposible sin superar la capacidad computacional de toda la red.
En el minado de Bitcoin (Proof of Work), se compite por encontrar una entrada cuyo hash SHA-256 cumpla ciertas condiciones (cierta cantidad de ceros al inicio). La unidireccionalidad del hash obliga a probar por fuerza bruta, y este coste computacional sustenta la seguridad del blockchain.
Ataques rainbow table y salt
El ataque rainbow table precalcula hashes de contraseñas comunes y los compara con hashes filtrados para identificar las contraseñas originales.
- Salt: Valor aleatorio añadido a cada contraseña antes del hash. Misma contraseña con diferente salt = diferente hash. Invalida tablas precalculadas.
- Pepper: Valor secreto común a toda la aplicación, añadido además del salt. Si la BD se filtra pero el pepper está en otro lugar, la decodificación se dificulta aún más.
- Stretching: Repetir el hash miles de veces, aumentando intencionalmente el tiempo por cálculo. El factor de coste de bcrypt y las iteraciones de PBKDF2 son ejemplos.
Usar un gestor de contraseñas para generar contraseñas largas y aleatorias hace extremadamente improbable que aparezcan en rainbow tables. Contra fuerza bruta, la longitud y complejidad son la mejor defensa.
Conceptos erróneos comunes
- Hash y cifrado son lo mismo
- El cifrado es reversible con una clave; el hash es irreversible. Para contraseñas se usa hash; para proteger comunicaciones, cifrado. Es importante distinguir según el uso.
- Con SHA-256 las contraseñas están seguras
- SHA-256 es excelente como hash general pero inadecuado para contraseñas: es demasiado rápido, permitiendo miles de millones de intentos por segundo con GPU. Para contraseñas se deben usar bcrypt o Argon2, intencionalmente lentos.