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:
- Determinista: El mismo input siempre da el mismo hash.
- Unidireccional: No es posible reconstruir el input a partir del hash.
- Efecto avalancha: Un cambio mínimo en el input cambia completamente el hash.
- 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:
- El servidor presenta su certificado digital — contiene su clave pública y está firmado por una autoridad de certificación (CA).
- El navegador verifica el certificado — comprueba que la firma de la CA es válida y que el certificado corresponde al dominio.
- 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.
- 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é cifrar | Por qué | Cómo |
|---|---|---|
| Comunicaciones cliente-servidor | Proteger datos en tránsito | TLS (HTTPS obligatorio) |
| Contraseñas de usuarios | En caso de brecha de la BD | bcrypt o Argon2 (nunca texto plano) |
| Datos sensibles en base de datos | Proteger datos en reposo | AES-256 |
| Tokens de sesión | Autenticidad e integridad | HMAC o JWT firmado |
| Copias de seguridad | Proteger datos archivados | AES-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
-
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.
-
Usar algoritmos obsoletos. MD5 y SHA-1 están comprometidos. DES y 3DES no deben usarse para datos nuevos.
-
Guardar contraseñas en texto plano (o con SHA-256 sin salt). Siempre bcrypt/Argon2.
-
Reutilizar claves o IVs (vectores de inicialización). Muchos modos de cifrado requieren un IV diferente por cada mensaje.
-
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érmino | Definición |
|---|---|
| Cifrado simétrico | Cifrado donde la misma clave cifra y descifra |
| Cifrado asimétrico | Cifrado con par de claves pública/privada |
| Hash / Digest | Huella digital de tamaño fijo de cualquier dato |
| Salt | Valor aleatorio añadido al hash de contraseñas para evitar ataques con tablas |
| TLS | Protocolo criptográfico que protege comunicaciones en red |
| HTTPS | HTTP con TLS |
| Certificado digital | Documento 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 digital | Hash de un documento cifrado con clave privada para garantizar autenticidad e integridad |
| AES | Algoritmo de cifrado simétrico estándar actual |
| RSA | Algoritmo de cifrado asimétrico ampliamente usado |
| bcrypt / Argon2 | Algoritmos diseñados específicamente para hashear contraseñas |
Ponte a prueba
-
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”?
-
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?
-
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.
-
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:
| Campo | Valor 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:
| Variante | Error 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:
| Aspecto | Sitio 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:
- Parte 1: Tabla de campos del certificado con explicaciones + análisis de la cadena de confianza
- Parte 2: Tabla de certificados defectuosos + reflexión sobre el más peligroso
- Parte 3: Tablas comparativas de los dos sitios + respuestas de interpretación
Criterios de evaluación
| Criterio | Puntos |
|---|---|
| Parte 1: inspección del certificado — campos correctos y explicados | 30 |
| Parte 2: análisis de badssl.com — tres variantes con consecuencias reales | 30 |
| Parte 3: SSL Labs — comparación fundamentada e interpretación de resultados | 40 |
Navegación: ← Anterior | Inicio | Siguiente: Ética y legislación →