Skip to content

Covered Information Data Matrix — Fintrixs Pay

Documento: DOC-DATA-MATRIX-01 Versión: 1.0 Fecha de aprobación: 2026-07-29 Owner: Security Lead + DPO Frecuencia de revisión: Anual + tras cambios significativos en el CDE Referencias PCI DSS: Req 3.2.1 (retención mínima), Req 3.3.1 (SAD no persistente), Req 9.4 (media disposal) Cuestionario ControlCase: Pregunta 25


1. Propósito

Este documento inventaría toda la Información Cubierta (Covered Information) que Fintrixs Pay almacena, procesa o transmite, con la justificación de negocio, ubicación exacta, método de protección, período de retención y evidencia de revisión.

Es el documento primario que responde a la Pregunta 25 del cuestionario ControlCase.

2. Definiciones

TérminoDefinición (PCI DSS v4.0 Glossary)
CHD (Cardholder Data)PAN + cualquier otro dato de portador (nombre, expiración, service code)
PAN (Primary Account Number)Número de tarjeta (13-19 dígitos)
SAD (Sensitive Authentication Data)CVV/CVV2/CVC2, PIN/PIN Block, Track 1/Track 2
CDE (Cardholder Data Environment)Segmento de red y sistemas que almacenan/procesan/transmiten CHD o SAD
Covered InformationCHD + SAD + cualquier dato adicional bajo alcance de esta certificación

3. Matriz de datos protegidos

3.1 Cardholder Data (CHD)

#DatoJustificación de negocioUbicación de almacenamientoMétodo de protecciónPeríodo de retenciónÚltima revisión
CHD-01PAN completoRecurring payments (subscriptions). Requerido para autorizar cargos futuros sin re-solicitar tarjeta al cliente.Postgres schema card_vault.stored_cards (StatefulSet en namespace pci-cde)AES-256-GCM (envelope encryption con KEK en Vault transit engine kek-card-vault)Vida de la suscripción activa + 30 días post-cancelación (justificado por dispute chargeback window)2026-07-29
CHD-02PAN fingerprint (HMAC-SHA256)Búsqueda idempotente sin exponer PAN. Evita duplicados de tarjeta por cliente.Postgres schema card_vault.stored_cards.pan_fingerprintHMAC-SHA-256 con clave dedicada en Vault (hmac-pan-fpr)Igual que CHD-012026-07-29
CHD-03PAN truncado (BIN + last4)UI: mostrar al cliente cuál tarjeta guardó. Logs de transacción para reconciliación.Postgres schema payments_core.payment_intents.card_display, logs de appNo requiere cifrado (dato ya enmascarado)Vida de transacción + 7 años (retención fiscal)2026-07-29
CHD-04Nombre del portadorAutorización de transacción (algunas redes requieren cardholder name match)Postgres schema card_vault.stored_cards.cardholder_name_ciphertextAES-256-GCM (mismo envelope que CHD-01)Igual que CHD-012026-07-29
CHD-05Fecha de expiración (MM/YY)Autorización + notificación pre-expiración al clientePostgres schema card_vault.stored_cards.exp_ciphertextAES-256-GCM (mismo envelope que CHD-01)Igual que CHD-012026-07-29
CHD-06Service codeAutorización (identifica tipo de tarjeta ATM/débito/crédito)No almacenado — leído del PAN en runtimeN/AN/A2026-07-29

3.2 Sensitive Authentication Data (SAD)

Política dura: SAD NUNCA se almacena post-autorización. Se retiene únicamente en memoria del tokenization-service durante la ventana de autorización activa, con purge automático inmediato.

#DatoJustificación de negocioUbicaciónMétodo de protecciónPeríodo de retenciónÚltima revisión
SAD-01CVV / CVV2Autorización de transacción one-time (algunos processors requieren CVV)RAM del tokenization-service pod únicamente. Token tok_cvv_* con TTL 15 min.AES-256-GCM en memoria + purge automático post-autorizaciónMax 15 minutos (TTL enforced por Vault kv-v2 lease + cron de purge cada 60 seg)2026-07-29
SAD-02PIN / PIN BlockNO recibido ni procesado por Fintrixs (opera solo canales card-not-present online)N/AN/AN/A2026-07-29
SAD-03Track 1 / Track 2NO recibido ni procesado (no operamos card-present ni con lectores)N/AN/AN/A2026-07-29

3.3 Otros datos bajo alcance

#DatoJustificaciónUbicaciónMétodo de protecciónRetención
USR-01Email de merchantAutenticación + notificacionesauth_db.usersbcrypt en password field, email en claro con RLS por merchantVida de cuenta + 30 días post-baja
USR-02JWT secretsFirma de tokens JWTVault kv-v2/jwt-signing-keysVault-managed AES-256-GCMRotación 6 meses
USR-03Merchant API keysAutenticación B2Bpayments_core.api_keys (hash SHA-256)Solo hash almacenado (nunca la key en claro post-generación)Vida activa del API key
INF-01Logs de aplicación con requestIdDebugging + auditELK/Loki cluster + DO Spaces WORMEncryption at rest de DO Spaces + acceso restringido90 días online + 275 días archive (365 total, PCI Req 10.5.1)
INF-02Backup de PostgresRecuperación de desastreDO Spaces WORM bucketEncryption at rest + GPG encryption con key en Vault90 días

4. Ubicación física y lógica del almacenamiento

┌────────────────────────────────────────────────────────────────────┐
│  fintrix-production-vpc (10.100.0.0/16) — Region: nyc1             │
│                                                                     │
│  ┌──────────────────────────────────────────────────────────────┐ │
│  │  DOKS cluster fintrix-production-k8s                          │ │
│  │                                                                │ │
│  │  ┌── namespace: pci-cde (target SEC-012) ──────────────────┐ │ │
│  │  │  card-vault-service pods                                 │ │ │
│  │  │  tokenization-service pods                               │ │ │
│  │  │  payments-api pods                                       │ │ │
│  │  │  Postgres StatefulSet (schemas: card_vault, tokens)     │ │ │
│  │  │  → CHD-01, CHD-02, CHD-04, CHD-05 aquí                  │ │ │
│  │  └──────────────────────────────────────────────────────────┘ │ │
│  │                                                                │ │
│  │  ┌── namespace: default ────────────────────────────────────┐ │ │
│  │  │  auth-service, merchants-api                              │ │ │
│  │  │  → USR-01, USR-03 aquí                                    │ │ │
│  │  └──────────────────────────────────────────────────────────┘ │ │
│  └──────────────────────────────────────────────────────────────┘ │
│                                                                     │
│  ┌──────────────────────────────────────────────────────────────┐ │
│  │  Vault cluster (droplets separados en misma VPC)              │ │
│  │  vault-01 (10.100.0.20), vault-02 (10.100.0.21), vault-03    │ │
│  │  → USR-02, todas las KEKs y HMAC keys aquí                    │ │
│  └──────────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────────┘


              ┌──────────────────────────────────────┐
              │  DO Spaces (region nyc3)              │
              │  fintrix-vault-audit-nyc3 (WORM)     │
              │  fintrix-logs-archive-nyc3           │
              │  fintrix-db-backup-nyc3              │
              │  → INF-01, INF-02 aquí                │
              └──────────────────────────────────────┘

5. Flujos de datos (referencia al DFD)

Ver documento formal data_flow_diagram.md para el diagrama detallado. Resumen de flujos que involucran Covered Information:

  1. Guardar tarjeta para recurring (customer-not-present)

    • Cliente ingresa PAN en checkout iframe → HTTPS TLS 1.3 → tokenization-service
    • tokenization-service genera tok_pan_* + envía PAN a card-vault-service
    • card-vault-service genera DEK, cifra PAN + nombre + exp con DEK, envuelve DEK con KEK (Vault transit)
    • Persiste ciphertexts + DEK_cifrada + fingerprint en card_vault.stored_cards
    • Retorna card_id UUID → asociado a subscription_customer_id
  2. Cobro recurrente (scheduled)

    • Cron trigger → payments-api consulta subscriptions WHERE next_billing_date <= now()
    • Para cada suscripción: fetch card_id → llamada a card-vault-service
    • card-vault-service fetch ciphertext + DEK_cifrada → desenvuelve DEK con Vault → descifra PAN
    • Envío del PAN al processor (Wompi/Cybersource/etc.) sobre TLS 1.3
    • PAN en RAM del pod solo durante la duración del request; nunca a disco
    • Respuesta del processor → actualización de subscriptions.next_billing_date
  3. Purge SAD post-autorización

    • Post-autorización exitosa/fallida → tokenization-service invalida tok_cvv_* inmediatamente
    • Cron cada 60 seg elimina cualquier tok_cvv_* con lease expirado (>15 min)
    • Evento sad.purged publicado a Kafka con token_id, purge_reason, timestamp (audit)

6. Método de protección — resumen

ClaseProtección primariaProtección secundariaReferencia
PAN almacenadoAES-256-GCM (envelope: DEK cifrada por KEK)HMAC-SHA-256 fingerprint para búsquedaCRYPTO-ARCHITECTURE.md §4
PAN en tránsitoTLS 1.3 (fallback TLS 1.2 ECDHE-only)mTLS entre servicios CDEReq 4.2.1
CVV en autorizaciónAES-256-GCM en memoria + TTL 15 minPurge automático + audit event§3.2 SAD-01
Cardholder nameAES-256-GCM (mismo envelope)RLS por merchant en pg§3.1 CHD-04
BackupsAES-256-GCM (DO Spaces at-rest)GPG encryption con key en Vault§3.3 INF-02
Logs con PIIMasking automático en @fintrix/loggingEncryption at rest DO Spaces§3.3 INF-01

7. Períodos de retención — justificación

DatoRetenciónJustificación regulatoria/comercial
PAN de suscripción activaVida activa + 30 díasChargeback dispute window Visa/MC = 30 días desde última tx
PAN de suscripción cancelada30 días post-cancelación, luego purge automáticoPost-cancelación no hay razón de negocio; purge cumple Req 3.2.1
CVV/SADMax 15 minPCI DSS 3.3.1 obliga a NO persistir SAD post-autorización
Backup de DB90 díasBalance entre recovery point objective y minimización PCI
Logs de aplicación365 días (90 online + 275 archive)PCI DSS Req 10.5.1 mínimo 1 año
Logs de acceso a keys (Vault audit)3 añosPCI DSS Req 10.5 + best practice para investigaciones forenses
Audit de rotación de clavesVida del sistemaNecesario para demostrar compliance histórico

8. Procedimiento de eliminación segura

Ver documento separado DATA-RETENTION-DELETION-PROCEDURE.md.

Resumen de mecanismos:

DatoMétodo de eliminaciónVerificación
PAN de tarjeta canceladaCron diario sec-purge-canceled-cardsDELETE FROM card_vault.stored_cards WHERE deleted_at < now() - interval '30 days' + VACUUM FULLLog de purge en audit con conteo antes/después
CVV/SADCron cada 60 seg + expiración de lease VaultVault audit log muestra token.revoked events
Backups >90 díasDO Spaces object lifecycle policyVerificable via s3api list-objects + verificación de retention
Logs >365 díasRetention policy en Loki/SpacesVerificable via query rango de fechas
Servidor decomisionadoWipe con shred -uvfz -n 3 + destrucción física del disco + certificate of destructionCertificado archivado en drive legal

9. Evidencia de revisión

RevisiónFechaRevisorCambiosTicket
Baseline2026-07-29Security LeadDocumento inicial completoSEC-018
Próxima obligatoria2027-07-29Security LeadRevisión anual PCI

Triggers de revisión ad-hoc:

  • Nueva clase de dato incorporada al CDE
  • Cambio en el schema de card_vault o tokenization
  • Migración a nuevo cloud provider o región
  • Incidente de seguridad relacionado con datos protegidos
  • Cambio en regulación (PCI DSS versión, GDPR, ley 1581 Colombia)

10. Aprobaciones

RolNombreFirmaFecha
CTO[TO_FILL]
Security Lead[TO_FILL]
DPO / Legal[TO_FILL]

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