Conceptos

Cryptography Basics

#appsec#crypto

Fundamentos de criptografía clásica y moderna: cifrado simétrico y asimétrico, intercambio de claves, funciones hash/HMAC y el rol de PKI para autenticidad y confianza.

Definición

Fundamentos de criptografía clásica y moderna: cifrado simétrico y asimétrico, intercambio de claves, funciones hash/HMAC y el rol de PKI para autenticidad y confianza.

Contexto

  • Proteger confidencialidad, integridad, autenticidad y no repudio en comunicaciones y almacenamiento.
  • Las implementaciones modernas combinan cifrado simétrico (rápido) con asimétrico (gestión de claves) y PKI para confianza en canales inseguros.

Desarrollo (MIT-style)

Cifrado clásico (sustitución y transposición)

  • Cifrado César (desplazamiento fijo; ejemplo +3): Documento de alto secreto con las palabras WUB KDFN PH
    Ilustración del cifrado César
    Ilustración del descifrado del cifrado César
    • Clave de 1–25; espacio de claves reducido → fuerza bruta viable.
    • Ejemplo de brute force: clave 5 revela “ESTE ES ALPHA BRAVO CONTACTAR A MIKE, DEL HOTEL TANGO”.
  • Cripto de sustitución monoalfabética: asigna cada letra a otra (p.ej., alfabeto mapeado a xpatvrzyjhecsdikbfwunqgmol).
    • Rompible por análisis de frecuencia (e/t/a más comunes en inglés).
    • Ejemplo cifrado resuelto con quipqiup: Captura de pantalla del sitio web de QuipQuip
  • Cifrado por transposición: reordena letras según clave (p.ej., clave 42351): Ilustración de un cifrado de transposición
  • Retos:
    • Cita cifrada: _“Xjnvw lc sluxjmw jsqm wjpmcqbg jg wqcxqmnvw; xjzjmmjd lc wjpm sluxjmw jsqm bqccqm zqy.” Zlwvzjxj Zpcvcol (pendiente de atribuir autor).

Cifrado simétrico

  • Mismo secreto para cifrar/descifrar; requiere canal seguro para compartir clave.
  • Conceptos:
    • Confidencialidad, integridad y autenticidad si la clave se mantiene secreta.
    • Problema de escalabilidad: N usuarios ⇒ N(N−1)/2 claves (100 usuarios ≈ 4.950 claves).
  • Algoritmos:
    • DES (56 bits) roto por fuerza bruta; 3DES obsoleto (2023/2024).
    • AES (128/192/256 bits) seguro. Transformaciones: SubBytes, ShiftRows, MixColumns, AddRoundKey.
      Ilustración de la función ShiftRows cuando se aplica en una matriz de cuatro por cuatro
    • Otros soportados por GPG 2.37.7: IDEA, CAST-128 (REPARTO5/CAST-128), Blowfish/Twofish, Camellia, 3DES.
  • Bloques vs flujo:
    • Bloque (128 bits típico): procesa bloques completos.
      Ejemplo de un algoritmo de cifrado de bloques aplicado a una matriz de cuatro por cuatro
    • Flujo: cifra byte a byte.
      Ejemplo de un algoritmo de cifrado de flujo aplicado a una matriz de bytes
  • Herramientas y comandos (mantener todos):
    • GPG:
      Terminal window
      gpg --symmetric --cipher-algo CIPHER message.txt
      gpg --armor --symmetric --cipher-algo CIPHER message.txt # salida ASCII
      gpg --output original_message.txt --decrypt message.gpg
    • OpenSSL (cifrado de archivo):
      Terminal window
      openssl aes-256-cbc -e -in message.txt -out encrypted_message
      openssl aes-256-cbc -d -in encrypted_message -out original_message.txt
      openssl aes-256-cbc -pbkdf2 -iter 10000 -e -in message.txt -out encrypted_message
      openssl aes-256-cbc -pbkdf2 -iter 10000 -d -in encrypted_message -out original_message.txt
    • Nota: assets de práctica se referencian como /root/Rooms/cryptographyintro/task02 (enlace faltante en RAW).

Cifrado asimétrico (RSA) y confidencialidad/autenticidad

  • Par de claves público/privado. Cifra con una, descifra con la otra.
  • Confidencialidad: cifrar con clave pública del receptor. Al usar el cifrado asimétrico, Alice cifra los mensajes con la clave pública de Bob antes de enviárselos. Bob los descifra con su clave privada.
  • Autenticidad/no repudio/integridad: firmar (cifrar hash) con clave privada; verificar con pública. Para demostrar la autenticidad mediante el cifrado asimétrico, Bob cifra el mensaje utilizando su clave privada y los destinatarios pueden descifrarlo utilizando la clave pública de Bob.
  • RSA (idea): elegir primos p, q; N=pq; exponente público e; d = inverso mod φ(N). Seguridad basada en factorización.
  • Ejemplo práctico de claves OpenSSL:
    Terminal window
    openssl genrsa -out private-key.pem 2048
    openssl rsa -in private-key.pem -pubout -out public-key.pem
    openssl rsa -in private-key.pem -text -noout # ver modulus, prime1/prime2, exponents
    # cifrar/descifrar con RSA
    openssl pkeyutl -encrypt -in plaintext.txt -out ciphertext -inkey public-key.pem -pubin
    openssl pkeyutl -decrypt -in ciphertext -inkey private-key.pem -out decrypted.txt

Intercambio de claves Diffie-Hellman

  • Acuerdo de clave secreta en canal público mediante generador g y primo q.
    Ilustración gráfica que muestra un ejemplo numérico de los cinco pasos de Diffie-Hellman
  • Pasos: elegir secretos a/b; publicar A=g^a mod q, B=g^b mod q; clave = (B^a mod q) = (A^b mod q).
  • MitM: vulnerable sin autenticación (Mallory puede suplantar).
    Ilustración que muestra el ataque Man-in-the-Middle contra Diffie-Hellman Key Exchange
  • Generar parámetros reales:
    Terminal window
    openssl dhparam -out dhparams.pem 2048
    openssl dhparam -in dhparams.pem -text -noout # muestra primo P y generador G
  • Pregunta del RAW: tamaño del número primo en dhparam.pem (en la ruta mencionada) — verificar en entorno de práctica.

Hash y HMAC

  • Hash: entrada arbitraria → digest fijo (ej.: SHA256 = 256 bits = 64 hex). Detecta cambios mínimos.
    Ejemplos de comandos:
    Terminal window
    sha256sum file.ext
    Cambiar un bit (T vs t) produce digest totalmente distinto.
  • Algoritmos seguros: SHA-2 (224/256/384/512), RIPEMD160. Vulnerables: MD5, SHA-1 (colisiones).
  • HMAC: hash + clave (RFC2104). Fórmula: H(K ⊕ opad, H(K ⊕ ipad, texto)).
    Ilustración gráfica que muestra cómo se calcula un HMAC
    Comandos:
    Terminal window
    hmac256 s!Kr37 message.txt
    hmac256 1234 message.txt
    sha256hmac message.txt --key s!Kr37

PKI y SSL/TLS

  • PKI asegura identidad para evitar MitM en intercambio de claves (certificados, CA).
  • Ejemplo: HTTPS muestra candado al validar el certificado de example.org.
    Captura de pantalla de un navegador que muestra un icono de candado para una conexión cifrada

Ejemplos adicionales

  • Texto cifrado de práctica: “YMNX NX FQUMF GWFAT HTSYFHYNSL YFSLT MTYJQ RNPJ” → clave 5 (César) produce texto legible.
  • Lista de cifrados soportados en GPG 2.37.7 (simétricos por bloques) incluida arriba; usar gpg --version para confirmar en tu entorno.

Pitfalls / Errores comunes

  • Usar DES/3DES o hashes débiles (MD5/SHA-1) en sistemas nuevos.
  • Creer que RSA provee velocidad de datos: se usa para intercambio/firmas, no para grandes volúmenes.
  • Implementar Diffie-Hellman sin autenticación → MitM.
  • No usar PBKDF2/iteraciones al derivar claves de contraseñas (OpenSSL -pbkdf2 -iter).
  • Guardar claves privadas sin protección o publicar claves públicas sin validar integridad/propiedad.

Diagrama

flowchart TD
A[Clásicos: sustitución/transposición] --> B[Cifrado simétrico]
B --> C[Herramientas: AES, GPG, OpenSSL]
B --> D[Intercambio de claves DH]
D --> E[PKI para autenticación]
C --> F[Hash/HMAC para integridad]
E --> G[Cifrado asimétrico (RSA)]
G --> H[Confidencialidad y firmas]

Referencias

  1. https://tryhackme.com/room/cryptographyintro
  2. https://csrc.nist.gov/publications/detail/fips/197/final (AES)
  3. https://www.rfc-editor.org/rfc/rfc2104 (HMAC)