La lliçó anterior va acabar amb una pregunta ajornada quatre vegades: tota la seguretat de TLS descansa en la validació d'un certificat, i qui respon d'aquell certificat? Aquesta lliçó obre aquella caixa i, amb ella, el que el mòdul 2 va anunciar com el problema realment difícil. La seva tesi es pot enunciar en una frase: els algorismes gairebé mai no fallen; la gestió de claus sí. AES no s'ha trencat, RSA no s'ha trencat, SHA-256 no s'ha trencat —però es filtren claus en repositoris, caduquen certificats que ningú no vigilava, es perden claus que calien per restaurar una còpia i es deixen credencials actives anys després que el seu amo se n'anés. Veuràs el cicle de vida complet d'una clau, on ha de viure, com es rota sense tallar el servei, què conté un certificat X.509, com funciona la cadena de confiança i què fa realment una autoritat de certificació.
Contingut
- La tesi: els algorismes no fallen, la gestió sí
- Cicle de vida d'una clau
- On viu una clau: del
.enva l'HSM - El secret al repositori: per què esborrar el commit no basta
- Rotació sense tallar el servei
- Certificats X.509: què contenen exactament
- La cadena de confiança i què valida el navegador
- Autoritats de certificació i tipus de validació
- ACME i Let's Encrypt: emissió i renovació automàtica
- Revocació: CRL, OCSP, grapat i els seus límits
- Transparència de certificats
- PKI interna: quan muntar una CA pròpia
- Xifratge de sobre
- Custòdia, còpia de claus i el dilema de perdre-les
- La tesi: els algorismes no fallen, la gestió sí
Repassa mentalment els incidents que has estudiat al curs. A Equifax (02-06) la bretxa va entrar per un pedaç pendent, però el que la va convertir en històrica va ser que un certificat caducat va deixar cec durant deu mesos el sistema que inspeccionava el trànsit. Al ransomware de Nimbus (02-06) l'atacant no va trencar res: va trobar un secret oblidat en un .env i amb ell va escalar. A la fuita per bucket mal configurat ni tan sols hi va haver criptografia implicada.
| El que la gent tem | El que realment passa |
|---|---|
| «Que trenquin AES-256» | Que la clau sigui en un repositori, en una imatge de contenidor o al portàtil d'un exempleat |
| «Que factoritzin RSA-2048» | Que el certificat caduqui un diumenge a la nit |
| «Que trobin una col·lisió de SHA-256» | Que ningú no sàpiga quantes claus hi ha, on són ni qui les fa servir |
| «Que aparegui un 0-day criptogràfic» | Que la clau de les còpies sigui al mateix compte cloud que les còpies |
D'aquí que aquest mòdul, que ha dedicat cinc lliçons a les primitives, dediqui la més operativa a la gestió. La pregunta professional no és «quin algorisme faig servir?», sinó «on viu aquesta clau, qui la pot llegir, quan es rota i què passa si la perdo?».
- Cicle de vida d'una clau
Una clau no és un valor: és un objecte amb estats, i cada transició té preguntes que cal respondre per escrit.
flowchart LR
G["GENERACIO\nOn i amb quina\naleatorietat"] --> D["DISTRIBUCIO\nCom arriba a qui\nla necessita"]
D --> U["US\nQui la fa servir,\nper a que, quantes vegades"]
U --> A["EMMAGATZEMATGE\nOn reposa i\nqui la pot llegir"]
A --> R["ROTACIO\nCada quant i\ncom sense tallar"]
R --> U
R --> AR["ARXIU\nPer desxifrar dades\nantigues"]
AR --> X["DESTRUCCIO\nEsborrament verificable\na totes les copies"]
| Fase | Preguntes que cal respondre |
|---|---|
| Generació | Amb quina font d'aleatorietat (03-01)? En quina màquina? La veu algú en clar alguna vegada? |
| Distribució | Per quin canal arriba a qui la necessita? Queda còpia en un correu, un xat o un tiquet? |
| Ús | Quins processos la fan servir i per a quin propòsit únic? Hi ha límit de volum (els 2^32 missatges de GCM, 03-02)? |
| Emmagatzematge | On reposa? Qui té permís de lectura? Està xifrada en repòs? Apareix en registres o bolcats? |
| Rotació | Cada quant? Com conviuen la vella i la nova? Està automatitzat? |
| Arxiu | Cal conservar-la per desxifrar dades antigues? Quant de temps? |
| Destrucció | S'esborra de totes les còpies, incloses les de seguretat i les memòries cau? Es registra? |
La fase que gairebé ningú no documenta és l'última, i és la que produeix la troballa clàssica: una clau que es va donar de baixa «fa anys» i continua funcionant en un sistema oblidat.
- On viu una clau: del
.env a l'HSM
.env a l'HSM| Ubicació | Protecció | Cost | Cas d'ús |
|---|---|---|---|
| Al codi font | Cap | — | Mai. És una troballa, no una opció |
| Variable d'entorn | Baixa: visible en bolcats, a /proc, al panell del proveïdor |
Nul | Acceptable només si el valor l'injecta un gestor a l'arrencada |
| Fitxer al disc amb permisos | Baixa-mitjana: chmod 600 i usuari dedicat |
Nul | Claus de host, certificats de servidor |
| Gestor de secrets (Vault, Secrets Manager, SOPS) | Mitjana-alta: xifratge, control d'accés, auditoria, rotació | Baix | La recomanació per a Nimbus |
| KMS gestionat (núvol) | Alta: la clau mestra no surt del servei; se li demana que operi, no que la lliuri | Baix-mitjà | Claus mestres de xifratge de dades |
| HSM | Molt alta: maquinari resistent a manipulació, la clau no existeix mai fora | Alt | CA arrel, signatura de codi, requisits normatius |
| Mòdul segur del dispositiu (TPM, Secure Enclave) | Alta, local | Inclòs | Passkeys de 02-05, claus de disc |
La diferència conceptual entre gestor de secrets i KMS mereix precisió, perquè es confonen: un gestor de secrets et lliura el secret de manera controlada i auditada (l'aplicació acaba tenint el valor a la memòria); un KMS o un HSM no et lliuren res, sinó que operen per tu —«xifra això», «signa això»— i la clau mestra no surt mai. Per això el KMS és la peça correcta per a la clau mestra del xifratge de sobre (apartat 13).
Recomanació concreta per a Nimbus, coherent amb la seva mida i pressupost: gestor de secrets per a credencials de base de dades, claus d'API, secret del webhook i clau de signatura de tokens, amb injecció a l'arrencada dels contenidors i zero secrets al repositori; KMS del proveïdor cloud per a la clau mestra que protegeix les claus de dades d'adjunts, notes clíniques i còpies; mòdul segur del dispositiu per a les passkeys de la plantilla, que ja el fan servir sense que ningú el configuri; i HSM no, tret que un client o una norma sectorial ho exigeixi, perquè el seu cost no es justifica davant del risc real de Nimbus.
- El secret al repositori: per què esborrar el commit no basta
Aquest és l'escenari que va obrir l'escalada en el cas de ransomware de 02-06: un fitxer .env antic, amb un token d'API sense caducitat, versionat per error.
Com es detecta:
# 1. Escaneig de l historial COMPLET (no nomes de l arbre actual)
gitleaks detect --source . --log-opts="--all" --report-path fuites.json
# 2. Comprovar si un fitxer va estar alguna vegada versionat
git log --all --full-history -- ".env" "*.pem" "*.key"
# 3. Barrera preventiva: executar l escaneig abans de cada commit
pre-commit installA més de l'escaneig al CI (02-04), convé una alerta que vigili els repositoris públics de l'organització i els forks.
Per què esborrar el commit no basta. És el punt que gairebé tothom entén malament:
| Creença | Realitat |
|---|---|
«Vaig fer git rm i un commit nou» |
El valor continua a l'historial: git log -p el mostra |
«Vaig reescriure l'historial amb filter-repo» |
Continua als clons de cada persona, als forks, a la memòria cau del proveïdor i a les còpies del repositori |
| «El repositori és privat» | També ho són els de gairebé totes les filtracions. I el cercle d'accés inclou exempleats i proveïdors |
| «Ningú no ho ha vist» | Els repositoris públics s'escanegen en segons per bots. Assumeix exposició |
Què significa realment rotar. No és «canviar el valor al
.env». És: (1) emetre una credencial nova; (2) desplegar-la a tots els consumidors; (3) revocar l'antiga de manera efectiva, comprovant que ja no funciona; (4) revisar els registres d'ús de l'antiga des de la data en què es va exposar, buscant accessos no reconeguts; (5) documentar l'incident. Mentre no s'executi el pas 3, la credencial continua sent vàlida per molt que l'hagis esborrada del codi.
I l'ordre correcte: primer rotar, després netejar l'historial. Netejar l'historial és higiene; rotar és la contenció. Invertir l'ordre deixa la finestra oberta mentre es fa la feina llarga.
- Rotació sense tallar el servei
Rotar fa por perquè sembla que obliga a un tall: si canvies la clau, tot el que s'ha signat amb l'anterior deixa de validar. La solució és el període de solapament amb dues claus actives i un identificador de clau, el kid, que ja vas veure funcionant en la validació de JWT amb JWKS de 02-05.
La idea: cada objecte signat o xifrat porta escrit amb quina clau es va fer, així que el verificador pot tenir diverses claus carregades i triar la correcta.
# claus.yaml — inventari versionat de claus de signatura de tokens
signatura_tokens:
activa: nimbus-2026-08 # amb aquesta se SIGNA el que es nou
claus:
- kid: nimbus-2026-08
algorisme: EdDSA
creada: 2026-08-01
caduca: 2026-11-01
estat: activa
- kid: nimbus-2026-05
algorisme: EdDSA
creada: 2026-05-01
caduca: 2026-08-15
estat: nomes_verificacio # ja no signa, pero encara valida tokens vius
- kid: nimbus-2026-02
estat: retirada # eliminada del JWKSCLAUS_VERIFICACIO = carregar_claus_publiques() # {kid: clau publica}
KID_ACTIU = "nimbus-2026-08"
def signar_token(carrega: dict) -> str:
# Se signa SEMPRE amb la clau activa, i el kid viatja a la capcalera
privada = obtenir_privada(KID_ACTIU) # del gestor de secrets
return jwt_encode(carrega, privada, algorithm="EdDSA",
headers={"kid": KID_ACTIU})
def verificar_token(token: str) -> dict:
kid = llegir_kid_de_la_capcalera(token) # sense confiar encara en el token
clau = CLAUS_VERIFICACIO.get(kid)
if clau is None:
raise TokenNoValid("kid desconegut o retirat")
# La validacio completa (signatura, algorisme esperat, iss, aud, exp)
# es la de 02-05: aqui nomes es resol QUINA clau fer servir.
return jwt_decode(token, clau, algorithms=["EdDSA"])Les quatre fases d'una rotació neta:
| Fase | Què passa | Durada típica |
|---|---|---|
| 1. Publicar | Es genera la clau nova i la seva pública s'afegeix al JWKS. Encara no signa res | Hores |
| 2. Commutar | La nova passa a ser l'activa i signa tot el que és nou. L'antiga continua verificant | Immediat |
| 3. Solapar | S'espera que caduquin tots els tokens signats amb l'antiga | ≥ vida màxima del token |
| 4. Retirar | S'elimina l'antiga del JWKS i del gestor, i es destrueix | — |
Punts importants: el kid ve d'un missatge no fiable, així que serveix només per seleccionar la clau, mai per decidir si validar; si el kid no és a la teva llista, es rebutja el token, sense excepcions. I una rotació que només s'executa manualment «quan toca» no s'executa: automatitza el procés i assaja'l almenys una vegada amb calma abans de necessitar-lo amb presses.
Cadències raonables per a Nimbus:
| Clau | Cadència | Nota |
|---|---|---|
| Signatura de tokens | 3 mesos | Automatitzada, amb solapament |
| Credencials de base de dades i d'API | 6–12 mesos | I immediatament davant de qualsevol sospita |
| Clau mestra de dades (KMS) | 12 mesos | Rotació de la mestra; les claus de dades no es tornen a xifrar (apartat 13) |
| Certificats TLS públics | 60–90 dies | Automàtica amb ACME |
| Claus SSH personals | 12 mesos | I a cada baixa de personal |
- Certificats X.509: què contenen exactament
Un certificat digital és un document que uneix una clau pública a una identitat, signat per una autoritat en què el verificador confia. És la resposta a la pregunta que va quedar oberta a 03-03: de qui és aquesta clau 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: ...Camp a camp, amb el que cal mirar en una revisió:
| Camp | Què significa | Què comprovar |
|---|---|---|
| Serial Number | Identificador únic de l'emissor | És el que es publica a les llistes de revocació |
| Signature Algorithm | Amb què va signar la CA | Que no sigui SHA-1 (03-04) |
| Issuer | Qui el va emetre | Ha d'encadenar amb una arrel de confiança |
| Validity | Finestra de validesa | La causa número u d'incidències. Vigila-la amb alertes |
| Subject | A qui identifica | Avui és informatiu: el que es valida és el SAN |
| Public Key Info | La clau pública certificada | Tipus i mida (aquí, ECC P-256 ≈ RSA-3072) |
| Key Usage | Per a què es pot fer servir la clau | Marcat critical: si el client no ho entén, ha de rebutjar |
| Extended Key Usage | Ús d'aplicació | Un certificat de servidor no ha de servir per signar codi |
| Basic Constraints | Si és una CA | CA:FALSE és essencial: sense ell, un certificat de fulla en podria emetre d'altres |
| Subject Alternative Name (SAN) | Els dominis que empara | És el camp que valida el navegador. El CN està obsolet per a això |
| CT SCTs | Proves de publicació en registres de transparència | Apartat 11 |
L'error de comprensió més freqüent és creure que el navegador compara el domini amb el CN. No ho fa des de fa anys: compara amb el SAN. Un certificat sense el domini al SAN produeix un error de nom per molt correcte que sigui el CN.
- La cadena de confiança i què valida el navegador
flowchart TB
R["CA ARREL\nAutosignada. La seva clau privada viu\nen un HSM fora de linia.\nEs al magatzem del sistema operatiu\ni del navegador"]
R -->|"signa"| I["CA INTERMEDIA\nOpera en linia i emet\ncada dia. Si es compromet,\nes revoca sense tocar l arrel"]
I -->|"signa"| H["CERTIFICAT FULLA\napi.nimbusreservas.example\nValidesa de 60 a 90 dies"]
H --> S["SERVIDOR\nPosseeix la clau privada\ncorresponent"]
Per què existeix la intermèdia. La clau de l'arrel és massa valuosa per fer-la servir cada dia: viu desconnectada, en un HSM, i només se'n treu en cerimònies auditades. La intermèdia fa la feina diària i, si es compromet, es revoca i se substitueix sense invalidar l'arrel —que està instal·lada en milers de milions de dispositius i no es pot canviar fàcilment—.
Què comprova exactament el client en validar, per ordre:
- Signatura de cada graó: la fulla està signada per la intermèdia, la intermèdia per l'arrel.
- L'arrel és al magatzem de confiança del sistema o del navegador.
- Vigència: la data actual cau dins del
Validityde tots els certificats de la cadena. - Nom: el domini sol·licitat coincideix amb alguna entrada del SAN de la fulla.
- Usos:
Key UsageiExtended Key Usagepermeten autenticació de servidor TLS. Basic Constraints: els intermedis sónCA:TRUEi la fullaCA:FALSE.- Revocació: consulta OCSP o grapat (apartat 10).
- Transparència: els navegadors exigeixen SCTs vàlids (apartat 11).
- Signatura de l'encaixada: el
CertificateVerifyde 03-05 demostra que el servidor posseeix la clau privada. Sense aquest pas, presentar un certificat aliè bastaria.
L'error operatiu més comú és enviar només la fulla i oblidar la intermèdia. Els navegadors d'escriptori solen recuperar-la i dissimulen la fallada; molts clients d'API, l'app mòbil i les llibreries HTTP no, i el resultat és la incidència clàssica de «funciona al navegador però falla a l'app». Per això se serveix fullchain.pem, no cert.pem.
- Autoritats de certificació i tipus de validació
Una CA és una organització en què els fabricants de sistemes operatius i navegadors han decidit confiar, després d'auditories periòdiques. El seu negoci és verificar identitats abans de signar.
| Tipus | Què verifica la CA | Què garanteix realment | Cost |
|---|---|---|---|
| DV (validació de domini) | Que controles el domini | Que parles amb aquell domini. Res sobre l'empresa | Gratis (ACME) |
| OV (validació d'organització) | A més, existència legal de l'empresa | El mateix per al navegador, més dades al certificat | Mitjà |
| EV (validació estesa) | Verificació reforçada de l'entitat | El mateix. Els navegadors ja no mostren la barra verda | Alt |
La conclusió, que sorprèn molta gent: des del punt de vista tècnic i de l'experiència de l'usuari, DV, OV i EV són equivalents. Els navegadors van deixar de destacar visualment l'EV precisament perquè els estudis mostraven que els usuaris no percebien la diferència, mentre que el cost i la fricció sí que eren reals.
Per a Nimbus: certificats DV emesos amb ACME. Només es pot plantejar OV si un client corporatiu ho exigeix per contracte, i convé saber argumentar que aquella exigència poques vegades aporta seguretat tècnica.
I una limitació honesta del model: qualsevol de les CA del magatzem pot emetre un certificat per a qualsevol domini. Ha passat, per compromís o per error d'una CA. Les respostes a aquest risc són la transparència de certificats (apartat 11), el registre CAA al DNS —que declara quines CA poden emetre per al teu domini— i, en casos concrets, el pinning amb els seus riscos (03-05).
- ACME i Let's Encrypt: emissió i renovació automàtica
ACME és el protocol que automatitza l'emissió: el client demostra el control del domini superant un repte i rep el certificat sense intervenció humana.
sequenceDiagram
participant N as Client ACME (Nimbus)
participant C as CA (Let s Encrypt)
participant D as DNS / servidor web
N->>C: Sollicito certificat per a api.nimbusreservas.example
C->>N: Demostra el control: publica aquest valor
N->>D: Publica el repte (HTTP-01 o DNS-01)
C->>D: Comprova el repte
C->>N: Certificat emes (60-90 dies)
Note over N: Renovacio automatica als 30 dies restants
# Emissio i renovacio amb el connector de Nginx
certbot --nginx -d api.nimbusreservas.example -d www.nimbusreservas.example
# Assaig de renovacio: comprova que el proces funciona SENSE emetre
certbot renew --dry-run
# Verificar el temporitzador que executa la renovacio
systemctl list-timers | grep certbotDos reptes i quan fer servir cadascun: HTTP-01 serveix un fitxer sota /.well-known/acme-challenge/ i és el més simple, però exigeix el port 80 accessible i no permet comodins; DNS-01 publica un registre TXT, funciona sense exposar res i sí que permet comodins, a canvi de necessitar credencials del teu proveïdor de DNS —que al seu torn són un secret que cal gestionar—.
Un certificat caducat és una incidència de disponibilitat. El servei no es degrada: cau, amb un avís de seguretat a pantalla completa que a més destrueix la confiança de l'usuari. I recorda Equifax (02-06): allà el certificat caducat no va tombar un web, sinó que va encegar el sistema d'inspecció de trànsit durant deu mesos, cosa que va permetre que l'exfiltració passés desapercebuda. D'aquí la regla transferible d'aquella lliçó: tot control necessita un control que verifiqui que continua funcionant.
Aplicat a Nimbus: la renovació automàtica no és el control suficient; el control és el monitoratge extern de la data de caducitat, que alerta a 30 i a 7 dies i funciona encara que el procés de renovació s'hagi trencat en silenci. Els tres motius habituals de trencament: el temporitzador es va desactivar després d'una migració, el repte HTTP-01 va deixar de resoldre per un canvi de configuració, o el certificat es renova però ningú no recarrega el servei que el serveix.
- Revocació: CRL, OCSP, grapat i els seus límits
Si una clau privada es filtra, el certificat continua sent criptogràficament vàlid fins a la seva caducitat. Cal un mecanisme per dir «aquest ja no val».
| Mecanisme | Com funciona | Problema |
|---|---|---|
| CRL | Llista signada de números de sèrie revocats, descarregada periòdicament | Creix molt; s'actualitza amb retard |
| OCSP | El client pregunta a la CA per un certificat concret | Latència, i revela a la CA quins llocs visites |
| Grapat OCSP | El servidor adjunta a l'encaixada una resposta OCSP signada i recent | Depèn que el servidor ho tingui activat (03-05) |
| Fallada oberta | Si la consulta falla, la majoria dels clients accepten el certificat | La limitació de fons de tot el model |
La conseqüència incòmoda cal dir-la clarament: la revocació funciona pitjor del que sembla. Com que els clients fallen en obert per no trencar la navegació quan la CA no respon, un atacant que controla la xarxa pot simplement bloquejar la consulta OCSP. Per això la indústria s'ha mogut cap a certificats de vida curta —60 o 90 dies, i baixant— com a substitut pràctic de la revocació: si el certificat caduca aviat, la finestra de dany és curta per construcció.
Què ha de fer Nimbus si es filtra la clau privada del seu certificat: (1) emetre un certificat nou amb una clau nova —mai reutilitzar la clau compromesa—; (2) desplegar-lo; (3) revocar l'anterior, sabent que la revocació és una mesura parcial; (4) revisar registres a la recerca d'ús indegut; (5) analitzar com es va filtrar la clau.
- Transparència de certificats
La transparència de certificats (CT) respon al risc de l'apartat 8: que una CA emeti un certificat per al teu domini sense el teu coneixement. Tota CA pública ha de publicar cada certificat que emet en registres públics, append-only i auditables —la mateixa idea que la taula d'auditoria de Nimbus, amb INSERT però sense UPDATE (01-04)—, i el navegador exigeix proves d'aquesta publicació (els SCTs que vas veure al certificat de l'apartat 6).
Això no impedeix una emissió indeguda, però la fa impossible d'amagar. I aquí hi ha el seu valor per a Nimbus: converteix un atac invisible en un de detectable.
Com ho fa servir Nimbus, en concret: (1) subscriure's al monitoratge de CT per a nimbusreservas.example i tots els seus subdominis, amb notificació a la Lucía i a la Marta; (2) revisar cada alerta, perquè un certificat que Nimbus no ha sol·licitat és un incident que s'activa immediatament; (3) publicar un registre CAA al DNS declarant l'única CA autoritzada, cosa que a més redueix el soroll del monitoratge; i (4) fer servir CT també com a inventari, perquè la llista de certificats emesos revela subdominis oblidats que ningú no recordava, alguns amb serveis exposats —és a dir, és una eina de reducció de superfície d'atac (01-04) a més de detecció—.
- PKI interna: quan muntar una CA pròpia
Per a l'mTLS entre serveis interns (03-05) no serveixen les CA públiques, perquè no emeten certificats per a noms interns ni per a identitats de servei. L'alternativa és una CA privada l'arrel de la qual s'instal·la als sistemes propis.
| Muntar CA interna sí quan... | No quan... |
|---|---|
| Hi ha mTLS entre serveis o amb la consultora (A-19) | N'hi ha prou amb certificats públics d'un domini real |
| S'emeten certificats de client per a dispositius gestionats | Es pretén «estalviar» en certificats de serveis públics |
| Existeix un requisit d'aïllament o normatiu | No hi ha ningú que la pugui mantenir |
Els riscos de fer-ho malament, que són seriosos: una arrel interna instal·lada als portàtils pot emetre certificats vàlids per a qualsevol domini, inclosos els de la banca de l'empleat; si la seva clau es filtra, l'atacant pot suplantar qualsevol lloc davant d'aquells equips. A més, una CA sense revocació operativa, sense renovació automatitzada o sense inventari es converteix en una font de caigudes, i una arrel amb vint anys de validesa i sense pla de substitució és un deute que hereta qui vingui després.
Regles mínimes si Nimbus la munta: arrel fora de línia amb la clau protegida i respatllada; intermèdia per a l'emissió diària; vides curtes i emissió automatitzada (per exemple, amb la PKI d'un gestor de secrets, que fa aquesta feina bé); abast acotat a noms interns, mai a dominis públics; inventari de tots els certificats emesos; i un pla escrit de rotació de l'arrel.
- Xifratge de sobre
El xifratge de sobre (envelope encryption) és el patró estàndard per xifrar moltes dades amb poques claus mestres, i és l'aplicació del xifratge híbrid de 03-03 a l'emmagatzematge.
flowchart TB
K["CLAU MESTRA (KMS)\nNo surt mai del servei.\nRotable. Auditada."]
D["CLAU DE DADES\nAleatoria, UNICA per objecte.\nExisteix en clar nomes en memoria"]
K -->|"xifra la clau de dades"| W["CLAU DE DADES XIFRADA\nEs desa JUNT amb l objecte"]
D -->|"xifra el contingut\namb AES-256-GCM"| C["ADJUNT XIFRAT\nal bucket A-05"]
W --> C
Com funciona a Nimbus, pas a pas: (1) en pujar un adjunt, l'API demana al KMS una clau de dades i rep dues versions, una en clar per fer servir ara i una altra xifrada amb la clau mestra; (2) xifra l'adjunt amb la clau en clar fent servir AES-256-GCM amb nonce únic i AAD amb el tenant_id (03-02); (3) descarta la clau en clar de la memòria i desa al costat de l'objecte la clau de dades xifrada, el nonce i l'identificador de la clau mestra; (4) per desxifrar, demana al KMS que desxifri la clau de dades, la fa servir i la torna a descartar.
Els quatre avantatges que expliquen per què és el patró dominant:
| Avantatge | Detall |
|---|---|
| Una clau per objecte | Sense risc de reutilització de nonce entre objectes ni d'esgotar el límit d'una clau |
| Rotar la mestra és barat | Només cal tornar a xifrar les claus de dades, no els terabytes de contingut |
| La mestra no surt mai del KMS | Un compromís de l'aplicació no lliura la clau mestra |
| Auditoria per objecte | Cada operació de desxifratge deixa rastre al KMS: detectes accessos massius anòmals |
Aquesta última fila és un control de detecció infravalorat: si algú intenta desxifrar deu mil adjunts en una hora, el registre del KMS ho mostra encara que l'aplicació estigui compromesa.
- Custòdia, còpia de claus i el dilema de perdre-les
Aquí hi ha la tensió més incòmoda de tota la gestió de claus, i no té una solució elegant:
| Si copies la clau de més | Si copies la clau de menys |
|---|---|
| Cada còpia és una superfície d'atac | Una fallada de maquinari, un esborrament o una baixa de personal deixa les dades irrecuperables per sempre |
| Es perd el control de qui pot desxifrar | Les còpies de seguretat xifrades es converteixen en soroll |
| La destrucció efectiva es torna impossible | El xifratge es converteix en una autodenegació de servei |
No existeix un punt mitjà automàtic: és una decisió de negoci que cal prendre explícitament i per escrit, diferent per a cada tipus de clau.
| Tipus de clau | Còpia de seguretat? | Per què |
|---|---|---|
| Clau de signatura de tokens o de codi | No | Si es perd, se'n genera una altra i es rota. Una còpia només afegeix risc |
| Clau efímera de sessió (TLS) | No | El seu valor és desaparèixer (forward secrecy, 03-03) |
| Clau mestra del xifratge de dades | Sí, amb custòdia estricta | Perdre-la equival a perdre totes les dades xifrades |
| Clau de les còpies de seguretat | Sí, i fora de l'entorn de producció | Si viu on són les còpies, el ransomware de 02-06 s'emporta totes dues |
| Clau de la CA arrel interna | Sí, amb procediment formal | La seva pèrdua obliga a reconstruir tota la PKI interna |
Bones pràctiques de custòdia, quan la resposta és sí:
- Còpia xifrada i en una ubicació diferent de les dades que protegeix, amb control d'accés independent.
- Repartiment entre diverses persones quan la clau és crítica: la reconstrucció exigeix, per exemple, dos de tres custodis. Evita el punt únic de fallada i també el punt únic d'abús.
- Assaig de recuperació almenys una vegada l'any, documentat. Una custòdia que mai no s'ha provat és una suposició, exactament igual que una còpia de seguretat no restaurada (02-04).
- Procediment escrit de qui pot sol·licitar la recuperació, qui l'aprova i com es registra.
Nota de validació professional. Quan la clau protegeix dades que revelen informació de salut —com les notes clíniques de les clíniques clientes de Nimbus—, el disseny de custòdia té implicacions legals: qui pot accedir a la dada, amb quina base jurídica, durant quant de temps es conserva i què passa amb les claus al final del període de conservació. La destrucció de la clau pot ser, de fet, un mecanisme vàlid de supressió de dades, però això s'ha de validar amb el responsable de protecció de dades i amb assessoria jurídica abans de recolzar-s'hi. El marc normatiu es tracta a 06-03.
Errors Comuns i Consells
- Secrets al repositori. El més freqüent i el més car. Escàner al CI i ganxos de pre-commit.
- Creure que esborrar el commit resol alguna cosa. Només la rotació efectiva ho resol; i primer es rota, després es neteja.
- No saber quantes claus hi ha. Sense inventari —clau, propòsit, amo, ubicació, data de rotació— no hi ha gestió possible.
- No rotar mai «perquè funciona». Una clau sense rotació acumula exposició: cada persona que va passar per l'equip la va poder veure.
- Rotar sense
kidni solapament. Converteix una operació rutinària en un tall de servei, i per això es deixa de fer. - Desar la clau al costat de la dada xifrada. Xifratge decoratiu. Especialment greu amb les còpies.
- Confiar només en la renovació automàtica de certificats. Cal monitoratge extern de la caducitat, amb alerta a 30 i 7 dies.
- Servir només la fulla sense la intermèdia. Funciona al navegador i falla a l'app mòbil.
- Validar el
CNen lloc del SAN. - Suposar que la revocació funciona. Falla en obert. Vides curtes i rotació són la defensa real.
- Muntar una CA interna sense mantenir-la. Una arrel interna mal custodiada és una clau mestra per atacar els teus propis equips.
- No fer còpia de la clau mestra de dades, o fer-la i no provar-la mai. Totes dues coses acaben igual de malament.
Consells
- Comença per l'inventari: llista totes les claus, secrets i certificats amb amo, propòsit, ubicació i data de rotació. És una tarda de feina i canvia per complet la conversa.
- Automatitza el que puguis: emissió ACME, renovació, rotació amb solapament, escaneig de secrets. El que és manual no es fa.
- Assaja una rotació completa i una recuperació des de custòdia abans de necessitar-les.
- Aplica el principi de propòsit únic: una clau, una funció. Deriva amb HKDF (03-02) en lloc de reutilitzar.
- I recorda la tesi: si algun dia tens un incident criptogràfic, el més probable és que la causa sigui una clau mal gestionada, no un algorisme trencat.
Exercicis
Exercici 1 — Respondre a un secret filtrat
Un escaneig detecta que fa catorze mesos es va pujar al repositori un fitxer deploy/.env.produccio amb la contrasenya de PostgreSQL, la clau de l'API de la passarel·la i el secret de signatura de tokens. El repositori és privat, amb accés dels cinc de l'equip i de dues persones de la consultora (A-19).
Es demana: (a) ordena les accions de les primeres quatre hores i justifica'n l'ordre; (b) explica què significa exactament rotar cadascun dels tres secrets i quin risc de tall té cada rotació; (c) indica quins registres revisaries i amb quina finestra temporal; (d) digues si això és un incident de seguretat notificable i quina informació necessites per decidir-ho; (e) proposa les tres mesures preventives que impedeixen que torni a passar.
Exercici 2 — Diagnosticar una cadena de certificats
L'app mòbil de Nimbus falla amb «certificat no vàlid» mentre el web funciona correctament al navegador. La sortida d'openssl s_client mostra:
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)Es demana: (a) diagnostica la causa exacta; (b) explica per què el navegador funciona i l'app no; (c) indica la correcció concreta al servidor; (d) proposa la comprovació automàtica que detectaria aquesta fallada abans que la reporti un client; (e) enumera tres motius diferents més pels quals un certificat vàlid pot fallar en un client.
Exercici 3 — Dissenyar la gestió de claus de Nimbus
La Marta demana un document d'una pàgina amb l'esquema de gestió de claus.
Es demana: construeix una taula amb almenys sis claus o secrets de Nimbus (signatura de tokens, xifratge d'adjunts, xifratge de còpies, credencials de base de dades, secret del webhook, certificat TLS) indicant per a cadascun: on viu, qui hi pot accedir, cadència de rotació, si té còpia de seguretat i on, i què passa si es perd. Justifica després les dues decisions més discutibles de la teva taula.
Solucions
Exercici 1
(a) Primeres quatre hores, per ordre:
- Considerar els tres secrets compromesos. Sense discussió: catorze mesos i nou persones amb accés, incloses dues d'externes.
- Rotar primer la clau de la passarel·la de pagament. És la de més impacte econòmic directe i la rotació és la menys disruptiva (es coordina amb el proveïdor).
- Rotar el secret de signatura de tokens amb el mecanisme de solapament de l'apartat 5, per no expulsar tots els usuaris.
- Rotar la contrasenya de PostgreSQL, coordinada amb un desplegament, ja que afecta tots els processos que connecten.
- En paral·lel, revisar registres d'ús dels tres secrets.
- Després, netejar l'historial del repositori i comunicar-ho a l'equip i a la consultora.
L'ordre respon al fet que rotar és contenció i netejar l'historial és higiene: mentre la credencial continuï sent vàlida, esborrar el commit no canvia res.
(b) Què significa rotar cadascun:
| Secret | Rotació | Risc de tall |
|---|---|---|
| Clau de la passarel·la | Sol·licitar credencial nova al proveïdor, desplegar-la, desactivar l'antiga i verificar que ja no funciona | Baix si el proveïdor permet dues claus actives; mitjà si no |
| Secret de signatura de tokens | Clau nova amb kid nou, publicar, commutar, solapar durant la vida màxima del token, retirar |
Nul amb solapament; alt si se substitueix de cop (totes les sessions cauen) |
| Contrasenya de PostgreSQL | Crear credencial nova per al rol nimbus_api, desplegar, retirar l'antiga |
Mitjà: cal reiniciar o recarregar els consumidors de manera coordinada |
(c) Registres i finestra. Finestra: des de la data del commit (catorze mesos) fins avui, no només des de la detecció. Registres: accessos i transaccions al panell de la passarel·la; connexions a PostgreSQL per origen, usuari i horari inusual; emissió i ús de tokens amb signatures anòmales; accessos al bucket A-05; i activitat del repositori (clons, forks, accessos dels comptes de la consultora). Es busquen orígens desconeguts, horaris fora de patró i volums anòmals, igual que en l'anàlisi de 02-06.
(d) És notificable? És un incident de seguretat amb certesa. És notificable si hi ha indicis d'accés no autoritzat a dades personals. Per decidir-ho calen: registres suficients i amb retenció adequada per cobrir catorze mesos (si no n'hi ha, això ja és una troballa greu i empeny cap a la prudència), evidència d'accessos anòmals, i l'abast de les dades assolibles amb aquelles credencials —que aquí inclou dades que revelen indirectament salut—. La decisió es pren amb assessoria jurídica i amb el responsable de protecció de dades, dins del termini de 72 hores de l'RGPD (06-03).
(e) Tres mesures preventives: (1) escàner de secrets al CI i ganxo de pre-commit que bloquegi el commit, més un .gitignore correcte; (2) gestor de secrets amb injecció a l'arrencada, de manera que no existeixi cap .env amb valors reals; (3) rotació automàtica programada amb solapament, perquè cap credencial no acumuli catorze mesos de vida i perquè rotar sigui una operació rutinària i no una emergència.
Exercici 2
(a) Causa exacta. El servidor envia només el certificat de fulla (0 s:), sense el certificat intermedi de Let's Encrypt. El codi 20 significa literalment que el client no pot obtenir l'emissor local: no pot construir la cadena fins a una arrel de confiança.
(b) Per què el navegador sí que funciona. Els navegadors d'escriptori solen tenir l'intermedi a la memòria cau de visites anteriors o el descarreguen mitjançant l'extensió Authority Information Access del certificat. Aquella recuperació és una cortesia, no part de la validació estàndard, i moltes llibreries HTTP i clients mòbils no la implementen: exigeixen que el servidor enviï la cadena completa, com mana l'estàndard.
(c) Correcció. Configurar ssl_certificate apuntant a fullchain.pem (fulla + intermèdia), no a cert.pem, i recarregar Nginx. Verificar després amb openssl s_client, on han d'aparèixer els dos graons i Verify return code: 0 (ok).
(d) Comprovació automàtica. Una tasca programada externa que, per a cada domini, executi openssl s_client sense fer servir el magatzem local d'intermedis i verifiqui tres coses: codi de retorn 0, nombre de certificats a la cadena més gran que un, i dies restants de validesa per sobre del llindar. Alerta a la Lucía si falla qualsevol dels tres. És el «control que verifica que el control funciona» d'Equifax aplicat aquí.
(e) Tres motius més: (1) el domini no és al SAN (encara que el CN sigui correcte); (2) data del client desajustada, que fa que un certificat vigent sembli caducat o encara no vàlid —freqüent en mòbils i en dispositius acabats d'instal·lar—; (3) pinning desactualitzat a l'app després d'una renovació de certificat (03-05). Un quart d'habitual: l'arrel corresponent no és al magatzem d'un sistema antic sense actualitzar.
Exercici 3
| Clau / secret | On viu | Qui hi accedeix | Rotació | Còpia? | Si es perd |
|---|---|---|---|---|---|
| Signatura de tokens (EdDSA) | Gestor de secrets; pública al JWKS | Només el procés de l'API | 3 mesos, amb kid i solapament |
No | Se'n genera una altra i es rota; cauen les sessions vives |
| Clau mestra de dades | KMS del proveïdor; no surt mai | L'API, amb permís d'Encrypt/Decrypt |
12 mesos (rotació de la mestra) | Sí, la gestiona el KMS amb custòdia del proveïdor | Adjunts i notes clíniques irrecuperables |
| Clau de les còpies | Gestor de secrets d'un altre compte, fora de producció | La Lucía i un procés de restauració | 12 mesos | Sí, custòdia externa amb dos de tres custodis | Còpies inservibles: el pitjor escenari després d'un ransomware |
Credencials de PostgreSQL (nimbus_api, nimbus_informes) |
Gestor de secrets, injectades en arrencar | Processos de l'API i d'informes | 6 mesos, i davant de qualsevol sospita | No | Se'n creen de noves; tall breu si no es coordina |
| Secret del webhook de la passarel·la | Gestor de secrets | Procés que atén /webhooks |
12 mesos, coordinada amb el proveïdor | No | S'acorda un de nou amb el proveïdor |
| Certificat TLS públic i la seva clau | Fitxer amb chmod 600 al frontal, emès per ACME |
Procés del servidor web | 60–90 dies, automàtica | No | Se n'emet un de nou; cal revocar l'anterior |
| Arrel de la CA interna (si es munta) | Fora de línia, suport xifrat en caixa forta | Cerimònia amb dos custodis | 5–10 anys, amb pla de substitució | Sí, formal | Cal reconstruir tota la PKI interna i redistribuir l'arrel |
Les dues decisions més discutibles:
- No fer còpia de la clau de signatura de tokens. Discutible perquè perdre-la expulsa tots els usuaris alhora. Es justifica perquè l'impacte és molèstia, no pèrdua de dades: els usuaris tornen a entrar. Una còpia, en canvi, seria una superfície permanent per a un secret que permet suplantar qualsevol usuari. El risc de la còpia supera el del tall.
- Desar la clau de les còpies en un compte diferent, amb dos de tres custodis. Discutible per la fricció que afegeix a una restauració urgent: si la Lucía està de baixa i falta un custodi, la restauració es retarda. Es justifica per la lliçó directa del ransomware de 02-06: la clau i les còpies al mateix entorn significa que qui compromet producció s'emporta totes dues. La mitigació de la fricció és tenir tres custodis i assajar la recuperació una vegada l'any, de manera que el procediment estigui provat abans de necessitar-lo.
Conclusió
Has entrat en el problema difícil i en surts amb la seva tesi interioritzada: els algorismes gairebé mai no fallen; la gestió de claus sí. Ho has vist en els incidents del curs —el certificat caducat d'Equifax que va encegar la detecció deu mesos, el .env de Nimbus que va obrir l'escalada— i en el contrast entre el que la gent tem i el que realment passa. Tens el cicle de vida complet d'una clau, amb les preguntes que cal respondre a cada fase i la constatació que la fase que ningú no documenta —la destrucció— és la que produeix credencials actives anys després. Saps on pot viure una clau, del codi font a l'HSM, amb la distinció precisa entre un gestor de secrets, que et lliura el valor, i un KMS o HSM, que operen per tu sense lliurar-te res; i amb la recomanació concreta per a Nimbus: gestor de secrets per a credencials, KMS per a la clau mestra de dades, mòdul del dispositiu per a les passkeys i HSM només si algú ho exigeix.
Has après què significa realment rotar —emetre, desplegar, revocar de manera efectiva, revisar registres i documentar—, per què esborrar el commit no revoca res i per què es rota abans de netejar l'historial; i has vist com es rota sense tallar el servei amb solapament i kid, la mateixa peça que sostenia la validació de JWT de 02-05. A la part de PKI has obert un certificat X.509 camp a camp i saps que el que valida el navegador és el SAN i no el CN; entens la cadena de confiança i per què existeix la intermèdia, els nou passos que comprova el client i la fallada clàssica de servir la fulla sense la intermèdia; saps que DV, OV i EV són tècnicament equivalents i que qualsevol CA del magatzem pot emetre per al teu domini; manejes ACME i saps que la renovació automàtica no és el control suficient —el control és el monitoratge extern de la caducitat—; coneixes els límits reals de la revocació, que falla en obert i ha estat substituïda a la pràctica per certificats de vida curta; i saps fer servir la transparència de certificats per detectar emissions indegudes i, de passada, com a inventari de subdominis oblidats. Hi afegeixes quan té sentit una PKI interna i els seus riscos, el xifratge de sobre amb clau de dades i clau mestra —que a més deixa auditoria per objecte al KMS— i el dilema honest de la custòdia: copiar de més multiplica la superfície, copiar de menys converteix el xifratge en pèrdua definitiva, i no hi ha punt mitjà automàtic, només una decisió escrita per tipus de clau.
Ja tens totes les peces del mòdul: les primitives, els protocols que les assemblen i la gestió que les sosté. A Aplicacions de la Criptografia (03-07) tanquem recorrent el sistema de Nimbus de punta a punta i assenyalant què protegeix què: el xifratge en repòs amb els seus tres nivells —disc, base de dades i aplicació— i el punt clau que el xifratge de disc no protegeix davant d'una API compromesa; el xifratge camp a camp de les notes clíniques amb el problema pràctic que introdueix, que ja no es pot cercar ni indexar; les còpies xifrades amb la clau fora de l'entorn; la signatura d'artefactes al CI/CD i la seva connexió amb SolarWinds; els tokens i les URL signades de 120 segons explicades per dins; i la diferència real entre pseudonimització i anonimització, amb el motiu pel qual el hash d'un DNI no és anonimització.
Curs de Fonaments de Seguretat Informàtica
Mòdul 1: Introducció a la Seguretat Informàtica
- Conceptes Bàsics de Seguretat Informàtica
- Tipus d'Amenaces i Vulnerabilitats
- Principis de la Seguretat Informàtica
- Actius, Superfície d'Atac i Actors d'Amenaça
Mòdul 2: Ciberseguretat
- Definició i Abast de la Ciberseguretat
- Tipus d'Atacs Cibernètics
- Enginyeria Social i Pesca de Credencials
- Mesures de Protecció en Ciberseguretat
- Identitat, Autenticació i Control d'Accés
- Casos d'Estudi d'Incidents de Ciberseguretat
Mòdul 3: Criptografia
- Introducció a la Criptografia
- Criptografia Simètrica
- Criptografia Asimètrica
- Funcions Hash, HMAC i Emmagatzematge de Contrasenyes
- Protocols Criptogràfics
- Gestió de Claus, Certificats i PKI
- Aplicacions de la Criptografia
Mòdul 4: Gestió de Riscos i Mesures de Protecció
- Avaluació de Riscos
- Polítiques de Seguretat
- Controls de Seguretat
- Risc de Tercers i Cadena de Subministrament
- Pla de Resposta a Incidents
- Recuperació davant Desastres i Continuïtat de Negoci
Mòdul 5: Eines i Tècniques de Seguretat
- Eines d'Anàlisi de Vulnerabilitats
- Tècniques de Monitoratge i Detecció
- Proves de Penetració
- Seguretat en Xarxes
- Seguretat en Aplicacions
- Enfortiment de Sistemes i Seguretat de l'Endpoint
- Seguretat al Núvol i en Contenidors
Mòdul 6: Bones Pràctiques i Normatives
- Bones Pràctiques en Seguretat Informàtica
- Normatives i Estàndards de Seguretat
- Protecció de Dades Personals i RGPD a la Pràctica
- Compliment i Auditoria
- Formació i Sensibilització
- Ètica, Aspectes Legals i Divulgació Responsable
