SHA-256: El Hash Detrás de Todo
SHA-256 es el caballo de batalla de la criptografía moderna. Toma cualquier entrada — un solo carácter o un dump entero de base de datos — y produce un hash fijo de 256 bits (32 bytes). Bitcoin lo usa. Git lo usa. Los certificados TLS lo usan. Si trabajas con software, estás usando SHA-256 lo sepas o no.
Qué Hace Buena Una Función Hash
Una función hash criptográfica tiene cuatro propiedades:
- Determinista: La misma entrada siempre produce la misma salida.
- Tamaño fijo: La salida siempre es de 256 bits (64 caracteres hexadecimales), sin importar el tamaño de la entrada.
- Irreversible: No puedes recuperar la entrada original a partir del hash.
- Resistente a colisiones: Es computacionalmente inviable encontrar dos entradas diferentes con el mismo hash.
SHA-256 en Acción
# Terminal
echo -n "hello" | sha256sum
# 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
echo -n "hello!" | sha256sum
# ce06092fb948d9ffac7d1a376e404b26b7575bcc11ee05a4615fef4fec3a308bObserva: cambiar un carácter cambia completamente el hash. Esto se llama efecto avalancha — un cambio diminuto en la entrada produce una salida dramáticamente diferente.
Usos Comunes
| Caso de Uso | Cómo Ayuda SHA-256 |
|---|---|
| Integridad de archivos | Descarga un archivo, hazle hash, compara con el hash publicado. Si coinciden, el archivo no fue manipulado. |
| Commits de Git | Cada commit se identifica por un hash SHA de su contenido, padre, autor y timestamp. |
| Firmas digitales | Haces hash del documento primero, luego firmas el hash (mucho más rápido que firmar el documento entero). |
| Minería de Bitcoin | Los mineros computan SHA-256(SHA-256(block_header)) buscando un hash por debajo de un umbral objetivo. |
| HMAC | Combina SHA-256 con una clave secreta para crear un código de autenticación de mensaje. |
| Certificate pinning | Fija el hash SHA-256 de la clave pública del servidor para prevenir ataques MITM. |
SHA-256 vs Otros Hashes
| Algoritmo | Tamaño de Salida | Estado | Caso de Uso |
|---|---|---|---|
| MD5 | 128 bits | Roto (colisiones encontradas) | Solo checksums, nunca para seguridad |
| SHA-1 | 160 bits | Deprecado (colisiones demostradas) | Solo sistemas legados |
| SHA-256 | 256 bits | Seguro | Hashing criptográfico de uso general |
| SHA-512 | 512 bits | Seguro | Cuando necesitas un hash más largo |
| SHA-3 | Variable | Seguro | Alternativa a la familia SHA-2 |
Implementación
// JavaScript (browser o Node.js)
async function sha256(message) {
const encoder = new TextEncoder();
const data = encoder.encode(message);
const buffer = await crypto.subtle.digest('SHA-256', data);
return Array.from(new Uint8Array(buffer))
.map(b => b.toString(16).padStart(2, '0'))
.join('');
}
await sha256('hello');
// "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"# Python
import hashlib
hash = hashlib.sha256(b'hello').hexdigest()
print(hash)
# 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824// Go
package main
import (
"crypto/sha256"
"fmt"
)
func main() {
h := sha256.Sum256([]byte("hello"))
fmt.Printf("%x\n", h)
}SHA-256 NO Es Para Contraseñas
Este es el error más común. SHA-256 es rápido — que es exactamente lo que no quieres para hashing de contraseñas. Un atacante puede computar miles de millones de hashes SHA-256 por segundo en una GPU.
Para contraseñas, usa:
- bcrypt — factor de costo ajustable, ampliamente soportado
- scrypt — memory-hard, resiste ataques con GPU
- Argon2 — ganador de la Password Hashing Competition, estado del arte
SHA-256 es para integridad e identificación. Bcrypt/Argon2 son para contraseñas. No los mezcles.
Verificando Integridad de Archivos
# Generar hash de un archivo
sha256sum ubuntu-24.04-desktop-amd64.iso
# a1b2c3d4... ubuntu-24.04-desktop-amd64.iso
# Verificar contra un archivo de checksum
sha256sum -c SHA256SUMS
# ubuntu-24.04-desktop-amd64.iso: OKSiempre verifica checksums al descargar ISOs, binarios o cualquier cosa crítica de seguridad. Toma 2 segundos y previene ataques de supply chain.
Hashea tus datos ahora: Generador SHA-256 — pega cualquier texto y obtén el hash SHA-256 instantáneamente. Todo corre en tu navegador.