SHA-1 vs SHA-256 vs SHA-512
SHA-1, SHA-256 y SHA-512 son miembros de la familia Secure Hash Algorithm, pero difieren significativamente en seguridad, tamaño de salida y rendimiento. Elegir el correcto depende de tus requisitos de seguridad, restricciones de rendimiento y necesidades de compatibilidad.
Comparación Rápida
| Característica | SHA-1 | SHA-256 | SHA-512 |
|---|---|---|---|
| Tamaño de salida | 160 bits (20 bytes) | 256 bits (32 bytes) | 512 bits (64 bytes) |
| Nivel de seguridad | 80 bits (roto) | 128 bits (seguro) | 256 bits (seguro) |
| Rondas | 80 | 64 | 80 |
| Tamaño de palabra | 32 bits | 32 bits | 64 bits |
| Tamaño de bloque | 512 bits | 512 bits | 1024 bits |
| Estado | Obsoleto | Recomendado | Recomendado |
Análisis de Seguridad
SHA-1 produce un hash de 160 bits, dándole una resistencia a colisiones de 2^80 operaciones por la paradoja del cumpleaños. En 2017, Google demostró el ataque SHAttered, produciendo la primera colisión SHA-1 práctica usando aproximadamente 2^63 operaciones. Esto demostró que SHA-1 ya no proporciona seguridad adecuada para ningún propósito donde la resistencia a colisiones importe.
SHA-256 proporciona resistencia a colisiones de 128 bits. A partir de 2026, ningún ataque práctico reduce la seguridad de SHA-256 por debajo de su fortaleza de diseño. Está aprobado por NIST para uso en aplicaciones gubernamentales de EE.UU. y es el estándar para certificados SSL/TLS, blockchain y firmas digitales.
SHA-512 proporciona resistencia a colisiones de 256 bits. Es incluso más fuerte que SHA-256 pero ofrece más seguridad de la que la mayoría de las aplicaciones necesitan. La fortaleza adicional viene con un costo de rendimiento en sistemas de 32 bits, pero en sistemas de 64 bits SHA-512 puede ser más rápido que SHA-256.
Dónde se Encuentra SHA-1 Todavía
A pesar de estar obsoleto, SHA-1 todavía aparece en sistemas heredados:
- Git usa SHA-1 para hashes de commits (aunque Git ha añadido soporte SHA-256)
- Firmas digitales antiguas firmadas con certificados SHA-1
- Sumas de verificación de archivos heredados distribuidas antes de la deprecación
- Algunos sistemas de control de versiones y herramientas de respaldo
Si encuentras SHA-1 en un sistema nuevo, migra a SHA-256 inmediatamente.
Consideraciones de Rendimiento
En procesadores de 32 bits, SHA-256 es más rápido que SHA-512 porque SHA-512 opera con palabras de 64 bits, requiriendo instrucciones adicionales. En procesadores de 64 bits con aceleración hardware (extensiones SHA), tanto SHA-256 como SHA-512 funcionan bien, siendo SHA-256 típicamente ligeramente más rápido.
Para el hash de archivos grandes, la diferencia es medible pero raramente significativa para uso típico. Un archivo que tarda 1 segundo en hashearse con SHA-256 podría tardar 0.7 segundos con SHA-1 o 1.3 segundos con SHA-512. Para la mayoría de las aplicaciones, los beneficios de seguridad de SHA-256 superan con creces la diferencia menor de rendimiento.
Ejemplos de Código
// PHP
echo hash('sha1', 'hello'); // aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
echo hash('sha256', 'hello'); // 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
echo hash('sha512', 'hello'); // 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
import hashlib
print(hashlib.sha1(b'hello').hexdigest())
print(hashlib.sha256(b'hello').hexdigest())
print(hashlib.sha512(b'hello').hexdigest())
// Node.js
const crypto = require('crypto');
console.log(crypto.createHash('sha1').update('hello').digest('hex'));
console.log(crypto.createHash('sha256').update('hello').digest('hex'));
console.log(crypto.createHash('sha512').update('hello').digest('hex'));
Recomendación
| Caso de Uso | Recomendación |
|---|---|
| Certificados SSL/TLS | SHA-256 |
| Verificación de integridad de archivos | SHA-256 o SHA-512 |
| Firmas digitales | SHA-256 |
| Hash de contraseñas | bcrypt o argon2 (no SHA) |
| Blockchain / cripto | SHA-256 |
| Archivado a largo plazo | SHA-512 |
| Compatibilidad heredada | Migrar a SHA-256 |
Herramientas en Línea
Usa las herramientas Generador SHA-1, Generador SHA-256 y Generador SHA-512 para calcular hashes al instante. El Generador de Hash Múltiple genera todos los tipos de hash a la vez para comparación.
Conclusión
SHA-1 está roto y no debe usarse. SHA-256 es el estándar recomendado para la mayoría de las aplicaciones. SHA-512 proporciona seguridad adicional para entornos de alto riesgo. Usa SHA-256 por defecto a menos que tengas una razón específica para elegir otro.