Codea Seguro Codea Seguro
Desarrollo Seguro Dificultad: avanzada

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), nunca Math.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.