> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trybrein.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Seguridad

> Cómo Driftless maneja el cifrado, las API keys, OAuth y la protección de datos.

## Cifrado

Todos los secretos almacenados en Driftless se cifran con **AES-256-GCM** antes de llegar a la base de datos. Esto incluye:

* API keys
* Secretos de webhooks
* Tokens OAuth y códigos de autorización

La clave de cifrado se deriva de variables de entorno y nunca se almacena en la base de datos.

<Warning>
  Nunca almacenes secretos en texto plano en Driftless. La capa de cifrado es obligatoria y se aplica de forma transparente.
</Warning>

## API keys

Las API keys son el mecanismo de autenticación principal para la CLI y CI.

* Las keys se generan con un prefijo `drift_` para identificarlas fácilmente
* La key en crudo se muestra **solo una vez**, al momento de crearla
* Las keys se almacenan como hashes con salt; el valor en crudo no se puede recuperar
* Las keys se pueden revocar en cualquier momento desde el dashboard
* Se admiten múltiples keys por workspace
* Una key deja de funcionar cuando su creador es removido de ese workspace

Crea keys desde el dashboard en **Settings > API Keys** o mediante la CLI:

```bash theme={"theme":"github-light"}
driftless login
```

## OAuth y MCP

Driftless admite autorización OAuth 2.0 para aplicaciones cliente de MCP (Model Context Protocol) como ChatGPT y Claude. OAuth permite que clientes de IA de terceros accedan al contexto de tu workspace con el consentimiento explícito del usuario.

### Scopes de OAuth

| Scope           | Descripción                                |
| --------------- | ------------------------------------------ |
| `context:read`  | Lee topics y contexto                      |
| `topics:create` | Crea nuevos topics                         |
| `topics:write`  | Actualiza topics existentes                |
| `context:diff`  | Lee el diff de topics para cambios locales |

### Flujo de OAuth

1. El cliente MCP redirige al usuario a `/api/v1/oauth/authorize` en la API de Driftless
2. El usuario da su consentimiento en el dashboard en `/oauth/authorize`
3. La API emite un código de autorización (con soporte PKCE)
4. El cliente intercambia el código por un token de acceso en `/api/v1/oauth/token`
5. El cliente usa el token bearer para llamar a las herramientas MCP

### Seguridad de los tokens

* Los códigos de autorización, tokens de acceso y tokens de refresco se almacenan solo como hashes, nunca en texto plano
* Los tokens nunca se registran ni se devuelven después de la emisión inicial
* El servidor MCP (`apps/mcp`) es un adaptador de protocolo que llama a la API REST existente de Driftless. Nunca accede a Postgres ni a librerías internas directamente.

## Manejo de datos

| Dato                | Almacenamiento      | Cifrado              |
| ------------------- | ------------------- | -------------------- |
| Contenido de topics | Postgres            | En reposo (Supabase) |
| API keys            | Postgres (hasheado) | Hasheado + cifrado   |
| Tokens OAuth        | Postgres (hasheado) | Hasheado + cifrado   |
| Código fuente       | Nunca se almacena   | N/A                  |

Driftless **nunca almacena** tu código fuente. Los Topics conservan solo los paths y patrones glob explícitos que registra tu equipo.

## Red

* Todo el tráfico entre la CLI, el dashboard y la API es HTTPS
* Las API keys se envían en cabeceras `x-api-key`, nunca en parámetros de URL
* Las cargas firmadas de webhooks de proveedores se verifican antes de procesarse
* La API corre en Render con variables de entorno cifradas

## Protección contra extracción masiva

Todo lo que una persona autorizada puede ver en un navegador puede copiarse.
Por eso Driftless protege el límite que sí puede hacerse cumplir, en vez de
afirmar que los endpoints del navegador son secretos:

* las consultas de inteligencia se limitan por persona verificada y workspace,
  en conjunto entre todos los endpoints y sin multiplicarse al cambiar de IP;
* las entregas exitosas tienen además un techo horario compartido en la base de
  datos, que sobrevive despliegues y múltiples instancias;
* el plan y los tamaños de página definidos por el servidor limitan lo entregado;
* los enlaces de registros y cursores son referencias opacas autenticadas, y
  los identificadores internos no se exponen;
* las respuestas autenticadas no se almacenan en caché y el dashboard no
  conserva sus cuerpos en el almacenamiento del navegador.

## Reportes

Si descubres un problema de seguridad, por favor repórtalo a [security@driftless.icu](mailto:security@driftless.icu). No abras un issue público.
