Skip to content

Documento de Arquitectura Criptográfica — Fintrixs Pay

Documento: DOC-CRYPTO-ARCH-01 Versión: 1.0 Fecha de aprobación: 2026-07-29 Owner: CTO / Security Lead Frecuencia de revisión: Anual + tras cambios significativos Referencias PCI DSS: Req 3.5, 3.6.1.1, 3.6.1.2, 3.6.1.3, 3.7.1-9


1. Propósito

Este documento describe la arquitectura criptográfica implementada por Fintrixs Pay para proteger la Información Cubierta (Cardholder Data — CHD, y Sensitive Authentication Data — SAD) en cumplimiento de PCI DSS v4.0 Requerimiento 3.

Es el documento de referencia obligatorio bajo Req 3.6.1.1 para todo Service Provider.

2. Alcance criptográfico

Componentes del CDE que ejecutan operaciones criptográficas sobre CHD/SAD:

ComponenteRolUbicación
card-vault-serviceAlmacenamiento cifrado de PAN + metadata de tarjetaNamespace default, migrará a pci-cde (SEC-012)
tokenization-serviceEmisión y gestión de tokens (tok_pan_, tok_cvv_)Namespace default, migrará a pci-cde
payments-apiConsumidor de tokens/decrypt para autorizaciónNamespace default, migrará a pci-cde
HashiCorp Vault clusterFuente de todas las claves criptográficas y operaciones sensiblesVPC fintrix-production-vpc, droplets dedicados

3. Clasificación de datos

ClaseEjemploAlmacenamiento permitidoCifrado obligatorio
PAN (Primary Account Number)Número completo de tarjeta✅ En card-vault-service (cifrado)✅ AES-256-GCM
PAN truncadoBIN + últimos 4 (4111 **** **** 1234)✅ Cualquier tabla operativaNo requerido
PAN fingerprintHMAC-SHA256 del PAN✅ Índice de búsquedaHMAC con key rotada anualmente
CVV / CVV2 (SAD)Código de seguridad⚠️ SOLO hasta autorización, luego destrucción✅ AES-256-GCM en memoria + purge inmediato
PIN / PIN Block (SAD)PIN de tarjeta❌ NO almacenado (Fintrixs no procesa PIN)N/A
Track 1 / Track 2 (SAD)Datos de banda magnética❌ NO almacenado (Fintrixs opera solo online)N/A
Nombre del portadorNombre en tarjeta✅ En card-vault-service (cifrado)✅ AES-256-GCM
Fecha de expiraciónMM/YY✅ En card-vault-service (cifrado)✅ AES-256-GCM

Regla dura: ningún servicio fuera de card-vault-service y tokenization-service puede recibir, procesar, almacenar ni loguear PAN o SAD en claro. Cumplimiento verificado con SAST rules + auditoría de logs vía SIEM.

4. Algoritmos aprobados

Solo se permiten los siguientes algoritmos criptográficos, seleccionados de acuerdo con NIST SP 800-131A y PCI DSS v4.0 Anexo A2:

UsoAlgoritmoFortalezaEstándar
Cifrado simétrico de PAN/SADAES-256-GCM256 bitsNIST SP 800-38D
Fingerprint/hash de PAN para búsquedaHMAC-SHA-256 con key dedicada256 bitsFIPS 198-1
Firma JWTRS256 (RSA-2048 + SHA-256) o ES2562048 / 256 bitsRFC 7518
TLS entre serviciosTLS 1.3 (fallback 1.2 con ECDHE-only cipher suites)NIST SP 800-52 Rev 2
Envelope encryption — DEKAES-256-GCM (cifrada por KEK)256 bitsNIST SP 800-38F
Envelope encryption — KEKAlmacenada en Vault transit engine (AES-256-GCM)256 bitsNIST SP 800-38D
Password hashing (usuarios de la plataforma)Argon2id (m=64MB, t=3, p=4)RFC 9106

Prohibidos explícitamente:

  • DES, 3DES, RC4, MD5, SHA-1, RSA-1024, DH < 2048
  • TLS 1.0 y 1.1 (bloqueados a nivel de Kong y Vault)
  • Cifrados no autenticados (AES-CBC sin HMAC, AES-ECB)

5. Modelo de key management

5.1 Jerarquía de claves

                    ┌─────────────────────────────────────┐
                    │   Shamir Master Key                  │
                    │   (Vault seal key)                   │
                    │   AES-256, split 5-of-5 threshold 3 │
                    │   Nunca escrita a disco              │
                    └───────────────┬─────────────────────┘
                                    │ unseal

                    ┌─────────────────────────────────────┐
                    │   Vault Root Key                     │
                    │   (interno de Vault Barrier)         │
                    │   Cifra el keyring                    │
                    └───────────────┬─────────────────────┘

                    ┌───────────────┼───────────────┐
                    ▼               ▼               ▼
        ┌───────────────────┐  ┌─────────────┐  ┌──────────────┐
        │  KEK (Key         │  │  KEK        │  │  KEK         │
        │  Encrypting Key)  │  │  fingerprint│  │  tokenization│
        │  card-vault-svc   │  │  HMAC       │  │  service     │
        │  transit/keys/kek-│  │  transit/   │  │  transit/    │
        │  card-vault       │  │  keys/hmac- │  │  keys/kek-   │
        │                   │  │  pan-fpr    │  │  tokenization│
        │  AES-256-GCM      │  │  HMAC-256   │  │  AES-256-GCM │
        │  Rotación: 12 mes │  │  Rot: 12 m  │  │  Rot: 12 m   │
        └────────┬──────────┘  └─────────────┘  └──────┬───────┘
                 │                                       │
                 │ envuelve DEK                          │ envuelve DEK
                 ▼                                       ▼
        ┌───────────────────┐                  ┌──────────────────┐
        │  DEK (Data        │                  │  DEK             │
        │  Encrypting Key)  │                  │  tokenized_data  │
        │  Generada por     │                  │  Generada por    │
        │  registro         │                  │  registro        │
        │  AES-256-GCM      │                  │  AES-256-GCM     │
        │  1 por card_id    │                  │  1 por token_id  │
        └───────────────────┘                  └──────────────────┘

5.2 Ubicación física y lógica de cada clave

ClaveAlmacenamientoFormatoBackupRetención
Shamir shares (5)Custodios humanos (papel + sobre sellado + caja fuerte)ASCII base642 shares en escrow (caja fuerte oficina + notario)Vida del sistema
Vault Root KeyRAM del proceso Vault (nunca a disco)BinarioN/A (se regenera al re-key)Hasta próximo re-key
KEKs (transit engine)Vault Raft storage (cifrado con Root Key)Vault-managedSnapshot diario en DO Spaces (WORM)Historial completo (Vault mantiene versiones anteriores para decrypt)
DEKsJunto al dato cifrado en Postgres (columna dek_ciphertext)Base64 del ciphertextJunto con backup de DBVida del registro
HMAC key (fingerprint)Vault transit engine (hmac-pan-fpr)Vault-managedSnapshot VaultRotación anual sin re-hash de datos existentes

5.3 Cryptoperiod y rotación

Definido según NIST SP 800-57 Parte 1 Rev 5:

ClaveCryptoperiodTrigger de rotación
Shamir Master Key3 añosCambio de custodio, compromiso sospechado, evento de re-key programado
KEK card-vault-service12 mesesCron automático 1° de enero, o compromiso sospechado
KEK tokenization-service12 mesesCron automático 1° de enero, o compromiso sospechado
HMAC key (fingerprint)12 mesesCron automático 1° de febrero
DEK por registroVida del registroSe genera nueva por cada nuevo tarjeta guardada; se descarta cuando se borra el registro
TLS certificates90 díasAutomático vía cert-manager
JWT signing keys6 mesesManual documentado + graceful rollover 30 días

5.4 Split knowledge y Dual Control (PCI DSS 3.7.6)

Implementación vía Shamir Secret Sharing:

  • La Master Key de Vault se divide en 5 shares con threshold 3 (necesitás 3 personas para unseal).
  • Cada share es entregada a un custodio distinto físicamente presente durante la ceremonia.
  • Ningún custodio conoce la master key completa (split knowledge ✅).
  • Ninguna operación sensible de Vault puede realizarse con menos de 3 custodios (dual control ✅ — el término PCI "dual" se cumple con ≥2, acá excedemos requerimiento).

Custodios designados:

#RolCustodioAcuerdo firmado
1CTO[NOMBRE_CUSTODIO_A]KEY-CUSTODIAN-AGREEMENT-A.pdf
2Security Lead[NOMBRE_CUSTODIO_B]KEY-CUSTODIAN-AGREEMENT-B.pdf
3CEO / Cabeza legal[NOMBRE_CUSTODIO_C]KEY-CUSTODIAN-AGREEMENT-C.pdf
4Escrow físico (oficina)2 personas requeridas para acceder a caja fuerteESCROW-D-PHYSICAL-ACCESS-LOG.pdf
5Escrow legal externoNotaría [NOMBRE_NOTARIA]ESCROW-E-NOTARIAL-DEED.pdf

PENDIENTE completar: los custodios A, B, C con nombres reales requieren decisión del CTO + firma de los acuerdos de custodio.

6. Ciclo de vida de las claves (PCI DSS 3.7.1 a 3.7.9)

6.1 Generación (Req 3.7.1)

  • Toda clave se genera dentro de Vault mediante el CSPRNG del kernel Linux (/dev/urandom, respaldado por getrandom(2)).
  • Los Shamir shares se generan en RAM del proceso Vault durante vault operator init; nunca se escriben a disco.
  • Ceremonia formal documentada en KEY-CEREMONY-RUNBOOK.md (video + firma de asistentes + logs de comandos ejecutados).

6.2 Distribución segura (Req 3.7.2)

  • Shamir shares: entregadas físicamente en sobre sellado, firmado por el custodio receptor. Nunca se transmiten electrónicamente.
  • KEKs y DEKs operacionales: nunca salen del proceso Vault (transit engine encrypt-as-a-service).
  • Los servicios (card-vault, tokenization) NUNCA reciben la KEK — envían el plaintext a Vault y reciben ciphertext.

6.3 Almacenamiento seguro (Req 3.7.3)

  • Master Key: en RAM únicamente. Al parar Vault, se pierde y requiere unseal.
  • Shamir shares: papel en sobre sellado en caja fuerte (2 shares) + custodios personales (3 shares).
  • KEKs: Vault Raft storage cifrado por Barrier + KEK del proceso.
  • DEKs: cifradas por KEK correspondiente, almacenadas junto al ciphertext en Postgres.

6.4 Rotación al fin del cryptoperiod (Req 3.7.4)

  • Automatizada: cron job (vault-key-rotation-cron) ejecuta vault write transit/keys/{name}/rotate en la fecha programada.
  • Re-encryption diferida: los datos existentes se re-encriptan on-read con la nueva versión (o mediante batch job en ventana off-peak).
  • Todo evento de rotación queda en Vault audit log (inmutable, replicado a DO Spaces WORM).
  • Ver runbook KEY-ROTATION-PROCEDURE.md.

6.5 Retirement y sustitución (Req 3.7.5)

  • Compromiso sospechado → activación del INCIDENT-KEY-COMPROMISE.md runbook.
  • Acciones inmediatas: vault write transit/keys/{name}/rotate + revocación de versión comprometida + re-encryption forzada de todos los datos + notificación a stakeholders en <4h.

6.6 Prevención de sustitución no autorizada (Req 3.7.7)

  • Vault Access Policies (vault-policies/) restringen update, rotate, delete solo a la policy crypto-admin que requiere autenticación con AppRole + MFA + firma de 2 admins (Vault Sentinel policy).
  • Audit log inmutable registra todo intento con entity_id, client_token, remote_address, request_id.

6.7 Acuerdo formal de custodios (Req 3.7.8)

  • Cada custodio firma KEY-CUSTODIAN-AGREEMENT.pdf que incluye:
    • Descripción de responsabilidades
    • Compromiso de no revelar la share bajo ninguna circunstancia
    • Procedimiento de handoff en caso de renuncia/cambio de rol
    • Consecuencias legales de violación (cláusulas de confidencialidad + penal)
  • Archivo firmado se conserva en el drive legal + copia en escrow notarial.

6.8 Políticas documentadas (Req 3.7.9)

  • Este documento (DOC-CRYPTO-ARCH-01) + KEY-MANAGEMENT-PROCEDURE.md + DATA-RETENTION-DELETION-PROCEDURE.md cumplen el requerimiento de políticas documentadas.
  • Revisión anual obligatoria; próxima revisión: 2027-07-29.

7. Separación producción vs. pruebas (Req 3.6.1.4 / 6.5.5)

  • Vault opera con namespaces separados:
    • namespace: prod — usado por servicios en pci-cde namespace de K8s
    • namespace: staging — usado por servicios en cluster fintrix-staging-k8s
  • Cada namespace tiene su propia jerarquía completa de KEKs.
  • Nunca se copian claves prod → staging ni viceversa.
  • Los datos de test NUNCA contienen PAN real; se usan test cards de Visa/MC/Amex documentadas en TEST-CARDS-INVENTORY.md.

8. Inventario de dispositivos criptográficos

DispositivoTipoUbicaciónFunciónSerial / ID
Vault cluster (3 nodos)Software Cryptographic ModuleDO droplets en fintrix-production-vpcMaster key management, transit encrypt, PKIvault-01, vault-02, vault-03
DO Spaces bucket (WORM)Object storage con object-lockfintrix-vault-audit-nyc3Audit log inmutableBucket ID: [TO_FILL]
Postgres card_vault DBSistema de almacenamiento cifradoDOKS pci-cde namespace, StatefulSetStorage de PAN cifradoCluster ID: [TO_FILL]

Nota sobre HSM: No se utiliza HSM físico. La decisión está documentada como compensating control:

Vault OSS implementa AES-256-GCM (algoritmo NIST-approved), Shamir Secret Sharing para split knowledge, audit log inmutable, y rotación automatizada. La ausencia de FIPS 140-2 validated hardware se compensa con: (a) uso exclusivo de algoritmos aprobados NIST SP 800-131A, (b) audit log WORM con retención 365 días, (c) segmentación del cluster Vault en nodos dedicados sin otras cargas, (d) roadmap para migración a HSM cloud (Fortanix DSM o Vault Enterprise HSM binary) en Q4 2026 tras evaluación de volumen post-certificación.

9. Historial de revisiones

VersiónFechaAutorCambios
1.02026-07-29Security LeadDocumento inicial. Cubre Preguntas 25/27/28 del cuestionario ControlCase.

10. Aprobaciones

RolNombreFirmaFecha
CTO[TO_FILL]
Security Lead[TO_FILL]
CEO[TO_FILL]

Documentos relacionados:

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