Criptografía aplicada

Objetivo de aprendizaje: Comprender los mecanismos criptográficos fundamentales que protegen la confidencialidad, integridad y autenticidad de los datos, y saber aplicarlos concretamente en el diseño de un sistema.


¿Por qué importa la criptografía?

Imagina que envías tu contraseña a un servidor por internet. Sin protección, cualquier dispositivo entre tú y el servidor puede leerla: tu router, el router del proveedor de internet, el del datacenter. La criptografía es la herramienta que hace que esa información sea ilegible para quienes no tienen la “llave” correcta.

La criptografía no es magia ni solo cosa de matemáticos. Para un ingeniero de ciberseguridad, es una caja de herramientas que debes saber usar: cuándo usar cada herramienta, con qué configuración, y qué pasa si la usas mal.


Conceptos fundamentales

Cifrado y descifrado

Cifrar es transformar datos legibles (texto plano o plaintext) en datos ilegibles (texto cifrado o ciphertext) usando un algoritmo y una clave.

Descifrar es el proceso inverso: convertir el texto cifrado de vuelta al texto plano usando la clave correcta.

Texto plano:  "Contraseña123"
     ↓  cifrar con clave secreta
Texto cifrado: "x7Kp2mQ9nR..."
     ↓  descifrar con clave secreta
Texto plano:  "Contraseña123"

Un sistema criptográfico es seguro cuando, sin la clave correcta, descifrar el texto cifrado es computacionalmente imposible, incluso con los mejores computadores del mundo.

La clave lo es todo

El principio de Kerckhoffs establece que la seguridad de un sistema criptográfico debe residir únicamente en la clave, no en el secreto del algoritmo. Los algoritmos modernos son públicos, auditados y conocidos por todos. La seguridad proviene de que la clave sea secreta y suficientemente larga.

Una clave de 128 bits tiene 2¹²⁸ combinaciones posibles. Probarlas todas tardaría más tiempo que la edad del universo incluso con todos los computadores actuales trabajando juntos.


Tipos de cifrado

Cifrado simétrico

En el cifrado simétrico, la misma clave se usa para cifrar y descifrar. Ambas partes deben conocer la clave antes de comunicarse.

Alice  ──[clave compartida]──  Bob
  │                             │
cifra con clave           descifra con clave

Algoritmos comunes:

  • AES (Advanced Encryption Standard): El estándar actual. AES-128 y AES-256 son ampliamente usados. Es rápido y muy seguro.
  • ChaCha20: Alternativa a AES, especialmente eficiente en dispositivos móviles.

Ventaja: Muy rápido, ideal para cifrar grandes volúmenes de datos.

Problema crítico: ¿Cómo compartes la clave con la otra parte de forma segura? Si la envías sin cifrar, cualquiera la puede interceptar.

Ejemplo de uso: Cifrar archivos en disco, cifrar datos en una base de datos.


Cifrado asimétrico

El cifrado asimétrico resuelve el problema del intercambio de claves usando un par de claves matemáticamente relacionadas:

  • Clave pública: Puede compartirse con cualquiera. Se usa para cifrar o para verificar firmas.
  • Clave privada: Se guarda en secreto absoluto. Se usa para descifrar o para firmar.

Lo que se cifra con la clave pública, solo puede descifrarse con la clave privada correspondiente.

Bob publica su clave pública ──→ Alice la usa para cifrar un mensaje
Mensaje cifrado ──→ Bob lo descifra con su clave privada (que solo él tiene)

Algoritmos comunes:

  • RSA: El más conocido. Claves de 2048 o 4096 bits son el estándar actual.
  • ECDSA / Ed25519: Basados en curvas elípticas. Claves más cortas con seguridad equivalente o mayor.

Ventaja: Resuelve el problema del intercambio de claves. No necesitas un canal previo seguro.

Desventaja: Mucho más lento que el cifrado simétrico. No se usa para cifrar grandes cantidades de datos.

Uso en la práctica: TLS (HTTPS) usa cifrado asimétrico para intercambiar de forma segura una clave simétrica temporal, y luego usa esa clave simétrica para el resto de la comunicación. Lo mejor de los dos mundos.


Funciones hash

Una función hash es un algoritmo que toma cualquier cantidad de datos y produce una salida de tamaño fijo llamada hash, digest o huella digital.

"Hola"                    →  a4d55a8d778e5022fab701977c5d840b
"Hola."  (un punto más)   →  d8e8fca2dc0f896fd7cb4cb0031ba249
"Un texto muy muy largo..." →  1f2a3b4c...  (mismo tamaño de salida)

Propiedades clave:

  1. Determinista: El mismo input siempre da el mismo hash.
  2. Unidireccional: No es posible reconstruir el input a partir del hash.
  3. Efecto avalancha: Un cambio mínimo en el input cambia completamente el hash.
  4. Sin colisiones prácticas: Dos inputs distintos no deben producir el mismo hash.

Algoritmos:

  • SHA-256 / SHA-3: Estándar actual. Seguros.
  • MD5 / SHA-1: Obsoletos. No deben usarse para seguridad. Han sido comprometidos.

Usos principales:

  • Verificar integridad: Si descargas un archivo y el hash coincide con el publicado, no fue alterado.
  • Almacenar contraseñas: Nunca se guarda la contraseña, sino su hash. Cuando el usuario se autentica, se hashea lo que escribe y se compara.
  • Firmas digitales: Se hashea el documento y luego se firma el hash.

Hash de contraseñas: el detalle que importa

Hashear contraseñas directamente con SHA-256 no es suficiente. Si dos usuarios tienen la misma contraseña, tienen el mismo hash, y los atacantes usan tablas precomputadas (rainbow tables) para romperlos.

La solución es usar algoritmos diseñados específicamente para contraseñas:

  • bcrypt, Argon2, scrypt: Son deliberadamente lentos y usan un valor aleatorio (salt) por contraseña para evitar ataques con tablas precomputadas.

Regla práctica: Si estás guardando contraseñas, usa bcrypt o Argon2. No uses SHA-256 directo.


Firmas digitales

Una firma digital combina cifrado asimétrico y funciones hash para proporcionar:

  • Autenticidad: Confirma quién firmó el documento.
  • Integridad: Garantiza que el documento no fue modificado después de firmar.
  • No repudio: El firmante no puede negar haber firmado.

Proceso de firma:

1. Se calcula el hash del documento
2. Se cifra ese hash con la clave privada del firmante → firma digital
3. Se adjunta la firma al documento

Proceso de verificación:

1. Se descifra la firma con la clave pública del firmante → hash esperado
2. Se calcula el hash del documento recibido
3. Si coinciden → el documento no fue alterado y fue firmado por quien dice

TLS y HTTPS: criptografía en la web

HTTPS es HTTP con una capa de seguridad llamada TLS (Transport Layer Security). Es el mecanismo que protege toda comunicación web sensible: contraseñas, datos de pago, información personal.

El handshake TLS (simplificado)

Cuando tu navegador se conecta a https://banco.com, ocurre lo siguiente en milisegundos:

  1. El servidor presenta su certificado digital — contiene su clave pública y está firmado por una autoridad de certificación (CA).
  2. El navegador verifica el certificado — comprueba que la firma de la CA es válida y que el certificado corresponde al dominio.
  3. Se acuerda una clave simétrica temporal — usando cifrado asimétrico, cliente y servidor negocian una clave de sesión sin que nadie más pueda conocerla.
  4. Se cifra todo el tráfico — con esa clave simétrica temporal. Incluso el proveedor de internet solo ve datos cifrados.

Certificados digitales y autoridades de certificación (CA)

Un certificado digital es un documento que vincula una clave pública con una identidad (un dominio, una organización). Es emitido y firmado por una Autoridad de Certificación (CA) de confianza, como Let’s Encrypt, DigiCert o Sectigo.

Tu sistema operativo y navegador vienen con una lista de CAs confiables. Si un sitio presenta un certificado firmado por una CA de esa lista, la conexión se considera segura.

¿Qué indica el candado verde?

  • La conexión está cifrada con TLS.
  • El certificado es válido y fue emitido para ese dominio.
  • No garantiza que el sitio sea legítimo (existe HTTPS en sitios de phishing).

Error común: Muchos usuarios piensan que el candado significa “sitio seguro”. Solo significa que la conexión está cifrada. El contenido del sitio puede igualmente ser malicioso.


Aplicación al proyecto

Como ingeniero de seguridad, debes tomar decisiones concretas sobre qué proteger y cómo:

¿Qué cifrar?

Qué cifrarPor quéCómo
Comunicaciones cliente-servidorProteger datos en tránsitoTLS (HTTPS obligatorio)
Contraseñas de usuariosEn caso de brecha de la BDbcrypt o Argon2 (nunca texto plano)
Datos sensibles en base de datosProteger datos en reposoAES-256
Tokens de sesiónAutenticidad e integridadHMAC o JWT firmado
Copias de seguridadProteger datos archivadosAES-256

¿Qué no cifrar?

No todo necesita cifrado simétrico completo. El cifrado tiene un costo (procesamiento, complejidad). Evalúa qué tan sensible es cada dato:

  • Un ID de usuario no necesita cifrado.
  • Un nombre puede no necesitarlo.
  • Un número de cédula o tarjeta de crédito sí lo necesita.

Errores frecuentes

  1. Implementar tu propio algoritmo de cifrado. Los algoritmos estándar (AES, RSA) fueron diseñados y auditados por criptógrafos durante décadas. Implementar el propio casi garantiza vulnerabilidades.

  2. Usar algoritmos obsoletos. MD5 y SHA-1 están comprometidos. DES y 3DES no deben usarse para datos nuevos.

  3. Guardar contraseñas en texto plano (o con SHA-256 sin salt). Siempre bcrypt/Argon2.

  4. Reutilizar claves o IVs (vectores de inicialización). Muchos modos de cifrado requieren un IV diferente por cada mensaje.

  5. No validar certificados. En código que hace peticiones HTTPS, nunca desactives la verificación de certificados (verify=False), ni siquiera en desarrollo.


Glosario de términos clave

TérminoDefinición
Cifrado simétricoCifrado donde la misma clave cifra y descifra
Cifrado asimétricoCifrado con par de claves pública/privada
Hash / DigestHuella digital de tamaño fijo de cualquier dato
SaltValor aleatorio añadido al hash de contraseñas para evitar ataques con tablas
TLSProtocolo criptográfico que protege comunicaciones en red
HTTPSHTTP con TLS
Certificado digitalDocumento que vincula una clave pública a una identidad, emitido por una CA
CA (Autoridad de Certificación)Entidad de confianza que emite y firma certificados digitales
Firma digitalHash de un documento cifrado con clave privada para garantizar autenticidad e integridad
AESAlgoritmo de cifrado simétrico estándar actual
RSAAlgoritmo de cifrado asimétrico ampliamente usado
bcrypt / Argon2Algoritmos diseñados específicamente para hashear contraseñas

Ponte a prueba

  1. Análisis de escenario: El certificado TLS de un sitio web expiró ayer. El equipo de IT dice: “HTTPS sigue funcionando técnicamente, así que no es urgente”. ¿Qué está ignorando este argumento? ¿Qué verifica exactamente un navegador al establecer una conexión TLS, más allá de que la conexión “funcione”?

  2. Razonamiento sobre el diseño de TLS: ¿Por qué TLS usa cifrado asimétrico para negociar una clave y luego cifrado simétrico para el resto de la comunicación, en lugar de usar cifrado asimétrico para todo? ¿Qué problema resuelve cada parte?

  3. Verdadero o falso: “Si un sitio web muestra el candado de seguridad en el navegador, significa que es un sitio confiable y legítimo.” ¿Es esto correcto? Explica exactamente qué garantiza el candado y qué no garantiza.

  4. Falla en la cadena de confianza: Una autoridad de certificación (CA) intermedia es comprometida por atacantes, quienes ahora pueden emitir certificados válidos para cualquier dominio. Traza las consecuencias: ¿qué pueden hacer los atacantes con ese acceso? ¿Qué mecanismos existen para revocar certificados comprometidos y por qué no son perfectos?


Laboratorio práctico: PKI y TLS en la práctica

Tiempo estimado: 60 minutos Requisitos: Navegador web (Chrome o Firefox) Herramientas: El propio navegador, SSL Labs y badssl.com

En el laboratorio de la clase 03 ya experimentaste con hashing, AES y firmas digitales como mecanismos aislados. Este laboratorio da el siguiente paso: observar cómo esos mecanismos se ensamblan en TLS para proteger comunicaciones reales, e identificar qué hace que una configuración TLS sea segura o deficiente.

Objetivo

Inspeccionar certificados digitales, entender la cadena de confianza PKI y evaluar la calidad de configuraciones TLS en sitios web reales.


Parte 1: Anatomía de un certificado (20 min)

Abre tu banco en línea, Gmail, o cualquier sitio HTTPS que uses regularmente.

Ejercicio 1.1 — Campos del certificado

Haz clic en el candado de la barra de direcciones y abre la vista completa del certificado:

  • Chrome: “La conexión es segura” → “El certificado es válido” → pestaña “Detalles”
  • Firefox: “Conexión segura” → “Más información” → “Ver certificado”

Completa la siguiente tabla:

CampoValor que encontraste¿Qué significa?
Emitido para (Subject CN)
Emitido por (Issuer)
Válido desde
Válido hasta
Algoritmo de firma
Tamaño de clave pública
Subject Alternative Names (SANs)

Para el campo Subject Alternative Names: ¿qué dominios cubre el certificado? ¿Por qué un certificado cubre múltiples dominios en lugar de uno solo?

Ejercicio 1.2 — La cadena de certificados

En la misma vista, busca la pestaña de “Cadena de certificados” o “Certification Path”. Verás algo como:

Raíz (Root CA)  →  CA Intermedia  →  Certificado del sitio
  • ¿Cuántos eslabones tiene la cadena del sitio que escogiste?
  • ¿Quién es la CA raíz (el primer eslabón)?
  • ¿Qué significa que tu navegador “confíe” en esa CA raíz? ¿Quién tomó esa decisión por ti?

Parte 2: Certificados con problemas (15 min)

Visita badssl.com. Esta página ofrece conexiones deliberadamente defectuosas para propósitos de aprendizaje. Explora la sección “Warning” y analiza al menos tres de las siguientes opciones: expired, self-signed, wrong.host, untrusted-root.

Para cada una que explores:

VarianteError que muestra el navegador¿Qué falla en la cadena de confianza?¿Qué podría hacer un atacante explotando este defecto?

Reflexión: De los problemas que encontraste, ¿cuál te parece más peligroso desde el punto de vista de un usuario que simplemente hace clic en “Continuar de todas formas”? Justifica.


Parte 3: Evaluación de calidad TLS con SSL Labs (25 min)

SSL Labs es una herramienta gratuita de Qualys que analiza en profundidad la configuración TLS de cualquier sitio web y le asigna una calificación (A+, A, B, C, F).

Ejercicio 3.1 — Analiza dos sitios

Escoge dos sitios para analizar: uno que probablemente tenga buena configuración (un banco grande, una plataforma tecnológica conocida) y uno que sospechas puede estar desactualizado (un portal gubernamental menor, un sitio pequeño).

Ingresa cada dominio en SSL Labs y espera el resultado (puede tomar 1-2 minutos por sitio).

Para cada sitio, completa:

AspectoSitio 1: _______Sitio 2: _______
Calificación general
Versiones de TLS soportadas
¿Soporta TLS 1.0 o 1.1 (obsoletos)?
¿Soporte para TLS 1.3?
¿Tiene vulnerabilidades conocidas? (POODLE, BEAST, etc.)
Resultado de HSTS

Ejercicio 3.2 — Interpretación

  • ¿Qué diferencias observas entre los dos sitios?
  • SSL Labs penaliza el soporte de TLS 1.0 y 1.1 aunque “funcionen”. ¿Por qué un protocolo que funciona puede ser un problema de seguridad?
  • ¿Qué es HSTS (HTTP Strict Transport Security)? ¿Qué ataque previene?

Entregable

Entrega un documento (PDF) que incluya:

  1. Parte 1: Tabla de campos del certificado con explicaciones + análisis de la cadena de confianza
  2. Parte 2: Tabla de certificados defectuosos + reflexión sobre el más peligroso
  3. Parte 3: Tablas comparativas de los dos sitios + respuestas de interpretación

Criterios de evaluación

CriterioPuntos
Parte 1: inspección del certificado — campos correctos y explicados30
Parte 2: análisis de badssl.com — tres variantes con consecuencias reales30
Parte 3: SSL Labs — comparación fundamentada e interpretación de resultados40

Navegación:Anterior | Inicio | Siguiente: Ética y legislación