2FA por email (OTP)
Segundo factor (2FA): un código de un solo uso enviado por mail. Objetivo: Profe (victima) (victima@notas.demo).
El código llega al buzón simulado.
VULNERABLE: código de 4 dígitos con Math.random() (predecible), guardado en texto plano, sin expiración, sin límite de intentos y reutilizable. Se puede adivinar por fuerza bruta (10.000 combinaciones).
Hash vs cifrado (concepto clave)
El OTP se hashea porque el servidor nunca necesita recuperar el valor original: solo compara hashes (acá con SHA-256).
En cambio, un secreto TOTP (el de apps tipo Google Authenticator) sí debe cifrarse (por ejemplo AES-256-GCM, con la clave en una variable de entorno o un KMS), porque el servidor necesita leerlo en claro para validar cada código. Hashearlo lo volvería inservible.
| Hash (SHA-256) | Cifrado (AES-256-GCM) | |
|---|---|---|
| Reversible | No | Si (con la clave) |
| Cuando usarlo | Contraseñas, OTP de un solo uso | Secretos que hay que leer: TOTP, tokens de API |