La lección anterior terminó con una pregunta aplazada cuatro veces: toda la seguridad de TLS descansa en la validación de un certificado, ¿y quién responde de ese certificado? Esta lección abre esa caja y, con ella, lo que el módulo 2 anunció como el problema realmente difícil. Su tesis se puede enunciar en una frase: los algoritmos casi nunca fallan; la gestión de claves sí. AES no se ha roto, RSA no se ha roto, SHA-256 no se ha roto —pero se filtran claves en repositorios, caducan certificados que nadie vigilaba, se pierden claves que hacían falta para restaurar una copia y se dejan credenciales activas años después de que su dueño se marchara. Vas a ver el ciclo de vida completo de una clave, dónde debe vivir, cómo se rota sin cortar el servicio, qué contiene un certificado X.509, cómo funciona la cadena de confianza y qué hace realmente una autoridad de certificación.
Contenido
- La tesis: los algoritmos no fallan, la gestión sí
- Ciclo de vida de una clave
- Dónde vive una clave: del
.enval HSM - El secreto en el repositorio: por qué borrar el commit no basta
- Rotación sin cortar el servicio
- Certificados X.509: qué contienen exactamente
- La cadena de confianza y qué valida el navegador
- Autoridades de certificación y tipos de validación
- ACME y Let's Encrypt: emisión y renovación automática
- Revocación: CRL, OCSP, grapado y sus límites
- Transparencia de certificados
- PKI interna: cuándo montar una CA propia
- Cifrado de sobre
- Custodia, copia de claves y el dilema de perderlas
- La tesis: los algoritmos no fallan, la gestión sí
Repasa mentalmente los incidentes que has estudiado en el curso. En Equifax (02-06) la brecha entró por un parche pendiente, pero lo que la convirtió en histórica fue que un certificado caducado dejó ciego durante diez meses al sistema que inspeccionaba el tráfico. En el ransomware de Nimbus (02-06) el atacante no rompió nada: encontró un secreto olvidado en un .env y con él escaló. En la fuga por bucket mal configurado ni siquiera hubo criptografía implicada.
| Lo que la gente teme | Lo que realmente ocurre |
|---|---|
| «Que rompan AES-256» | Que la clave esté en un repositorio, en una imagen de contenedor o en el portátil de un ex-empleado |
| «Que factoricen RSA-2048» | Que el certificado caduque un domingo por la noche |
| «Que encuentren una colisión de SHA-256» | Que nadie sepa cuántas claves hay, dónde están ni quién las usa |
| «Que aparezca un 0-day criptográfico» | Que la clave de las copias esté en la misma cuenta cloud que las copias |
De ahí que este módulo, que ha dedicado cinco lecciones a las primitivas, dedique la más operativa a la gestión. La pregunta profesional no es «¿qué algoritmo uso?», sino «¿dónde vive esta clave, quién la puede leer, cuándo se rota y qué pasa si la pierdo?».
- Ciclo de vida de una clave
Una clave no es un valor: es un objeto con estados, y cada transición tiene preguntas que hay que responder por escrito.
flowchart LR
G["GENERACION\nDonde y con que\naleatoriedad"] --> D["DISTRIBUCION\nComo llega a quien\nla necesita"]
D --> U["USO\nQuien la usa,\npara que, cuantas veces"]
U --> A["ALMACENAMIENTO\nDonde reposa y\nquien puede leerla"]
A --> R["ROTACION\nCada cuanto y\ncomo sin cortar"]
R --> U
R --> AR["ARCHIVO\nPara descifrar datos\nantiguos"]
AR --> X["DESTRUCCION\nBorrado verificable\nen todas las copias"]
| Fase | Preguntas que hay que responder |
|---|---|
| Generación | ¿Con qué fuente de aleatoriedad (03-01)? ¿En qué máquina? ¿La ve alguien en claro alguna vez? |
| Distribución | ¿Por qué canal llega a quien la necesita? ¿Queda copia en un correo, un chat o un ticket? |
| Uso | ¿Qué procesos la usan y para qué propósito único? ¿Hay límite de volumen (los 2^32 mensajes de GCM, 03-02)? |
| Almacenamiento | ¿Dónde reposa? ¿Quién tiene permiso de lectura? ¿Está cifrada en reposo? ¿Aparece en registros o volcados? |
| Rotación | ¿Cada cuánto? ¿Cómo conviven la vieja y la nueva? ¿Está automatizado? |
| Archivo | ¿Hace falta conservarla para descifrar datos antiguos? ¿Cuánto tiempo? |
| Destrucción | ¿Se borra de todas las copias, incluidas las de seguridad y las cachés? ¿Se registra? |
La fase que casi nadie documenta es la última, y es la que produce el hallazgo clásico: una clave que se dio de baja «hace años» y sigue funcionando en un sistema olvidado.
- Dónde vive una clave: del
.env al HSM
.env al HSM| Ubicación | Protección | Coste | Caso de uso |
|---|---|---|---|
| En el código fuente | Ninguna | — | Nunca. Es un hallazgo, no una opción |
| Variable de entorno | Baja: visible en volcados, en /proc, en el panel del proveedor |
Nulo | Aceptable solo si el valor lo inyecta un gestor en el arranque |
| Fichero en disco con permisos | Baja-media: chmod 600 y usuario dedicado |
Nulo | Claves de host, certificados de servidor |
| Gestor de secretos (Vault, Secrets Manager, SOPS) | Media-alta: cifrado, control de acceso, auditoría, rotación | Bajo | La recomendación para Nimbus |
| KMS gestionado (nube) | Alta: la clave maestra no sale del servicio; se pide que opere, no que la entregue | Bajo-medio | Claves maestras de cifrado de datos |
| HSM | Muy alta: hardware resistente a manipulación, la clave nunca existe fuera | Alto | CA raíz, firma de código, requisitos normativos |
| Módulo seguro del dispositivo (TPM, Secure Enclave) | Alta, local | Incluido | Passkeys de 02-05, claves de disco |
La diferencia conceptual entre gestor de secretos y KMS merece precisión, porque se confunden: un gestor de secretos te entrega el secreto de forma controlada y auditada (la aplicación acaba teniendo el valor en memoria); un KMS o un HSM no te entregan nada, sino que operan por ti —«cifra esto», «firma esto»— y la clave maestra no sale nunca. Por eso el KMS es la pieza correcta para la clave maestra del cifrado de sobre (apartado 13).
Recomendación concreta para Nimbus, coherente con su tamaño y presupuesto: gestor de secretos para credenciales de base de datos, claves de API, secreto del webhook y clave de firma de tokens, con inyección en el arranque de los contenedores y cero secretos en el repositorio; KMS del proveedor cloud para la clave maestra que protege las claves de datos de adjuntos, notas clínicas y copias; módulo seguro del dispositivo para las passkeys de la plantilla, que ya lo usan sin que nadie lo configure; y HSM no, salvo que un cliente o una norma sectorial lo exija, porque su coste no se justifica frente al riesgo real de Nimbus.
- El secreto en el repositorio: por qué borrar el commit no basta
Este es el escenario que abrió la escalada en el caso de ransomware de 02-06: un fichero .env antiguo, con un token de API sin caducidad, versionado por error.
Cómo se detecta:
# 1. Escaneo del historial COMPLETO (no solo del arbol actual)
gitleaks detect --source . --log-opts="--all" --report-path fugas.json
# 2. Comprobar si un fichero estuvo alguna vez versionado
git log --all --full-history -- ".env" "*.pem" "*.key"
# 3. Barrera preventiva: ejecutar el escaneo antes de cada commit
pre-commit installAdemás del escaneo en el CI (02-04), conviene una alerta que vigile los repositorios públicos de la organización y los forks.
Por qué borrar el commit no basta. Es el punto que casi todo el mundo entiende mal:
| Creencia | Realidad |
|---|---|
«Hice git rm y un commit nuevo» |
El valor sigue en el historial: git log -p lo muestra |
«Reescribí el historial con filter-repo» |
Sigue en los clones de cada persona, en los forks, en la caché del proveedor y en las copias del repositorio |
| «El repositorio es privado» | Lo son también los de casi todas las filtraciones. Y el círculo de acceso incluye ex-empleados y proveedores |
| «Nadie lo ha visto» | Los repositorios públicos se escanean en segundos por bots. Asume exposición |
Qué significa realmente rotar. No es «cambiar el valor en el
.env». Es: (1) emitir una credencial nueva; (2) desplegarla en todos los consumidores; (3) revocar la antigua de forma efectiva, comprobando que ya no funciona; (4) revisar los registros de uso de la antigua desde la fecha en que se expuso, buscando accesos no reconocidos; (5) documentar el incidente. Mientras no se ejecute el paso 3, la credencial sigue siendo válida por mucho que la hayas borrado del código.
Y el orden correcto: primero rotar, después limpiar el historial. Limpiar el historial es higiene; rotar es la contención. Invertir el orden deja la ventana abierta mientras se hace el trabajo largo.
- Rotación sin cortar el servicio
Rotar da miedo porque parece que obliga a un corte: si cambias la clave, todo lo firmado con la anterior deja de validar. La solución es el periodo de solapamiento con dos claves activas y un identificador de clave, el kid, que ya viste funcionando en la validación de JWT con JWKS de 02-05.
La idea: cada objeto firmado o cifrado lleva escrito con qué clave se hizo, así que el verificador puede tener varias claves cargadas y elegir la correcta.
# claves.yaml — inventario versionado de claves de firma de tokens
firma_tokens:
activa: nimbus-2026-08 # con esta se FIRMA lo nuevo
claves:
- kid: nimbus-2026-08
algoritmo: EdDSA
creada: 2026-08-01
caduca: 2026-11-01
estado: activa
- kid: nimbus-2026-05
algoritmo: EdDSA
creada: 2026-05-01
caduca: 2026-08-15
estado: solo_verificacion # ya no firma, pero aun valida tokens vivos
- kid: nimbus-2026-02
estado: retirada # eliminada del JWKSCLAVES_VERIFICACION = cargar_claves_publicas() # {kid: clave publica}
KID_ACTIVO = "nimbus-2026-08"
def firmar_token(carga: dict) -> str:
# Se firma SIEMPRE con la clave activa, y el kid viaja en la cabecera
privada = obtener_privada(KID_ACTIVO) # del gestor de secretos
return jwt_encode(carga, privada, algorithm="EdDSA",
headers={"kid": KID_ACTIVO})
def verificar_token(token: str) -> dict:
kid = leer_kid_de_la_cabecera(token) # sin confiar aun en el token
clave = CLAVES_VERIFICACION.get(kid)
if clave is None:
raise TokenInvalido("kid desconocido o retirado")
# La validacion completa (firma, algoritmo esperado, iss, aud, exp)
# es la de 02-05: aqui solo se resuelve QUE clave usar.
return jwt_decode(token, clave, algorithms=["EdDSA"])Las cuatro fases de una rotación limpia:
| Fase | Qué ocurre | Duración típica |
|---|---|---|
| 1. Publicar | Se genera la clave nueva y su pública se añade al JWKS. Aún no firma nada | Horas |
| 2. Conmutar | La nueva pasa a ser la activa y firma todo lo nuevo. La antigua sigue verificando | Inmediato |
| 3. Solapar | Se espera a que caduquen todos los tokens firmados con la antigua | ≥ vida máxima del token |
| 4. Retirar | Se elimina la antigua del JWKS y del gestor, y se destruye | — |
Puntos importantes: el kid viene de un mensaje no confiable, así que sirve solo para seleccionar la clave, nunca para decidir si validar; si el kid no está en tu lista, se rechaza el token, sin excepciones. Y una rotación que solo se ejecuta manualmente «cuando toca» no se ejecuta: automatiza el proceso y ensáyalo al menos una vez con calma antes de necesitarlo con prisa.
Cadencias razonables para Nimbus:
| Clave | Cadencia | Nota |
|---|---|---|
| Firma de tokens | 3 meses | Automatizada, con solapamiento |
| Credenciales de base de datos y de API | 6–12 meses | Y de inmediato ante cualquier sospecha |
| Clave maestra de datos (KMS) | 12 meses | Rotación de la maestra; las claves de datos no se recifran (apartado 13) |
| Certificados TLS públicos | 60–90 días | Automática con ACME |
| Claves SSH personales | 12 meses | Y en cada baja de personal |
- Certificados X.509: qué contienen exactamente
Un certificado digital es un documento que une una clave pública a una identidad, firmado por una autoridad en la que el verificador confía. Es la respuesta a la pregunta que quedó abierta en 03-03: ¿de quién es esta clave pública?
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 04:8f:2b:19:c7:a0:33:e6:5d:11:9a:7c:20:bb:4e:01
Signature Algorithm: ecdsa-with-SHA384
Issuer: C = US, O = Let's Encrypt, CN = R11
Validity
Not Before: Jul 15 09:22:41 2026 GMT
Not After : Oct 13 09:22:40 2026 GMT
Subject: CN = api.nimbusreservas.example
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
ASN1 OID: prime256v1
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Subject Alternative Name:
DNS:api.nimbusreservas.example, DNS:www.nimbusreservas.example
CT Precertificate SCTs:
Signed Certificate Timestamp: ...Campo a campo, con lo que hay que mirar en una revisión:
| Campo | Qué significa | Qué comprobar |
|---|---|---|
| Serial Number | Identificador único del emisor | Es lo que se publica en las listas de revocación |
| Signature Algorithm | Con qué firmó la CA | Que no sea SHA-1 (03-04) |
| Issuer | Quién lo emitió | Debe encadenar con una raíz de confianza |
| Validity | Ventana de validez | La causa número uno de incidencias. Vigílala con alertas |
| Subject | A quién identifica | Hoy es informativo: lo que se valida es el SAN |
| Public Key Info | La clave pública certificada | Tipo y tamaño (aquí, ECC P-256 ≈ RSA-3072) |
| Key Usage | Para qué se puede usar la clave | Marcado critical: si el cliente no lo entiende, debe rechazar |
| Extended Key Usage | Uso de aplicación | Un certificado de servidor no debe servir para firmar código |
| Basic Constraints | Si es una CA | CA:FALSE es esencial: sin él, un certificado de hoja podría emitir otros |
| Subject Alternative Name (SAN) | Los dominios que ampara | Es el campo que valida el navegador. El CN está obsoleto para esto |
| CT SCTs | Pruebas de publicación en registros de transparencia | Apartado 11 |
El error de comprensión más frecuente es creer que el navegador compara el dominio con el CN. No lo hace desde hace años: compara con el SAN. Un certificado sin el dominio en el SAN produce un error de nombre por muy correcto que sea el CN.
- La cadena de confianza y qué valida el navegador
flowchart TB
R["CA RAIZ\nAutofirmada. Su clave privada vive\nen un HSM fuera de linea.\nEsta en el almacen del sistema operativo\ny del navegador"]
R -->|"firma"| I["CA INTERMEDIA\nOpera en linea y emite\na diario. Si se compromete,\nse revoca sin tocar la raiz"]
I -->|"firma"| H["CERTIFICADO HOJA\napi.nimbusreservas.example\nValidez de 60 a 90 dias"]
H --> S["SERVIDOR\nPosee la clave privada\ncorrespondiente"]
Por qué existe la intermedia. La clave de la raíz es demasiado valiosa para usarla a diario: vive desconectada, en un HSM, y solo se saca en ceremonias auditadas. La intermedia hace el trabajo diario y, si se compromete, se revoca y se sustituye sin invalidar la raíz —que está instalada en miles de millones de dispositivos y no se puede cambiar fácilmente—.
Qué comprueba exactamente el cliente al validar, en orden:
- Firma de cada eslabón: la hoja está firmada por la intermedia, la intermedia por la raíz.
- La raíz está en el almacén de confianza del sistema o del navegador.
- Vigencia: la fecha actual cae dentro del
Validityde todos los certificados de la cadena. - Nombre: el dominio solicitado coincide con alguna entrada del SAN de la hoja.
- Usos:
Key UsageyExtended Key Usagepermiten autenticación de servidor TLS. Basic Constraints: los intermedios sonCA:TRUEy la hojaCA:FALSE.- Revocación: consulta OCSP o grapado (apartado 10).
- Transparencia: los navegadores exigen SCTs válidos (apartado 11).
- Firma del handshake: el
CertificateVerifyde 03-05 demuestra que el servidor posee la clave privada. Sin este paso, presentar un certificado ajeno bastaría.
El error operativo más común es enviar solo la hoja y olvidar la intermedia. Los navegadores de escritorio suelen recuperarla y disimulan el fallo; muchos clientes de API, la app móvil y las librerías HTTP no, y el resultado es la incidencia clásica de «funciona en el navegador pero falla en la app». Por eso se sirve fullchain.pem, no cert.pem.
- Autoridades de certificación y tipos de validación
Una CA es una organización en la que los fabricantes de sistemas operativos y navegadores han decidido confiar, tras auditorías periódicas. Su negocio es verificar identidades antes de firmar.
| Tipo | Qué verifica la CA | Qué garantiza realmente | Coste |
|---|---|---|---|
| DV (validación de dominio) | Que controlas el dominio | Que hablas con ese dominio. Nada sobre la empresa | Gratis (ACME) |
| OV (validación de organización) | Además, existencia legal de la empresa | Lo mismo para el navegador, más datos en el certificado | Medio |
| EV (validación extendida) | Verificación reforzada de la entidad | Lo mismo. Los navegadores ya no muestran la barra verde | Alto |
La conclusión, que sorprende a mucha gente: desde el punto de vista técnico y de la experiencia del usuario, DV, OV y EV son equivalentes. Los navegadores dejaron de destacar visualmente el EV precisamente porque los estudios mostraron que los usuarios no percibían la diferencia, mientras que el coste y la fricción sí eran reales.
Para Nimbus: certificados DV emitidos con ACME. Solo cabe plantearse OV si un cliente corporativo lo exige por contrato, y conviene saber argumentar que esa exigencia rara vez aporta seguridad técnica.
Y una limitación honesta del modelo: cualquiera de las CA del almacén puede emitir un certificado para cualquier dominio. Ha ocurrido, por compromiso o por error de una CA. Las respuestas a ese riesgo son la transparencia de certificados (apartado 11), el registro CAA en el DNS —que declara qué CA pueden emitir para tu dominio— y, en casos concretos, el pinning con sus riesgos (03-05).
- ACME y Let's Encrypt: emisión y renovación automática
ACME es el protocolo que automatiza la emisión: el cliente demuestra el control del dominio superando un reto y recibe el certificado sin intervención humana.
sequenceDiagram
participant N as Cliente ACME (Nimbus)
participant C as CA (Let's Encrypt)
participant D as DNS / servidor web
N->>C: Solicito certificado para api.nimbusreservas.example
C->>N: Demuestra el control: publica este valor
N->>D: Publica el reto (HTTP-01 o DNS-01)
C->>D: Comprueba el reto
C->>N: Certificado emitido (60-90 dias)
Note over N: Renovacion automatica a los 30 dias restantes
# Emision y renovacion con el plugin de Nginx
certbot --nginx -d api.nimbusreservas.example -d www.nimbusreservas.example
# Ensayo de renovacion: comprueba que el proceso funciona SIN emitir
certbot renew --dry-run
# Verificar el temporizador que ejecuta la renovacion
systemctl list-timers | grep certbotDos retos y cuándo usar cada uno: HTTP-01 sirve un fichero bajo /.well-known/acme-challenge/ y es el más simple, pero exige el puerto 80 accesible y no permite comodines; DNS-01 publica un registro TXT, funciona sin exponer nada y sí permite comodines, a cambio de necesitar credenciales de tu proveedor de DNS —que a su vez son un secreto que hay que gestionar—.
Un certificado caducado es una incidencia de disponibilidad. El servicio no se degrada: se cae, con un aviso de seguridad a pantalla completa que además destruye la confianza del usuario. Y recuerda Equifax (02-06): allí el certificado caducado no tumbó una web, sino que cegó el sistema de inspección de tráfico durante diez meses, lo que permitió que la exfiltración pasara desapercibida. De ahí la regla transferible de aquella lección: todo control necesita un control que verifique que sigue funcionando.
Aplicado a Nimbus: la renovación automática no es el control suficiente; el control es la monitorización externa de la fecha de caducidad, que alerta a 30 y a 7 días y funciona aunque el proceso de renovación se haya roto en silencio. Los tres motivos habituales de rotura: el temporizador se desactivó tras una migración, el reto HTTP-01 dejó de resolver por un cambio de configuración, o el certificado se renueva pero nadie recarga el servicio que lo sirve.
- Revocación: CRL, OCSP, grapado y sus límites
Si una clave privada se filtra, el certificado sigue siendo criptográficamente válido hasta su caducidad. Hace falta un mecanismo para decir «este ya no vale».
| Mecanismo | Cómo funciona | Problema |
|---|---|---|
| CRL | Lista firmada de números de serie revocados, descargada periódicamente | Crece mucho; se actualiza con retraso |
| OCSP | El cliente pregunta a la CA por un certificado concreto | Latencia, y revela a la CA qué sitios visitas |
| Grapado OCSP | El servidor adjunta al handshake una respuesta OCSP firmada y reciente | Depende de que el servidor lo tenga activado (03-05) |
| Fallo abierto | Si la consulta falla, la mayoría de los clientes aceptan el certificado | La limitación de fondo de todo el modelo |
La consecuencia incómoda hay que decirla claramente: la revocación funciona peor de lo que parece. Como los clientes fallan en abierto para no romper la navegación cuando la CA no responde, un atacante que controla la red puede simplemente bloquear la consulta OCSP. Por eso la industria se ha movido hacia certificados de vida corta —60 o 90 días, y bajando— como sustituto práctico de la revocación: si el certificado caduca pronto, la ventana de daño es corta por construcción.
Qué debe hacer Nimbus si se filtra la clave privada de su certificado: (1) emitir un certificado nuevo con una clave nueva —nunca reutilizar la clave comprometida—; (2) desplegarlo; (3) revocar el anterior, sabiendo que la revocación es una medida parcial; (4) revisar registros en busca de uso indebido; (5) analizar cómo se filtró la clave.
- Transparencia de certificados
La transparencia de certificados (CT) responde al riesgo del apartado 8: que una CA emita un certificado para tu dominio sin tu conocimiento. Toda CA pública debe publicar cada certificado que emite en registros públicos, append-only y auditables —la misma idea que la tabla de auditoría de Nimbus, con INSERT pero sin UPDATE (01-04)—, y el navegador exige pruebas de esa publicación (los SCTs que viste en el certificado del apartado 6).
Esto no impide una emisión indebida, pero la hace imposible de ocultar. Y ahí está su valor para Nimbus: convierte un ataque invisible en uno detectable.
Cómo lo usa Nimbus, en concreto: (1) suscribirse a la monitorización de CT para nimbusreservas.example y todos sus subdominios, con notificación a Lucía y a Marta; (2) revisar cada alerta, porque un certificado que Nimbus no ha solicitado es un incidente que se activa de inmediato; (3) publicar un registro CAA en el DNS declarando la única CA autorizada, lo que además reduce el ruido de la monitorización; y (4) usar CT también como inventario, porque la lista de certificados emitidos revela subdominios olvidados que nadie recordaba, algunos con servicios expuestos —es decir, es una herramienta de reducción de superficie de ataque (01-04) además de detección—.
- PKI interna: cuándo montar una CA propia
Para el mTLS entre servicios internos (03-05) no sirven las CA públicas, porque no emiten certificados para nombres internos ni para identidades de servicio. La alternativa es una CA privada cuya raíz se instala en los sistemas propios.
| Montar CA interna sí cuando... | No cuando... |
|---|---|
| Hay mTLS entre servicios o con la consultora (A-19) | Basta con certificados públicos de un dominio real |
| Se emiten certificados de cliente para dispositivos gestionados | Se pretende «ahorrar» en certificados de servicios públicos |
| Existe un requisito de aislamiento o normativo | No hay nadie que pueda mantenerla |
Los riesgos de hacerlo mal, que son serios: una raíz interna instalada en los portátiles puede emitir certificados válidos para cualquier dominio, incluidos los de la banca del empleado; si su clave se filtra, el atacante puede suplantar cualquier sitio ante esos equipos. Además, una CA sin revocación operativa, sin renovación automatizada o sin inventario se convierte en una fuente de caídas, y una raíz con veinte años de validez y sin plan de sustitución es una deuda que hereda quien venga después.
Reglas mínimas si Nimbus la monta: raíz fuera de línea con la clave protegida y respaldada; intermedia para la emisión diaria; vidas cortas y emisión automatizada (por ejemplo, con la PKI de un gestor de secretos, que hace este trabajo bien); ámbito acotado a nombres internos, nunca a dominios públicos; inventario de todos los certificados emitidos; y un plan escrito de rotación de la raíz.
- Cifrado de sobre
El cifrado de sobre (envelope encryption) es el patrón estándar para cifrar muchos datos con pocas claves maestras, y es la aplicación del cifrado híbrido de 03-03 al almacenamiento.
flowchart TB
K["CLAVE MAESTRA (KMS)\nNo sale nunca del servicio.\nRotable. Auditada."]
D["CLAVE DE DATOS\nAleatoria, UNICA por objeto.\nExiste en claro solo en memoria"]
K -->|"cifra la clave de datos"| W["CLAVE DE DATOS CIFRADA\nSe guarda JUNTO al objeto"]
D -->|"cifra el contenido\ncon AES-256-GCM"| C["ADJUNTO CIFRADO\nen el bucket A-05"]
W --> C
Cómo funciona en Nimbus, paso a paso: (1) al subir un adjunto, la API pide al KMS una clave de datos y recibe dos versiones, una en claro para usar ahora y otra cifrada con la clave maestra; (2) cifra el adjunto con la clave en claro usando AES-256-GCM con nonce único y AAD con el tenant_id (03-02); (3) descarta la clave en claro de memoria y guarda junto al objeto la clave de datos cifrada, el nonce y el identificador de la clave maestra; (4) para descifrar, pide al KMS que descifre la clave de datos, la usa y la vuelve a descartar.
Las cuatro ventajas que explican por qué es el patrón dominante:
| Ventaja | Detalle |
|---|---|
| Una clave por objeto | Sin riesgo de reutilización de nonce entre objetos ni de agotar el límite de una clave |
| Rotar la maestra es barato | Solo hay que recifrar las claves de datos, no los terabytes de contenido |
| La maestra nunca sale del KMS | Un compromiso de la aplicación no entrega la clave maestra |
| Auditoría por objeto | Cada operación de descifrado deja rastro en el KMS: detectas accesos masivos anómalos |
Esa última fila es un control de detección infravalorado: si alguien intenta descifrar diez mil adjuntos en una hora, el registro del KMS lo muestra aunque la aplicación esté comprometida.
- Custodia, copia de claves y el dilema de perderlas
Aquí está la tensión más incómoda de toda la gestión de claves, y no tiene una solución elegante:
| Si copias la clave de más | Si copias la clave de menos |
|---|---|
| Cada copia es una superficie de ataque | Un fallo de hardware, un borrado o una baja de personal deja los datos irrecuperables para siempre |
| Se pierde el control de quién puede descifrar | Las copias de seguridad cifradas se convierten en ruido |
| La destrucción efectiva se vuelve imposible | El cifrado se convierte en una autodenegación de servicio |
No existe un punto medio automático: es una decisión de negocio que hay que tomar explícitamente y por escrito, distinta para cada tipo de clave.
| Tipo de clave | ¿Copia de seguridad? | Por qué |
|---|---|---|
| Clave de firma de tokens o de código | No | Si se pierde, se genera otra y se rota. Una copia solo añade riesgo |
| Clave efímera de sesión (TLS) | No | Su valor está en desaparecer (forward secrecy, 03-03) |
| Clave maestra del cifrado de datos | Sí, con custodia estricta | Perderla equivale a perder todos los datos cifrados |
| Clave de las copias de seguridad | Sí, y fuera del entorno de producción | Si vive donde las copias, el ransomware de 02-06 se lleva ambas |
| Clave de la CA raíz interna | Sí, con procedimiento formal | Su pérdida obliga a reconstruir toda la PKI interna |
Buenas prácticas de custodia, cuando la respuesta es sí:
- Copia cifrada y en ubicación distinta de los datos que protege, con control de acceso independiente.
- Reparto entre varias personas cuando la clave es crítica: la reconstrucción exige, por ejemplo, dos de tres custodios. Evita el punto único de fallo y también el punto único de abuso.
- Ensayo de recuperación al menos una vez al año, documentado. Una custodia que nunca se ha probado es una suposición, exactamente igual que una copia de seguridad no restaurada (02-04).
- Procedimiento escrito de quién puede solicitar la recuperación, quién la aprueba y cómo se registra.
Nota de validación profesional. Cuando la clave protege datos que revelan información de salud —como las notas clínicas de las clínicas cliente de Nimbus—, el diseño de custodia tiene implicaciones legales: quién puede acceder al dato, con qué base jurídica, durante cuánto tiempo se conserva y qué ocurre con las claves al final del periodo de conservación. La destrucción de la clave puede ser, de hecho, un mecanismo válido de supresión de datos, pero eso debe validarse con el responsable de protección de datos y con asesoría legal antes de apoyarse en ello. El marco normativo se trata en 06-03.
Errores Comunes y Consejos
- Secretos en el repositorio. El más frecuente y el más caro. Escáner en el CI y ganchos de pre-commit.
- Creer que borrar el commit resuelve algo. Solo la rotación efectiva resuelve; y primero se rota, después se limpia.
- No saber cuántas claves hay. Sin inventario —clave, propósito, dueño, ubicación, fecha de rotación— no hay gestión posible.
- No rotar nunca «porque funciona». Una clave sin rotación acumula exposición: cada persona que pasó por el equipo pudo verla.
- Rotar sin
kidni solapamiento. Convierte una operación rutinaria en un corte de servicio, y por eso deja de hacerse. - Guardar la clave junto al dato cifrado. Cifrado decorativo. Especialmente grave con las copias.
- Confiar solo en la renovación automática de certificados. Hace falta monitorización externa de la caducidad, con alerta a 30 y 7 días.
- Servir solo la hoja sin la intermedia. Funciona en el navegador y falla en la app móvil.
- Validar el
CNen lugar del SAN. - Suponer que la revocación funciona. Falla en abierto. Vidas cortas y rotación son la defensa real.
- Montar una CA interna sin mantenerla. Una raíz interna mal custodiada es una llave maestra para atacar a tus propios equipos.
- No hacer copia de la clave maestra de datos, o hacerla y no probarla nunca. Ambas cosas acaban igual de mal.
Consejos
- Empieza por el inventario: lista todas las claves, secretos y certificados con dueño, propósito, ubicación y fecha de rotación. Es una tarde de trabajo y cambia por completo la conversación.
- Automatiza lo que puedas: emisión ACME, renovación, rotación con solapamiento, escaneo de secretos. Lo manual no se hace.
- Ensaya una rotación completa y una recuperación desde custodia antes de necesitarlas.
- Aplica el principio de propósito único: una clave, una función. Deriva con HKDF (03-02) en lugar de reutilizar.
- Y recuerda la tesis: si algún día tienes un incidente criptográfico, lo más probable es que la causa sea una clave mal gestionada, no un algoritmo roto.
Ejercicios
Ejercicio 1 — Responder a un secreto filtrado
Un escaneo detecta que hace catorce meses se subió al repositorio un fichero deploy/.env.produccion con la contraseña de PostgreSQL, la clave de la API de la pasarela y el secreto de firma de tokens. El repositorio es privado, con acceso de los cinco del equipo y de dos personas de la consultora (A-19).
Se pide: (a) ordena las acciones de las primeras cuatro horas y justifica el orden; (b) explica qué significa exactamente rotar cada uno de los tres secretos y qué riesgo de corte tiene cada rotación; (c) indica qué registros revisarías y con qué ventana temporal; (d) di si esto es un incidente de seguridad notificable y qué información necesitas para decidirlo; (e) propón las tres medidas preventivas que impiden que vuelva a ocurrir.
Ejercicio 2 — Diagnosticar una cadena de certificados
La app móvil de Nimbus falla con «certificado no válido» mientras la web funciona correctamente en el navegador. La salida de openssl s_client muestra:
Certificate chain
0 s:CN = api.nimbusreservas.example
i:C = US, O = Let's Encrypt, CN = R11
---
Verify return code: 20 (unable to get local issuer certificate)Se pide: (a) diagnostica la causa exacta; (b) explica por qué el navegador funciona y la app no; (c) indica la corrección concreta en el servidor; (d) propón la comprobación automática que detectaría este fallo antes de que lo reporte un cliente; (e) enumera otros tres motivos distintos por los que un certificado válido puede fallar en un cliente.
Ejercicio 3 — Diseñar la gestión de claves de Nimbus
Marta pide un documento de una página con el esquema de gestión de claves.
Se pide: construye una tabla con al menos seis claves o secretos de Nimbus (firma de tokens, cifrado de adjuntos, cifrado de copias, credenciales de base de datos, secreto del webhook, certificado TLS) indicando para cada uno: dónde vive, quién puede acceder, cadencia de rotación, si tiene copia de seguridad y dónde, y qué ocurre si se pierde. Justifica después las dos decisiones más discutibles de tu tabla.
Soluciones
Ejercicio 1
(a) Primeras cuatro horas, en orden:
- Considerar los tres secretos comprometidos. Sin discusión: catorce meses y nueve personas con acceso, incluidas dos externas.
- Rotar primero la clave de la pasarela de pago. Es la de mayor impacto económico directo y la rotación es la menos disruptiva (se coordina con el proveedor).
- Rotar el secreto de firma de tokens con el mecanismo de solapamiento del apartado 5, para no expulsar a todos los usuarios.
- Rotar la contraseña de PostgreSQL, coordinada con un despliegue, ya que afecta a todos los procesos que conectan.
- En paralelo, revisar registros de uso de los tres secretos.
- Después, limpiar el historial del repositorio y comunicarlo al equipo y a la consultora.
El orden responde a que rotar es contención y limpiar el historial es higiene: mientras la credencial siga siendo válida, borrar el commit no cambia nada.
(b) Qué significa rotar cada uno:
| Secreto | Rotación | Riesgo de corte |
|---|---|---|
| Clave de la pasarela | Solicitar credencial nueva al proveedor, desplegarla, desactivar la antigua y verificar que ya no funciona | Bajo si el proveedor permite dos claves activas; medio si no |
| Secreto de firma de tokens | Nueva clave con kid nuevo, publicar, conmutar, solapar durante la vida máxima del token, retirar |
Nulo con solapamiento; alto si se sustituye de golpe (todas las sesiones caen) |
| Contraseña de PostgreSQL | Crear credencial nueva para el rol nimbus_api, desplegar, retirar la antigua |
Medio: hay que reiniciar o recargar los consumidores de forma coordinada |
(c) Registros y ventana. Ventana: desde la fecha del commit (catorce meses) hasta hoy, no solo desde la detección. Registros: accesos y transacciones en el panel de la pasarela; conexiones a PostgreSQL por origen, usuario y horario inusual; emisión y uso de tokens con firmas anómalas; accesos al bucket A-05; y actividad del repositorio (clones, forks, accesos de las cuentas de la consultora). Se buscan orígenes desconocidos, horarios fuera de patrón y volúmenes anómalos, igual que en el análisis de 02-06.
(d) ¿Es notificable? Es un incidente de seguridad con certeza. Es notificable si hay indicios de acceso no autorizado a datos personales. Para decidirlo hacen falta: registros suficientes y con retención adecuada para cubrir catorce meses (si no los hay, eso ya es un hallazgo grave y empuja hacia la prudencia), evidencia de accesos anómalos, y el alcance de los datos alcanzables con esas credenciales —que aquí incluye datos que revelan indirectamente salud—. La decisión se toma con asesoría legal y con el responsable de protección de datos, dentro del plazo de 72 horas del RGPD (06-03).
(e) Tres medidas preventivas: (1) escáner de secretos en el CI y gancho de pre-commit que bloquee el commit, más un .gitignore correcto; (2) gestor de secretos con inyección en el arranque, de modo que no exista ningún .env con valores reales; (3) rotación automática programada con solapamiento, para que ninguna credencial acumule catorce meses de vida y para que rotar sea una operación rutinaria y no una emergencia.
Ejercicio 2
(a) Causa exacta. El servidor envía solo el certificado de hoja (0 s:), sin el certificado intermedio de Let's Encrypt. El código 20 significa literalmente que el cliente no puede obtener el emisor local: no puede construir la cadena hasta una raíz de confianza.
(b) Por qué el navegador sí funciona. Los navegadores de escritorio suelen tener el intermedio en caché de visitas anteriores o lo descargan mediante la extensión Authority Information Access del certificado. Esa recuperación es una cortesía, no parte de la validación estándar, y muchas librerías HTTP y clientes móviles no la implementan: exigen que el servidor envíe la cadena completa, como manda el estándar.
(c) Corrección. Configurar ssl_certificate apuntando a fullchain.pem (hoja + intermedia), no a cert.pem, y recargar Nginx. Verificar después con openssl s_client, donde deben aparecer los dos eslabones y Verify return code: 0 (ok).
(d) Comprobación automática. Una tarea programada externa que, para cada dominio, ejecute openssl s_client sin usar el almacén local de intermedios y verifique tres cosas: código de retorno 0, número de certificados en la cadena mayor que uno, y días restantes de validez por encima del umbral. Alerta a Lucía si falla cualquiera. Es el «control que verifica que el control funciona» de Equifax aplicado aquí.
(e) Otros tres motivos: (1) el dominio no está en el SAN (aunque el CN sea correcto); (2) fecha del cliente desajustada, que hace que un certificado vigente parezca caducado o no válido todavía —frecuente en móviles y en dispositivos recién instalados—; (3) pinning desactualizado en la app tras una renovación de certificado (03-05). Un cuarto habitual: la raíz correspondiente no está en el almacén de un sistema antiguo sin actualizar.
Ejercicio 3
| Clave / secreto | Dónde vive | Quién accede | Rotación | ¿Copia? | Si se pierde |
|---|---|---|---|---|---|
| Firma de tokens (EdDSA) | Gestor de secretos; pública en el JWKS | Solo el proceso de la API | 3 meses, con kid y solapamiento |
No | Se genera otra y se rota; caen las sesiones vivas |
| Clave maestra de datos | KMS del proveedor; no sale nunca | La API, con permiso de Encrypt/Decrypt |
12 meses (rotación de la maestra) | Sí, la gestiona el KMS con custodia del proveedor | Adjuntos y notas clínicas irrecuperables |
| Clave de las copias | Gestor de secretos de otra cuenta, fuera de producción | Lucía y un proceso de restauración | 12 meses | Sí, custodia externa con dos de tres custodios | Copias inservibles: el peor escenario tras un ransomware |
Credenciales de PostgreSQL (nimbus_api, nimbus_informes) |
Gestor de secretos, inyectadas al arrancar | Procesos de la API y de informes | 6 meses, y ante cualquier sospecha | No | Se crean nuevas; corte breve si no se coordina |
| Secreto del webhook de la pasarela | Gestor de secretos | Proceso que atiende /webhooks |
12 meses, coordinada con el proveedor | No | Se acuerda uno nuevo con el proveedor |
| Certificado TLS público y su clave | Fichero con chmod 600 en el frontal, emitido por ACME |
Proceso del servidor web | 60–90 días, automática | No | Se emite uno nuevo; hay que revocar el anterior |
| Raíz de la CA interna (si se monta) | Fuera de línea, soporte cifrado en caja fuerte | Ceremonia con dos custodios | 5–10 años, con plan de sustitución | Sí, formal | Hay que reconstruir toda la PKI interna y redistribuir la raíz |
Las dos decisiones más discutibles:
- No hacer copia de la clave de firma de tokens. Discutible porque perderla expulsa a todos los usuarios a la vez. Se justifica porque el impacto es molestia, no pérdida de datos: los usuarios vuelven a entrar. Una copia, en cambio, sería una superficie permanente para un secreto que permite suplantar a cualquier usuario. El riesgo de la copia supera al del corte.
- Guardar la clave de las copias en una cuenta distinta, con dos de tres custodios. Discutible por la fricción que añade a una restauración urgente: si Lucía está de baja y falta un custodio, la restauración se retrasa. Se justifica por la lección directa del ransomware de 02-06: la clave y las copias en el mismo entorno significa que quien compromete producción se lleva ambas. La mitigación de la fricción es tener tres custodios y ensayar la recuperación una vez al año, de modo que el procedimiento esté probado antes de necesitarlo.
Conclusión
Has entrado en el problema difícil y sales con su tesis interiorizada: los algoritmos casi nunca fallan; la gestión de claves sí. Lo has visto en los incidentes del curso —el certificado caducado de Equifax que cegó la detección diez meses, el .env de Nimbus que abrió la escalada— y en el contraste entre lo que la gente teme y lo que realmente ocurre. Tienes el ciclo de vida completo de una clave, con las preguntas que hay que responder en cada fase y la constatación de que la fase que nadie documenta —la destrucción— es la que produce credenciales activas años después. Sabes dónde puede vivir una clave, del código fuente al HSM, con la distinción precisa entre un gestor de secretos, que te entrega el valor, y un KMS o HSM, que operan por ti sin entregarte nada; y con la recomendación concreta para Nimbus: gestor de secretos para credenciales, KMS para la clave maestra de datos, módulo del dispositivo para las passkeys y HSM solo si alguien lo exige.
Has aprendido qué significa realmente rotar —emitir, desplegar, revocar de forma efectiva, revisar registros y documentar—, por qué borrar el commit no revoca nada y por qué se rota antes de limpiar el historial; y has visto cómo se rota sin cortar el servicio con solapamiento y kid, la misma pieza que sostenía la validación de JWT de 02-05. En la parte de PKI has abierto un certificado X.509 campo a campo y sabes que lo que valida el navegador es el SAN y no el CN; entiendes la cadena de confianza y por qué existe la intermedia, los nueve pasos que comprueba el cliente y el fallo clásico de servir la hoja sin la intermedia; sabes que DV, OV y EV son técnicamente equivalentes y que cualquier CA del almacén puede emitir para tu dominio; manejas ACME y sabes que la renovación automática no es el control suficiente —el control es la monitorización externa de la caducidad—; conoces los límites reales de la revocación, que falla en abierto y ha sido sustituida en la práctica por certificados de vida corta; y sabes usar la transparencia de certificados para detectar emisiones indebidas y, de paso, como inventario de subdominios olvidados. Añades cuándo tiene sentido una PKI interna y sus riesgos, el cifrado de sobre con clave de datos y clave maestra —que además deja auditoría por objeto en el KMS— y el dilema honesto de la custodia: copiar de más multiplica la superficie, copiar de menos convierte el cifrado en pérdida definitiva, y no hay punto medio automático, solo una decisión escrita por tipo de clave.
Ya tienes todas las piezas del módulo: las primitivas, los protocolos que las ensamblan y la gestión que las sostiene. En Aplicaciones de la Criptografía (03-07) cerramos recorriendo el sistema de Nimbus de punta a punta y señalando qué protege qué: el cifrado en reposo con sus tres niveles —disco, base de datos y aplicación— y el punto clave de que el cifrado de disco no protege frente a una API comprometida; el cifrado campo a campo de las notas clínicas con el problema práctico que introduce, que ya no se puede buscar ni indexar; las copias cifradas con la clave fuera del entorno; la firma de artefactos en el CI/CD y su conexión con SolarWinds; los tokens y las URL firmadas de 120 segundos explicadas por dentro; y la diferencia real entre seudonimización y anonimización, con el motivo por el que el hash de un DNI no es anonimización.
Curso de Fundamentos de Seguridad Informática
Módulo 1: Introducción a la Seguridad Informática
- Conceptos Básicos de Seguridad Informática
- Tipos de Amenazas y Vulnerabilidades
- Principios de la Seguridad Informática
- Activos, Superficie de Ataque y Actores de Amenaza
Módulo 2: Ciberseguridad
- Definición y Alcance de la Ciberseguridad
- Tipos de Ataques Cibernéticos
- Ingeniería Social y Phishing
- Medidas de Protección en Ciberseguridad
- Identidad, Autenticación y Control de Acceso
- Casos de Estudio de Incidentes de Ciberseguridad
Módulo 3: Criptografía
- Introducción a la Criptografía
- Criptografía Simétrica
- Criptografía Asimétrica
- Funciones Hash, HMAC y Almacenamiento de Contraseñas
- Protocolos Criptográficos
- Gestión de Claves, Certificados y PKI
- Aplicaciones de la Criptografía
Módulo 4: Gestión de Riesgos y Medidas de Protección
- Evaluación de Riesgos
- Políticas de Seguridad
- Controles de Seguridad
- Riesgo de Terceros y Cadena de Suministro
- Plan de Respuesta a Incidentes
- Recuperación ante Desastres y Continuidad de Negocio
Módulo 5: Herramientas y Técnicas de Seguridad
- Herramientas de Análisis de Vulnerabilidades
- Técnicas de Monitoreo y Detección
- Pruebas de Penetración
- Seguridad en Redes
- Seguridad en Aplicaciones
- Hardening de Sistemas y Seguridad del Endpoint
- Seguridad en la Nube y en Contenedores
Módulo 6: Buenas Prácticas y Normativas
- Buenas Prácticas en Seguridad Informática
- Normativas y Estándares de Seguridad
- Protección de Datos Personales y RGPD en la Práctica
- Cumplimiento y Auditoría
- Formación y Concienciación
- Ética, Aspectos Legales y Divulgación Responsable
