Criptografía aplicada
Cifrar en reposo y en tránsito sin caer en los errores clásicos del roll-your-own crypto.
La criptografía protege datos sensibles, pero es fácil usarla mal. La regla transversal: no inventes tu propio esquema; usa primitivas estándar a través de librerías revisadas.
1. Cifra en tránsito: TLS siempre
Todo tráfico, interno incluido, debe ir por TLS 1.2+ (preferible 1.3). Desactiva protocolos y cifradores obsoletos (SSLv3, TLS 1.0/1.1, RC4). Redirige HTTP a HTTPS y usa HSTS.
2. Cifra en reposo lo que lo amerite
Cifra datos sensibles en la base de datos y en backups. Distingue:
- Hashing (contraseñas): unidireccional, con argon2/bcrypt. Ver la práctica de contraseñas.
- Cifrado (datos que hay que recuperar): usa AEAD como AES-256-GCM o ChaCha20-Poly1305.
3. Usa cifrado autenticado (AEAD)
El cifrado sin autenticación permite manipular el texto cifrado. AEAD cifra y verifica integridad a la vez:
// MAL — AES-CBC sin autenticación: maleable, vulnerable a padding oracle
// MAL — modo ECB: patrones del texto plano se filtran al cifrado
// BIEN — AES-256-GCM con IV único por mensaje
import { randomBytes, createCipheriv } from 'crypto';
const iv = randomBytes(12); // nunca reutilices el IV con la misma clave
const cipher = createCipheriv('aes-256-gcm', key, iv);
const ct = Buffer.concat([cipher.update(datos), cipher.final()]);
const tag = cipher.getAuthTag(); // guarda iv + tag junto al cifrado
4. Errores clásicos que evitar
- IV/nonce reutilizado con la misma clave: rompe la confidencialidad.
- Modo ECB: idéntico texto plano → idéntico cifrado.
- Aleatoriedad débil: usa un CSPRNG (
crypto.randomBytes), nuncaMath.random(). - Comparaciones no constantes: compara MACs/tokens con
timingSafeEqual. - MD5/SHA-1: rotos; solo SHA-256+ para integridad.
5. Gestiona las claves
La seguridad depende de la clave, no del algoritmo. Guárdalas en un KMS/HSM, sepáralas de los datos, rótalas y define el cifrado por sobres (envelope encryption) para grandes volúmenes.
Checklist rápida
- TLS 1.2+/1.3 en todo el tráfico; protocolos y cifradores obsoletos deshabilitados.
- Datos sensibles cifrados en reposo con AEAD (AES-256-GCM / ChaCha20-Poly1305).
- IV/nonce único por mensaje; nunca ECB.
- CSPRNG para toda aleatoriedad criptográfica.
- Comparaciones en tiempo constante para secretos.
- Claves en KMS/HSM, separadas de los datos y rotadas.
- #criptografia
- #tls
- #owasp