
Funciones hash criptograficas explicadas - SHA-256, SHA-512 y mas
📷 Joppe Beurskens / PexelsFunciones hash criptograficas explicadas - SHA-256, SHA-512 y mas
Guia completa sobre funciones hash criptograficas incluyendo SHA-256, SHA-512, MD5 y mas. Aprende sobre propiedades de hash, casos de uso como checksums, hashing de contrasenas, blockchain y firmas digitales.
Introduccion: Que son las funciones hash?
Una funcion hash es una funcion matematica que toma una entrada de cualquier tamano y produce una salida de tamano fijo, llamada hash, digest o checksum. Las funciones hash criptograficas anaden propiedades de seguridad que las hacen invaluables para el desarrollo de software, la ciberseguridad, la tecnologia blockchain y la verificacion de integridad de datos.
Las funciones hash estan en todas partes de la informatica moderna. Cada vez que inicias sesion en un sitio web, verificas una descarga de archivo, haces commit de codigo en Git o interactuas con una blockchain, las funciones hash trabajan entre bastidores. Comprender como funcionan y cuando usar diferentes algoritmos es conocimiento esencial para todo desarrollador.
Quieres generar hashes rapidamente? Prueba nuestro generador de hash, que soporta MD5, SHA-1, SHA-256, SHA-384 y SHA-512.
Propiedades fundamentales de las funciones hash criptograficas
Una buena funcion hash criptografica debe tener varias propiedades clave que la distinguen de un simple checksum.
1. Determinista
La misma entrada siempre produce la misma salida. Si aplicas SHA-256 a la cadena "Hello, World!", obtendras el mismo hash cada vez, en cualquier maquina, en cualquier lenguaje de programacion.
Input: "Hello, World!"
SHA-256: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
2. Tamano de salida fijo
Sin importar el tamano de la entrada, la salida siempre tiene la misma longitud:
| Algoritmo | Tamano (bits) | Tamano (car. hex) |
|---|---|---|
| MD5 | 128 | 32 |
| SHA-1 | 160 | 40 |
| SHA-256 | 256 | 64 |
| SHA-384 | 384 | 96 |
| SHA-512 | 512 | 128 |
| SHA-3-256 | 256 | 64 |
| BLAKE3 | 256 (por defecto) | 64 |
3. Resistencia a la preimagen
Dado un valor hash, deberia ser computacionalmente imposible encontrar una entrada que lo produzca. Las funciones hash son funciones unidireccionales.
4. Resistencia a la segunda preimagen
Dada una entrada y su hash, deberia ser imposible encontrar otra entrada que produzca el mismo hash.
5. Resistencia a colisiones
Deberia ser imposible encontrar dos entradas diferentes que produzcan el mismo hash.
6. Efecto avalancha
Un pequeno cambio en la entrada debe causar un cambio dramatico en la salida.
Input: "Hello, World!"
SHA-256: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
Input: "Hello, World?" (! cambiado a ?)
SHA-256: 4a6e2ef4e4fa0e534f1d1989f453daa87f36e5e4e35b3dcb3d82f22d12654083
Estos dos hashes lucen completamente diferentes a pesar de que las entradas difieren en un solo caracter. Verificalo tu mismo con nuestro generador de hash.
La familia SHA de funciones hash
La familia Secure Hash Algorithm (SHA) es el conjunto de funciones hash criptograficas mas utilizado. Fue desarrollada por la NSA y publicada por NIST.
SHA-1 (Obsoleto)
SHA-1 produce un hash de 160 bits. Fue el estandar durante anos pero ahora se considera roto.
- Estado: Obsoleto — no usar para nuevas aplicaciones
- Colision encontrada: Google y CWI Amsterdam en 2017 (ataque SHAttered)
- Aun en uso: Git usa SHA-1 para IDs de objetos (en transicion a SHA-256)
SHA-256
SHA-256 es la funcion hash mas utilizada hoy. Es parte de la familia SHA-2 y produce un hash de 256 bits.
- Estado: Seguro y ampliamente recomendado
- Usado en: Bitcoin, certificados TLS, firma de codigo, verificacion de integridad
- Salida: 64 caracteres hexadecimales
// JavaScript: Generar hash SHA-256
async function sha256(message) {
const encoder = new TextEncoder();
const data = encoder.encode(message);
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
const hash = await sha256('Hello, World!');
console.log(hash);
// dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
SHA-512
SHA-512 produce un hash de 512 bits. En sistemas de 64 bits, es a menudo mas rapido que SHA-256 porque procesa datos en bloques mas grandes.
- Estado: Seguro
- Rendimiento: A menudo mas rapido que SHA-256 en sistemas de 64 bits
- Salida: 128 caracteres hexadecimales
SHA-3 (Keccak)
SHA-3 es el miembro mas reciente de la familia SHA, basado en el algoritmo Keccak. Usa una construccion fundamentalmente diferente (construccion esponja) a SHA-2.
- Estado: Seguro, estandarizado en 2015
- Uso: Opcion de respaldo si SHA-2 fuera comprometido alguna vez
MD5: Por que sigue existiendo
MD5 produce un hash de 128 bits y ahora esta criptograficamente roto, pero aun se usa para propositos no relacionados con seguridad.
NO usar MD5 para:
- Hashing de contrasenas
- Firmas digitales
- Cualquier aplicacion critica de seguridad
MD5 es aceptable para:
- Checksums no criptograficos
- Almacenamiento direccionable por contenido
- Deduplicacion
- Compatibilidad con sistemas heredados
BLAKE3: La alternativa moderna
BLAKE3 ofrece mejoras de rendimiento significativas respecto a SHA-2 y SHA-3 manteniendo fuertes propiedades de seguridad.
Ventajas de BLAKE3:
- Extremadamente rapido: 4-8x mas rapido que SHA-256 en CPUs modernos
- Paralelizable: Aprovecha instrucciones SIMD y multiples nucleos
- Seguro: Basado en BLAKE2 y el cifrado de flujo ChaCha
Casos de uso
1. Integridad de archivos y checksums
Las funciones hash verifican que los archivos no hayan sido corrompidos o manipulados durante la transferencia.
# Generar checksum
sha256sum ubuntu-24.04.iso > checksum.txt
# Verificar checksum
sha256sum -c checksum.txt
# ubuntu-24.04.iso: OK
2. Hashing de contrasenas
Importante: NO uses SHA-256 directo para hashing de contrasenas. Usa una funcion dedicada con salado.
Algoritmos recomendados:
| Algoritmo | Estado | Caracteristica clave |
|---|---|---|
| Argon2id | Mejor opcion | Intensivo en memoria, resistente a GPU |
| bcrypt | Probado | Ampliamente soportado |
| scrypt | Bueno | Intensivo en memoria |
| PBKDF2 | Aceptable | Aprobado por NIST |
3. Blockchain y criptomonedas
Bitcoin usa SHA-256 en su mecanismo de consenso Proof-of-Work.
4. Firmas digitales
Las firmas digitales hacen hash del mensaje y firman el hash en lugar del mensaje completo.
5. Almacenamiento direccionable por contenido
Git, IPFS y Docker usan funciones hash para direccionar contenido, proporcionando deduplicacion e inmutabilidad.
6. HMAC
HMAC combina una funcion hash con una clave secreta para proporcionar integridad y autenticacion de datos.
Consideraciones de seguridad
Vulnerabilidades conocidas
| Algoritmo | Estado | Ataques conocidos |
|---|---|---|
| MD5 | Roto | Ataques de colision, falsificacion practica |
| SHA-1 | Roto | Ataque de colision SHAttered (2017) |
| SHA-256 | Seguro | Sin ataques practicos conocidos |
| SHA-512 | Seguro | Sin ataques practicos conocidos |
| SHA-3 | Seguro | Sin ataques practicos conocidos |
| BLAKE3 | Seguro | Sin ataques practicos conocidos |
Ataques de extension de longitud
SHA-256 y SHA-512 (pero no SHA-3 ni BLAKE3) son vulnerables a ataques de extension de longitud. Solucion: Use HMAC en lugar de funciones hash crudas para autenticacion.
// Vulnerable a ataque de extension de longitud
const token = sha256(secret + message);
// Seguro: Usar HMAC
const token = hmacSha256(secret, message);
Comparacion de rendimiento
| Algoritmo | Velocidad (MB/s) | Velocidad relativa |
|---|---|---|
| MD5 | aprox. 700 | 1.4x |
| SHA-1 | aprox. 550 | 1.1x |
| SHA-256 | aprox. 500 | 1.0x (referencia) |
| SHA-512 | aprox. 600 | 1.2x (en 64 bits) |
| SHA-3-256 | aprox. 400 | 0.8x |
| BLAKE3 | aprox. 3000+ | 6.0x+ |
Conclusion
Las funciones hash criptograficas son bloques fundamentales de la informatica y la seguridad modernas. Comprender las propiedades, fortalezas y casos de uso apropiados de los diferentes algoritmos es esencial para cualquier desarrollador que trabaje con seguridad, integridad de datos o sistemas distribuidos.
Puntos clave:
- SHA-256 es la opcion segura por defecto para la mayoria de necesidades de hashing criptografico
- Nunca uses MD5 o SHA-1 para propositos de seguridad
- Usa hashing de contrasenas dedicado (Argon2id, bcrypt) — nunca funciones hash simples
- HMAC protege contra ataques de extension de longitud — usalo para autenticacion
- BLAKE3 es el campeon del rendimiento cuando se necesita velocidad
- El efecto avalancha es tu aliado — pequenos cambios en la entrada producen hashes completamente diferentes
- La resistencia a colisiones importa — elige algoritmos sin colisiones practicas conocidas
Para generar y comparar hashes rapidamente, guarda en favoritos nuestro generador de hash. Soporta MD5, SHA-1, SHA-256, SHA-384 y SHA-512.
Recursos relacionados
- Generador de hash -- Genera hashes al instante
- Guia de seguridad de contrasenas -- Practicas de contrasenas seguras
- Generador de contrasenas -- Genera contrasenas fuertes
- Mejores practicas de seguridad API -- Hashing en seguridad API
- Codificacion Base64 explicada -- Codificacion vs. hashing