Qué hace una función hash
Una función hash transforma una entrada de longitud arbitraria en un digest de tamaño fijo. Es determinista: la misma entrada genera el mismo resultado, mientras que un pequeño cambio debería alterar ampliamente el digest en un hash criptográfico sólido.
El digest es un dato derivado, no texto comprimido que pueda reconstruirse. El comportamiento one-way sostiene muchos usos de integridad, firma e identificación de contenido.
Preimage, second preimage y colisiones
La seguridad se divide en propiedades: resistencia a preimage, second preimage y colisiones. Una colisión aparece cuando dos entradas distintas comparten digest; la búsqueda genérica para n bits sigue aproximadamente el birthday bound 2^(n/2).
Por ello importan tanto el tamaño como la criptografía conocida. MD5 y SHA-1 ya no son apropiados cuando se necesita resistencia criptográfica a colisiones.
Familia SHA y elección
SHA-256 y SHA-512 pertenecen a SHA-2 y siguen siendo opciones habituales para integridad y numerosos protocolos. SHA-3 emplea otra construcción y ofrece una familia estandarizada alternativa.
La elección depende del protocolo, interoperabilidad, librerías fiables y objetivo de seguridad, no solo del número de bits. Evita algoritmos propios o combinaciones no estándar sin análisis.
Hash, checksum y HMAC
Un hash sin autenticar detecta cambios accidentales si el digest esperado llega por un canal confiable. Un atacante que pueda modificar datos y digest puede calcular un valor nuevo.
HMAC combina una función hash con una clave secreta y aporta autenticidad e integridad entre partes que comparten la clave. Un checksum tradicional está orientado principalmente a errores accidentales.
Contraseñas: un hash rápido no basta
Las contraseñas tienen entropía limitada y pueden probarse offline. Funciones rápidas como SHA-256 permiten cantidades enormes de intentos y no son adecuadas para almacenar contraseñas aunque se añada un salt simple.
Se usan funciones adaptativas como Argon2id, scrypt o bcrypt, con salts únicos y costes calibrados. El salt evita tablas precalculadas, pero no sustituye el coste computacional.
Hashing no es cifrado
El cifrado es reversible con una clave y busca confidencialidad. El hashing no está diseñado para recuperar el mensaje y sirve para objetivos distintos como fingerprints e integridad.
Elige la primitiva según la amenaza: cifrado autenticado para datos confidenciales, HMAC para autenticar mensajes, password hashing para credenciales y hash criptográfico para digests públicos.