Qué es una función de hash
Una función de hash toma una entrada de cualquier tamaño y devuelve una cadena de tamaño fijo. Para la misma entrada, siempre devuelve el mismo resultado. Cambiar un solo bit de la entrada cambia drásticamente la salida (efecto avalancha). Esa propiedad las hace útiles como huellas digitales: si dos hashes coinciden, los datos son los mismos.
Las funciones criptográficas también son resistentes a inversión: dado un hash, es computacionalmente imposible deducir la entrada. Y a colisiones: encontrar dos entradas distintas que produzcan el mismo hash es muy difícil... cuando la función no está rota.
MD5, SHA-1, SHA-256 y SHA-512
- MD5 (1991, 128 bits). Roto desde 2004 para resistencia a colisiones. Útil solo para checksums no-adversariales.
- SHA-1 (1995, 160 bits). Roto en 2017 (ataque SHAttered). Google y Microsoft lo retiraron de TLS. No usar para firmas.
- SHA-256 (2001, 256 bits). Parte de la familia SHA-2. Sigue siendo seguro y es el estándar actual en TLS, Bitcoin, Git desde 2018, certificados SSL y firmas digitales.
- SHA-512 (2001, 512 bits). Misma familia que SHA-256 pero con bloques de 1024 bits. Más rápido en hardware de 64 bits y útil cuando necesitás más espacio de hash.
Casos de uso correctos
- Verificar descargas. Cuando un sitio publica el SHA-256 de un instalador, podés calcularlo localmente y comparar.
- Integridad de archivos. Detectar corrupción en transferencias, copias de seguridad y discos.
- Indexación y deduplicación. Almacenes como S3 o Git usan hashes para identificar contenido idéntico sin comparar bytes.
- Pruebas de existencia. Publicar el hash de un documento sirve como timestamp criptográfico.
- Identificadores derivados. Un hash determinístico genera un ID estable a partir de campos de entrada.
Cuándo NO usar estos hashes
Estas funciones son rápidas. Eso es bueno para verificación, pero terrible para contraseñas: un atacante puede probar miles de millones por segundo. Para passwords usá funciones lentas y con sal:
- bcrypt: estándar histórico, factor de costo configurable. Usá Genfy /generador-bcrypt.
- argon2id: ganador del Password Hashing Competition (2015). Resistente a GPU/ASIC.
- scrypt: también resistente a hardware especializado.
Tampoco uses MD5 ni SHA-1 para nada que requiera resistencia a colisiones (firmas, certificados, integridad adversarial). Para todo eso, SHA-256 mínimo.
Cómo se calculan los hashes acá
SHA-1, SHA-256 y SHA-512 los calcula la Web Crypto API del navegador
(crypto.subtle.digest), implementación nativa estándar y rápida. MD5 no
está en Web Crypto (justamente porque está deprecado para crypto), así que se calcula
en JavaScript puro. Todo ocurre en tu equipo, sin enviar nada.
Ejemplo práctico: verificar un instalador
Cuando descargás Node.js o Python desde el sitio oficial, suele aparecer el SHA-256 al lado del link. El proceso correcto:
- Bajá el archivo del sitio oficial (no de un mirror desconocido).
- Abrí una terminal y corré
shasum -a 256 archivo.dmg(Mac/Linux) ocertutil -hashfile archivo.exe SHA256(Windows). - Compará el resultado con el publicado. Si coincide, el archivo no fue alterado.
Para textos cortos podés usar este generador. Para archivos grandes, conviene la herramienta de línea de comandos.