Segurança Tokia

Como protegemos seus dados, keys, conversas e saldo BRL. Complementa /privacy e /docs/lgpd.

Reportar vulnerabilidade: security@usetokia.com (forward pra contato@). Veja /.well-known/security.txt pra disclosure policy completa.

Encryption

In transit

  • TLS 1.3 obrigatório em todos endpoints públicos (www/api/chat.usetokia.com)
  • Certs Let's Encrypt renovados automaticamente via Traefik (challenge `mytlschallenge`)
  • HSTS habilitado (browsers forçam HTTPS após primeira visita)

At rest

  • Postgres (schema `tokia`): encrypted disk no host VPS (Hostinger BR)
  • Coolify env vars (secrets API keys, DB URLs): Laravel-encrypted via `APP_KEY` (DR-019)
  • API keys clientes (sk-...): SHA-256 hash em tokia.api_keys.litellm_key_hash. Plaintext NUNCA persiste — após criar, aparece 1x na UI/response e some
  • MongoDB Tokia Chat: API key do user (modal user_provided) encrypted AES-GCM com chave de servidor `CREDS_KEY` (DR-028)
  • Webhooks signing keys: HMAC SHA-256 com secret armazenado em DB encrypted at rest

Access control

  • User-side: JWT Logto via cookie SSR (web) ou Bearer (API). Validação JWKS contra auth.toolpad.cloud (DR-001, DR-005)
  • Admin endpoints: requireAdmin guard — JWT scope tokia:admin OU email allowlist via TOKIA_ADMIN_EMAILS env (Sprint 7)
  • M2M / cron: Logto Management API client_credentials grant + LiteLLM master key pra ops internas
  • IP allowlist por API key: opcional, configurable em /dashboard/keys (Sprint 111). Rate limit 120 req/min default (Sprint 325)

Audit trail

  • Admin actions: todas em tokia.audit_log com email do admin + IP + timestamp (Sprint 60). Visível em /dashboard/admin/audit-log
  • Balance adjustments: tabela dedicada tokia.balance_adjustments com motivo + admin (Sprint 7 DR-025)
  • Crons: cada tick em tokia.cron_runs com status + duration + erro (Sprint 12 Slice E)
  • Pino request log: todas requests apps/api com request_id + user sub (sem PII de body)

Backups

  • Schedule: daily 03h BRT (06h UTC) via cron VPS — script tokia-pg-backup.sh (Sprint 560)
  • Scope: pg_dump schema=tokia (não inclui logto/supabase internals — quem cuida desses é Supabase + Logto self-hosted próprios)
  • Retention: 30 dias rolling, gzip
  • RTO target: 4h (recuperar último backup + replay logs)
  • RPO target: 24h (perde até 1 dia — aceitável V1; migrar pra WAL streaming Q3 2026)
  • Smoke restore: 1x/mês em DB temporário (Sprint 595 cron)

Anti-abuso

  • Hard cap saldo: sem saldo BRL → cron suspende todas API keys do user (Sprint 8). Previne débito explosão se modelo bugar.
  • Rate limit per-API-key: 120 req/min default, override por cliente Enterprise (Sprint 325)
  • Auto top-up cap: max 3 recargas automáticas em 24h. Se 3 falham seguidas, desliga e manda email (Sprint 14)
  • BAN_VIOLATIONS no Tokia Chat: 24h ban após 20 violations (LibreChat default)
  • Cost spike detector:alerta admin se gasto user > 3× média 7d (Sprint 183)

Incident response runbook

Severity levels

  • P0 (critical):serviço inacessível pra >50% dos users (api down, chat down). Alerta sub-1min.
  • P1 (major): funcionalidade chave degradada (1 modelo retornando 500, billing parado). Alerta sub-5min.
  • P2 (minor): bug visível mas workaround disponível. Alerta horário comercial.

Quando alerta dispara

  1. Acknowledge em até 15min (P0) / 1h (P1) / 1d (P2). Posta no /status como "Investigating"
  2. Mitigate: rollback último commit OU restart container OU isolar tráfego problemático
  3. Communicate: update /status a cada 30min (P0) / 2h (P1). Email pros afetados se >50 users
  4. Resolve: marca /status como "Resolved" quando smoke verde
  5. Postmortem (RCA): 1 doc em até 7d com timeline, root cause, action items. Publicado em /status/<incident_id>

Contatos emergência

  • Tech lead: Inael — inael.rodrigues@gmail.com (acionar pra P0 fora do horário)
  • DPO: contato@usetokia.com (acionar se houver vazamento de dados — Art. 48 LGPD: 2 dias úteis ANPD)
  • Status pública: /status + RSS Atom

Sub-processadores (vendor risk)

Cada sub-processador avaliado pelo IT Booster antes de inclusão. /docs/lgpd seção "Sub-processadores" tem lista completa + localização + finalidade.

DPAs (Data Processing Agreements) em processo de formalização:

  • Asaas — SOC2 Type 2 certificado (BR pioneer)
  • OpenRouter — SOC2 + GDPR-compliant
  • Fal.ai — SOC2 Type 1
  • Google AI Studio — SOC2 + ISO 27001

Compliance status

  • LGPD nativo — full compliance (/docs/lgpd)
  • ⏸️ SOC2 Type 2 — em preparação. Target Q4 2026 Type 1, Q2 2027 Type 2
  • ⏸️ ISO 27001 — backlog, considerar se cliente enterprise pedir

Decisão arquitetural completa: DR-031 no repo. Última atualização: 2026-05-20.