Conceptos & ataques comunes
La criptografía bien implementada rara vez se “rompe” por fuerza bruta contra el algoritmo: se rompe por cómo se usa. Esta ficha es el mapa del área: los conceptos que hay que tener claros y el catálogo de fallos de implementación que aparecen una y otra vez en auditorías, CTFs y bug bounty. Las demás fichas de Criptografía profundizan en cada bloque.
Los cuatro servicios
Sección titulada «Los cuatro servicios»Confidencialidad nadie salvo el destinatario lee el mensaje -> cifrado (sym/asym)Integridad el mensaje no ha sido alterado -> hash, MACAutenticidad el mensaje viene de quien dice -> MAC, firma digitalNo repudio el emisor no puede negar haberlo enviado -> firma digital (asimétrica)Confundir estos servicios es el origen de muchos fallos: cifrar no da integridad (por eso existe el cifrado autenticado, AEAD), y un hash no da autenticidad (por eso existe HMAC, no “hash(clave‖mensaje)”).
Primitivas y para qué sirve cada una
Sección titulada «Primitivas y para qué sirve cada una»Cifrado simétrico AES, ChaCha20 mucho dato, clave compartida (ver crypto-sym)Cifrado asimétrico RSA, ECC intercambio de clave / firma (ver crypto-pki)Hash SHA-256, SHA-3 huella de integridad (ver crypto-hash)MAC / AEAD HMAC, AES-GCM integridad + autenticidadKDF PBKDF2, scrypt, Argon2 derivar clave de contraseña (lento a propósito)Firma digital RSA-PSS, Ed25519 autenticidad + no repudioCatálogo de fallos de implementación (lo que de verdad se explota)
Sección titulada «Catálogo de fallos de implementación (lo que de verdad se explota)»Kerckhoffs: la seguridad está en la CLAVE, no en el secreto del algoritmo-> "cifrado propio" / rolling your own crypto = casi siempre roto
ECB mode bloques iguales -> cifrado igual (el "pingüino ECB"); fuga de patronesIV/nonce reutilizado catastrófico en CTR/GCM (ver crypto-sym); nonce de GCM NUNCA se repitePadding oracle el error de padding distingue -> descifrar sin clave (ver crypto-padding)MAC ausente / mal cifrar sin autenticar -> bit-flipping, maleabilidad (usar AEAD)Hash para passwords SHA-256 "pelado" es crackeable; usar Argon2/bcrypt (ver crypto-hash)RNG débil claves/tokens predecibles (ver crypto-rng)Comparación no cte. == en MACs/tokens -> timing attack; usar comparación de tiempo constanteLength extension SHA-256(secreto‖msg) es extensible -> usar HMAC (ver crypto-hash)Downgrade / curvas aceptar algoritmos débiles (RC4, MD5, export) -> forzar el más débilEnfoque de ataque (CTF / auditoría)
Sección titulada «Enfoque de ataque (CTF / auditoría)»1. Identificar la primitiva y el modo (longitud de bloque, formato de salida, cabeceras)2. ¿Qué servicio FALTA? (¿hay MAC? ¿el IV es aleatorio? ¿se valida el padding?)3. Buscar el oráculo: ¿el sistema revela algo (error, timing, longitud) ante entradas manipuladas?4. Explotar la propiedad, no el álgebra: maleabilidad, reutilización, oráculos de errorHerramientas
Sección titulada «Herramientas»- CyberChef (análisis/transformación interactiva), Python + PyCryptodome (prototipado de ataques).
- hashcat / John (cracking, ver Hashing & cracking), sage/z3 para la parte matemática en retos.
- openssl para inspeccionar cifrados, certificados y protocolos reales.
Defensa
Sección titulada «Defensa»- No implementar primitivas propias: usar librerías revisadas (libsodium, Tink) y AEAD por defecto (AES-GCM, ChaCha20-Poly1305).
- Derivar claves de contraseña con Argon2id; generar claves/nonces con un CSPRNG.
- Comparar secretos en tiempo constante; validar MAC antes de descifrar (encrypt-then-MAC).
- Inventario criptográfico y agilidad para rotar algoritmos (preparación post-cuántica).
CVEs y casos reales
Sección titulada «CVEs y casos reales»- ROBOT (2017): padding oracle de RSA PKCS#1 v1.5 revivido en Facebook, PayPal, etc.
- Heartbleed (CVE-2014-0160) y POODLE (CVE-2014-3566): fallos de implementación/diseño con impacto masivo (ver TLS).
- DROWN, Logjam, FREAK: downgrade a criptografía “export” débil.
- Innumerables CTFs y bugs reales por IV estático, ECB en cookies de sesión y hash sin salt.
Checklist de prueba
Sección titulada «Checklist de prueba»- Identificar primitiva, modo y formato del criptograma
- ¿Falta integridad/autenticidad? (sin MAC → maleabilidad)
- ¿ECB? → buscar fuga de patrones con bloques repetidos
- ¿IV/nonce reutilizado o predecible?
- Probar oráculos (padding, error, timing)
- Passwords: ¿hash lento con salt o crackeable?
- Tokens/claves: ¿CSPRNG o predecibles? (ver Aleatoriedad débil (RNG))
- ¿Se aceptan algoritmos débiles (downgrade)?