Seguridad · Trust Center

Cada firma deja trazabilidad. Cada dato vive en la UE. Cada decisión está documentada.

No vendemos seguridad como adjetivo de marketing. La construimos como ingeniería: audit chain criptográfico, RLS por tenant, hosting en Frankfurt, redacción de PII en logs, derechos RGPD operativos desde la UI.

Pilares · ingeniería de seguridad

Seis decisiones que toman las decisiones, no presentaciones.

Audit chain SHA-256

Cada evento (subida, configuración, firma) genera una fila con hash enlazado al previo. La función SQL `validate_audit_chain` detecta cualquier ruptura.

RLS multi-tenant

Row-Level Security en Postgres con policies sobre `tenantId`. Imposible cross-tenant data leak por aplicación incluso si hay bug en el código.

Hosting 100% UE

Supabase EU (Frankfurt) · Vercel EU regions · Resend con DPF. Datos personales no salen del Espacio Económico Europeo.

Derechos RGPD operativos

Endpoint export-data devuelve JSON estructurado · self-service deletion con grace 30d · admin offboarding con resolución de SRs pendientes.

Logs sin PII

Logger Pino con redacción automática de DNI español, tarjetas, magic tokens en URLs. Logs auditables sin riesgo de exfiltración.

Argon2id + HIBP

Passwords con Argon2id · check contra Have I Been Pwned al alta · lockout tras 5 intentos fallidos · rate limiting en endpoints sensibles.

Audit chain · deep dive

Hash linking tipo blockchain, sin blockchain.

Cada `audit_event` lleva un `eventHash = SHA256(payload + previousHash)`. Si alguien manipula la BD a posteriori (incluido el admin del tenant via panel Supabase), la cadena se rompe.

  • Triggers append-only en Postgres: UPDATE/DELETE rejected por reglas
  • Función `validate_audit_chain(tenantId)` ejecutable por tenant
  • Eventos cubiertos: upload · configure · dispatch · sign · complete
  • EvidencePacketGenerator embebe el chain summary + hashes
  • Detector `DOCUMENT_TAMPERED` si SHA-256 del PDF original cambia
-- supabase/migrations/init.sql
CREATE FUNCTION
validate_audit_chain(tenant_id text)
RETURNS int AS $$
DECLARE
mismatches int := 0;
BEGIN
WITH ordered AS (
SELECT id, event_hash,
previous_hash,
row_number() OVER...
)
SELECT COUNT(*) INTO mismatches
FROM ordered o
JOIN ordered prev ON...
WHERE o.previous_hash !=
prev.event_hash;
RETURN mismatches;
END;
$$ LANGUAGE plpgsql;
validate_audit_chain('tenant-x') = 0
Protección de datos

Cifrado, masking, minimización por diseño.

  • Cifrado en reposo

    Supabase encrypta a nivel de disco con AES-256. Buckets `documents`, `signatures`, `branding` privados con signed URLs TTL corta (60s preview, 7d email).

  • Cifrado en tránsito

    TLS 1.3 obligatorio. HSTS preload con max-age 1 año. Mozilla Observatory grade A+.

  • DNI masking en evidence

    Por defecto el Certificate of Completion enmascara DNI a `***1234X`. Tenant puede activar visibilidad completa con audit del cambio.

  • Logs anonimizados

    Pino con redacción de paths sensibles (auth, password, token, magicToken) + regex matchers para DNI/tarjetas/tokens en URLs.

  • PII removal en deletion

    Anonimización inmediata + grace 30d + cron purga de blobs y datos blandos. Audit chain preservada (anonimizada, no destruida).

RGPD operativo

Derechos ARCO-POL en un click.

  • Acceso (Art. 15)

    `GET /api/users/me/export-data` devuelve JSON estructurado con metadata RGPD. Throttle 3/h por user.

  • Rectificación (Art. 16)

    `PATCH /api/users/me` permite editar nombre, email, DNI, foto. Cada cambio audita `USER_PROFILE_UPDATED`.

  • Supresión (Art. 17)

    `POST /api/users/me/request-deletion` self-service · grace 30d · cron purga · admin offboarding con resolución de SRs PENDING.

  • Oposición (Art. 21)

    Toggle `notifyOnSignature` opt-in en `/settings/profile` · admin puede deshabilitar tracking analítico futuro.

  • Consent capture

    Empleados internos: consent una vez en onboarding. Externos: por documento. Audit `USER_CONSENT_ACCEPTED` + `SIGNER_CONSENT_RECORDED` con hash + version.

  • DPA disponible

    Template ES con cláusulas Art. 28 RGPD. Subprocessors documentados. Brecha: notificación 72h via runbook.

Cumplimiento

Marcos legales que cumplimos y los que están en camino.

eIDAS
Reglamento UE 910/2014

Firma electrónica simple (SES) en plenitud Art. 26. Activable AES y QES en Custom.

RGPD
Reglamento UE 2016/679

Minimización, finalidad limitada, derechos operativos, base legal documentada.

LOPDGDD
Ley Orgánica 3/2018

Aplicación en territorio español. DNI masking por defecto. DPO accesible.

LSSI-CE
Ley 34/2002

Cookies estrictamente necesarias (Art. 22.2 exención). Comercio electrónico legal.

ISO 27001
En roadmap

Política de seguridad documentada. Audit por tercera parte planificado para Q4 2026.

SOC 2
Bajo demanda

Type II disponible para clientes Custom enterprise. Subprocessors con SOC 2 verificable.

Subprocesadores

Quién más toca tus datos, dónde y por qué.

Lista completa actualizada. Cualquier nuevo subprocesador requiere actualización del DPA y aviso al tenant con 30 días de antelación.

SubprocesadorRolRegiónDPA
SupabaseBase de datos · Storage · AuthEU - Frankfurt
VercelHosting frontendEU regionsSí · DPF
ResendEmail transaccionalUS-DPF certifiedSí · DPF
CloudflareCDN · WAFGlobal · EU edge
Better StackLogs · uptimeEU
Verify · público

Cualquier tercero puede comprobar que el PDF no fue manipulado.

Endpoint público sin autenticación. Arrastras el PDF firmado, calculamos su SHA-256 cliente-side via Web Crypto, comparamos con el hash registrado. Coincide → auténtico. No coincide → modificado.

  • SHA-256 calculado en el navegador · contenido nunca sube al server
  • Throttle 30 req/min/IP contra brute-force
  • Devuelve metadata mínima: tenantName, completedAt, signersCount
  • QR del Certificate of Completion lleva al endpoint directamente
Probar verify
estipula.app/verify
Arrastra el PDF firmado aquí
SHA-256 cliente-side
Documento auténtico · firmado el 28/04/2026
Documentación legal

Todo lo importante por escrito.

Privacy PolicyTerms of ServiceCookie PolicyInformación legal
¿Necesitas DPA, ROPA, lista de subprocesadores, o tienes preguntas sobre cumplimiento? Escríbenos a hola@estipula.es y te respondemos con la documentación firmada en 24h.
Empieza hoy

Crea una cuenta gratis
y firma tu primer documento en cinco minutos.

Probar gratis 30 días Agendar demo de 15 min