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:adminOU email allowlist viaTOKIA_ADMIN_EMAILSenv (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_logcom email do admin + IP + timestamp (Sprint 60). Visível em/dashboard/admin/audit-log - Balance adjustments: tabela dedicada
tokia.balance_adjustmentscom motivo + admin (Sprint 7 DR-025) - Crons: cada tick em
tokia.cron_runscom 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
- Acknowledge em até 15min (P0) / 1h (P1) / 1d (P2). Posta no /status como "Investigating"
- Mitigate: rollback último commit OU restart container OU isolar tráfego problemático
- Communicate: update /status a cada 30min (P0) / 2h (P1). Email pros afetados se >50 users
- Resolve: marca /status como "Resolved" quando smoke verde
- 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.