¿Qué es SHA-3?
SHA-3 (Secure Hash Algorithm 3) es el miembro más reciente de la familia Secure Hash Algorithm, publicado por NIST en 2015. A diferencia de SHA-2, que se basa en la construcción Merkle-Damgård, SHA-3 utiliza un diseño fundamentalmente diferente llamado construcción esponja. Esta diferencia hace que SHA-3 sea resistente a ciertas clases de ataques que amenazan a SHA-2.
El algoritmo originalmente llamado Keccak (pronunciado "ketchak") ganó la competencia de funciones hash de NIST en 2012 después de un proceso de evaluación pública de cinco años. NIST estandarizó cuatro longitudes de hash: SHA3-224, SHA3-256, SHA3-384 y SHA3-512, más dos funciones de salida extensible (XOF): SHAKE128 y SHAKE256.
Cómo Funciona SHA-3
SHA-3 utiliza la construcción esponja, que consta de dos fases: absorción y exprimido. En la fase de absorción, los datos de entrada se alimentan al estado interno en bloques. En la fase de exprimido, se extrae la salida hash.
El estado interno de SHA-3 es un arreglo 3D de 5×5 carriles, cada uno conteniendo 64 bits, para un tamaño total de estado de 1600 bits. La función de permutación, llamada Keccak-f, se aplica iterativamente durante ambas fases para mezclar el estado.
Este diseño le da a SHA-3 varias ventajas:
- No es vulnerable a ataques de extensión de longitud que afectan a SHA-2
- La construcción esponja proporciona una prueba de seguridad
- Funciona bien en implementaciones de hardware
- Las variantes XOF producen salida de longitud arbitraria
SHA-3 vs SHA-2
| Característica | SHA-2 | SHA-3 |
|---|---|---|
| Construcción | Merkle-Damgård | Esponja (Keccak) |
| Publicado | 2001 | 2015 |
| Tamaños de salida | 224, 256, 384, 512 | 224, 256, 384, 512 + XOF |
| Extensión de longitud | Vulnerable | Resistente |
| Velocidad en software | Más rápido | Más lento |
| Velocidad en hardware | Moderada | Excelente |
| Resistencia a canal lateral | Buena | Mejor |
Cuándo Usar SHA-3
SHA-3 no está destinado a reemplazar SHA-2 inmediatamente. SHA-2 sigue siendo seguro, y ningún ataque práctico reduce su seguridad por debajo de niveles aceptables. SHA-3 existe como respaldo en caso de que SHA-2 sea eventualmente roto.
Usa SHA-3 cuando:
- Necesites resistencia a ataques de extensión de longitud
- Tu aplicación se ejecute en hardware con aceleración SHA-3
- Quieras diversificar las dependencias criptográficas lejos de SHA-2
- Necesites una función hash con un diseño fundamentalmente diferente (defensa en profundidad)
- Necesites salida de longitud variable de SHAKE128 o SHAKE256
Ejemplos de Código
// PHP
echo hash('sha3-256', 'hello');
echo hash('sha3-512', 'hello');
import hashlib
print(hashlib.sha3_256(b'hello').hexdigest())
print(hashlib.sha3_512(b'hello').hexdigest())
# SHAKE (extendable output)
print(hashlib.shake_128(b'hello').hexdigest(16)) # 16 bytes output
print(hashlib.shake_256(b'hello').hexdigest(32)) # 32 bytes output
// Node.js
const crypto = require('crypto');
console.log(crypto.createHash('sha3-256').update('hello').digest('hex'));
console.log(crypto.createHash('sha3-512').update('hello').digest('hex'));
SHAKE128 y SHAKE256
SHAKE (Secure Hash Algorithm KEccak) es una función de salida extensible (XOF). A diferencia de las funciones hash de longitud fija, las XOF producen salida de cualquier longitud deseada. SHAKE128 proporciona seguridad de 128 bits con longitud de salida arbitraria, mientras que SHAKE256 proporciona seguridad de 256 bits.
Las XOF son útiles para:
- Generar claves criptográficas de longitud arbitraria a partir de una semilla
- Crear valores de enmascaramiento en esquemas de cifrado
- Construir cifrados de flujo y generadores de números aleatorios
Herramienta en Línea
El Generador de Hash SHA-3 en Help2Code calcula hashes SHA3-224, SHA3-256, SHA3-384 y SHA3-512 al instante. Compara la salida con hashes SHA-2 usando el Generador de Hash Múltiple.
Conclusión
SHA-3 es una función hash moderna y bien diseñada con un margen de seguridad conservador. Si bien SHA-2 sigue siendo el estándar para la mayoría de las aplicaciones, SHA-3 es una excelente opción cuando necesitas una función hash de respaldo para defensa en profundidad, o cuando necesitas las capacidades únicas de las funciones de salida extensible SHAKE.