Skip to content

INV-004 — Cryptographic Key Custody Registry

CampoValor
IDINV-004
Versión1.0
Fecha emisión2026-08-01
Próxima revisión2026-11-01 (trimestral)
PropietarioCISO + CTO
PCI DSSReq 3.5, 3.6.1, 3.6.2, 3.7.1-3.7.9, 8.2.1
Retención7 años post-retiro de la clave

1. Propósito

Inventario auditable de todas las claves criptográficas en uso en el sistema Fintrixs Pay, con custodios asignados, rotación programada, propósito y estado.

Cumple con PCI DSS Req 3.7.2: "Restrict access to cryptographic keys to the fewest number of custodians necessary" — este documento es ese registro.


2. Claves activas — Producción

KEY-001 — Vault Shamir Master Key

CampoValor
ID internoKEY-001
AlgoritmoShamir Secret Sharing over GF(256)
Configuración5 shares, threshold 3-of-5
PropósitoDesbloqueo del Vault OSS 1.15.6
UbicaciónDistribuido en 5 custodios físicos (papel notariado)
Fecha generación2026-07-30 (inicial) / 2026-08-XX (ceremonia distribución)
Rotación programada2027-08-05 (anual)
Longitud256 bits (base key), each share ~64 chars hex
CustodiosVer INV-004-CUSTODIANS (secreto, restringido a coord + notario)
Método distribuciónPapel A4 con QR + hex, notariado
Registro cadena de custodiadocs/security/vault-shamir-ceremony/CUSTODIAL-CHAIN-OF-CUSTODY.md
Ceremonia asociadaSHAMIR-20260805-01
Ubicaciones físicasBogotá (4), Medellín (1) — separación geográfica
Threshold recuperación3 custodios cooperando
Estado⚠️ Ceremonia pendiente ejecución (paquete preparado en repo)

Uso operativo:

  • Startup del cluster Vault: unseal automático via Auto-Unseal (si config), o manual con 3 shares.
  • Rotación anual: vault operator rekey en nueva ceremonia.

Riesgos + mitigaciones:

  • Pérdida de 3+ shares: Vault irrecuperable. Mitigación: 5 shares = sobrevive a 2 perdidos.
  • Compromiso de 3 shares: rekey de emergencia < 24h + re-cifrado todas las KEK downstream.

KEY-002 — Vault Transit KEK (kek-card-vault)

CampoValor
ID internoKEY-002
AlgoritmoAES-256-GCM (Vault Transit)
PropósitoCifrar/descifrar PANs almacenados en card-vault-service
UbicaciónVault Transit engine, path transit/kek-card-vault
Custodio efectivoHashiCorp Vault (custodia técnica)
Custodio humanCTO Gabriel Ureña (autoriza rotaciones via UI Vault)
Rotación programadaCada 12 meses (PCI DSS Req 3.7.4)
Última rotación2026-XX-XX (pending si no ejecutada)
Próxima rotación2027-XX-XX
Método rotaciónvault write -f transit/keys/kek-card-vault/rotate
Estrategia rewrapAutomatizada — script rewrap-kek-card-vault.sh reencripta ciphertexts existentes a la nueva versión
Versión activav1 (actualizar tras primera rotación)
Estado✅ Activa

Riesgos:

  • Compromiso de KEK: attacker con acceso Vault + policy Transit puede descifrar TODOS los PANs. Mitigación: Vault protegido con Shamir, policies restrictivas, auditoría.

KEY-003 — HMAC PAN Fingerprint Key (hmac-pan-fpr)

CampoValor
ID internoKEY-003
AlgoritmoHMAC-SHA256 (Vault Transit)
PropósitoFingerprint determinístico de PAN sin revelar (para dedup / search)
UbicaciónVault Transit engine, path transit/hmac-pan-fpr
Custodio efectivoVault
Custodio humanCTO
Rotación programada24 meses (dedup breaks al rotar, evaluar impacto)
Última rotación2026-XX-XX
Próxima rotación2028-XX-XX
Estado✅ Activa

KEY-004 — DR Backup GPG Public Key

CampoValor
ID internoKEY-004
AlgoritmoRSA 4096-bit + AES-256 (GPG hybrid)
PropósitoCifrar backups DR antes de subir a Backblaze B2
Recipient[email protected]
Fingerprint(ver backend/infra/dr/backup-public.gpg)
Public key locationbackend/infra/dr/backup-public.gpg (repo git) + /root/.gnupg-dr/ en vault-01,02,03
Private key custodios2 personas independientes (backup dual):
1. CTO Gabriel Ureña — pendrive USB encriptado, safe residencia
2. Legal Externa Laura Gómez (ejemplo) — sobre lacrado en Notaría 42
Rotación programadaCada 24 meses
Última rotación2026-07-30 (generación inicial)
Próxima rotación2028-07-30
Estado✅ Activa. Public key distribuida; private key custodial.

Uso operativo:

  • Cada backup DR (vault snapshot, pg_dump, k8s state, terraform state, container images) se cifra con esta pubkey antes de upload a B2.
  • Para restore: 1 de los 2 custodios provee su private key.

KEY-005 — Auth Service JWT Signing Key (RS256)

CampoValor
ID internoKEY-005
AlgoritmoRSA 2048-bit (JWT RS256)
PropósitoFirma de JWT emitidos por auth-service para usuarios finales
Ubicaciónauth-service K8s secret auth-service-secrets key JWT_PRIVATE_KEY
Custodio técnicoKubernetes Secrets (encrypted at rest via kube API)
Public keyDistribuida a: card-vault-service, tokenization-service, payments-api (secret JWT_PUBLIC_KEY)
Rotación programada12 meses
Última rotación2026-XX-XX
Próxima rotación2027-XX-XX
Método rotaciónDual-key rollout: emit nueva key, verificar en todos los consumers, retirar vieja
Estado✅ Activa

KEY-006 — Service-to-Service JWT HMAC (HS256)

CampoValor
ID internoKEY-006
AlgoritmoHMAC-SHA256
PropósitoFirma de JWT S2S entre payments-api → card-vault-service
UbicaciónK8s secret payments-api-secrets + card-vault-jwt en namespace pci-cde
Custodio técnicoKubernetes Secrets (encrypted at rest)
Rotación programada6 meses
Última rotación2026-07-31 (creación inicial durante cutover pci-cde)
Próxima rotación2027-01-31
Método rotaciónRekey → patch K8s secret → rolling restart
Estado✅ Activa

KEY-007 — Vault AppRole SecretIDs (card-vault, tokenization)

CampoValor
ID internoKEY-007a (card-vault), KEY-007b (tokenization)
AlgoritmoRandom opaque token 32-byte
PropósitoAutenticación service-to-Vault via AppRole
UbicaciónK8s secrets vault-approle-card-vault + vault-approle-tokenization en pci-cde
Custodio técnicoK8s Secrets encrypted at rest
TTL720h (30 días) desde 2026-07-31 hardening
Rotación programadaCada 7 días vía cronjob systemd
Última rotación2026-07-31 (manual durante hardening)
Próxima rotación autoDomingo 2026-08-02 03:08 UTC (vault-approle-rotator.timer)
Estado✅ Activa + auto-rotation

KEY-008 — B2 Application Keys (6 scoped)

CampoValor
ID internoKEY-008a → KEY-008f (una por bucket)
AlgoritmoRandom opaque token 32-byte (Backblaze)
PropósitoAutenticación least-privilege por bucket DR
UbicaciónVault-01,02,03 /etc/b2-credentials/ (root:root 600)
Custodio técnicoSistema (root drive)
Custodio humanCTO
Rotación programada90 días (PCI DSS 8.3.10.1)
Última rotación2026-07-31 (creación inicial + terraform/images 2026-08-01)
Próxima rotación2026-10-31
Estado✅ Activas.

Detalle por bucket:

  • KEY-008a: writer-fintrix-dr-vault — vault snapshots
  • KEY-008b: writer-fintrix-dr-postgres — pg backups
  • KEY-008c: writer-fintrix-dr-manifests — k8s state
  • KEY-008d: writer-fintrix-dr-audit — vault audit logs
  • KEY-008e: writer-fintrix-dr-terraform — tfstate
  • KEY-008f: writer-fintrix-dr-images — container images mirror

KEY-009 — Master B2 Key PCI (temporal)

CampoValor
ID internoKEY-009
AlgoritmoRandom opaque token 32-byte
PropósitoMaster account key para crear las 6 scoped keys
UbicaciónLocal en máquina del CTO — no persistida en repo
CustodioCTO Gabriel Ureña
Estado⚠️ ACTIVA — PENDING REVOCACIÓN
Fecha creación2026-08-01
Fecha revocación esperadaTan pronto como usuario confirme setup completo (< 24h post-creación)

Acción requerida: el CTO revocará esta master key desde app.backblazeb2.com

Application Keys → deletes "PCI" key.


3. Claves retiradas / rotadas

(Historial de claves que ya no están en uso pero se conservan por auditoría — según Req 3.7.9 rotación implica retirement documentado)

IDRetiradaMotivoReemplaza aReemplazada por
KEY-0102026-07-31Hardening PCIMaster B2 antigua Fintrixs-complianceKEY-008a-f + KEY-009

4. Matriz responsabilidad

ActividadCTOCISOCFOLegalVault ops
Autorizar rotación programadaRAIIC
Autorizar rotación emergenciaARICC
Ejecutar rotación técnicaRIC
Custodia física (shares Shamir)CCCC
Auditoría de rotaciónIRA

R = Responsible, A = Accountable, C = Consulted, I = Informed

5. Cronograma de rotaciones 2026-2027

FechaClaveAcciónOwner
2026-08-05KEY-001 (Shamir)Ceremonia distribución inicialCTO
2026-08-XXKEY-002 (KEK card-vault)Rotación primera (si aún v1)CTO
Sun 2026-08-02 03:08 UTCKEY-007 (AppRole)Rotación auto (weekly)System
2026-10-31KEY-008 (B2 scoped)Rotación 90dCTO
2027-01-31KEY-006 (S2S JWT)Rotación 6mCTO
2027-07-30KEY-004 (DR GPG)Rotación 24mCTO + Legal
2027-08-05KEY-001 (Shamir)Ceremonia rotación anualTodos

6. Notificación al QSA

Cada rotación de clave debe:

  1. Documentarse en este INV-004 (actualizar "última rotación").
  2. Escribir entry en docs/security/ROTATION-LOG.md (crear si no existe).
  3. Si es rotación de emergencia: notificar al QSA en < 48h.

Documentación Confidencial — Solo para uso interno y auditoría PCI DSS