# Trust Labels (etiquetas de confianza)

*Dos etiquetas pequeñas más la contaminación de sesión hacen cumplir la Rule of Two.*

> **Las Trust Labels** son dos conjuntos de etiquetas muy pequeños asociados a los datos, **origen** (`owner`, `agent`, `external`) y **sensibilidad** (`public`, `private`, `secret`), más la **contaminación de sesión**. El NAS hace cumplir la Rule of Two como un invariante de sesión: una sesión no puede tener a la vez [A] ha leído contenido externo, [B] toca datos sensibles y [C] cambia un estado protegido o se comunica hacia el exterior. Completar la tercera exige una [Human Gate](https://agentnas.com/es/concepts/human-gate/).

**AN-06** · Nivel de conformidad: L3 Guard · Grupo: Autoridad

## El problema

La inyección de prompts funciona porque un modelo no distingue las “instrucciones” de los “datos”. Las defensas en la capa del modelo (clasificadores, endurecimiento del prompt) tienen fugas, y los atacantes pueden adaptarse. A finales de octubre de 2025, Meta propuso la [Agents Rule of Two](https://ai.meta.com/blog/practical-ai-agent-security/): hasta que la inyección esté resuelta de forma fiable, una sesión debería tener como máximo dos de tres propiedades.

El enfoque más fiable es acotar las consecuencias **fuera** del modelo. El almacenamiento es justo por donde pasan todas las lecturas y escrituras, así que es un lugar natural para convertir esta regla en un invariante comprobable.

## Cómo funciona

- **Etiquetas.** Tres orígenes, tres sensibilidades y una marca `reviewed` (la fija la aprobación de una compuerta). Los puntos de importación (páginas web, correo, subidas) son `external` por defecto; cuando un escáner de secretos encuentra credenciales, las etiqueta como `secret` automáticamente.
- **Contaminación de sesión.** El resumen de todo lo que ha leído una ejecución (a partir del manifiesto de lectura); dentro de una sesión solo crece, y una sesión nueva empieza limpia.
- **El invariante.** A = la sesión ha leído `external`; B = la concesión puede leer `private` o superior (umbral configurable); C = la concesión puede proponer una fusión en un árbol protegido, compartir, borrar o enviar datos al exterior. Cuando las tres se cumplen en una misma sesión, la llamada que activa C se deniega o se envía a una compuerta.
- **En la práctica:** con una concesión que tiene tanto B como C, una vez que una sesión ha leído contenido externo, toda acción posterior de tipo C necesita a una persona. Para evitar esa fricción, haz el trabajo de “leer contenido externo” en una sesión aparte sin B y pasa los resultados solo mediante un traspaso estructurado.
- **Propagación.** Las derivaciones que hace el propio NAS (índices, resúmenes) heredan de forma determinista la unión de las etiquetas de sus entradas; los archivos que escribe una ejecución heredan la contaminación de sesión de la ejecución (la opción conservadora).
- **Desclasificación.** Solo mediante una Human Gate, o un **traspaso estructurado:** la salida de la sesión contaminada se restringe a campos validados por un JSON Schema (enumeraciones, ID, cadenas acotadas), y solo después de validar puede leerla una sesión con privilegios. Solo se puede confiar en lo que se puede validar de forma determinista.
- **La aplicación se hace en la pasarela y en el montaje** (que conocen la concesión y la sesión), no dentro del modelo.

## Empezar en pequeño

- Haz solo dos cosas: etiqueta como `external` los archivos del directorio de importación y, por defecto, no des a una ejecución que haya leído `external` ni salida de datos ni fusión protegida sin una compuerta.
- Escribe la política como reglas deterministas en Cedar o Rego, y da motivos legibles al denegar.
- Ejecuta en modo “solo registrar” durante una semana para ver qué bloquearía por error y luego activa la aplicación.

## Esbozo de la interfaz

Solo ilustrativo. Los nombres de los campos pueden cambiar antes de la especificación v0.3.

*policy.yaml*

```yaml
# Deterministic policy (Cedar- or Rego-style rules can express the same thing)
session_invariant: rule_of_two
properties:
  A: session.read_origin includes "external"
  B: lease.sensitivity_max >= "private"
  C: lease allows propose_protected | share | delete | egress
on_would_complete_ABC: gate        # never "allow"
rules:
  - id: r-merge-1
    when: session.A and op == "merge" and target.protected
    then: gate
  - id: r-secret-1
    when: session.read_sensitivity == "secret" and op == "egress"
    then: deny
```

## Lo que pide la especificación

- Todo punto de importación DEBE asignar una etiqueta por defecto; el contenido externo DEBE etiquetarse como `external`.
- La contaminación de sesión DEBE crecer únicamente dentro de una sesión.
- La evaluación de políticas DEBE ser determinista y NO DEBE llamar a un LLM.
- Una llamada que permitiría a una sesión completar A+B+C DEBE denegarse o enviarse a una compuerta.
- La desclasificación DEBE pasar por una compuerta o por un traspaso estructurado validado por esquema.
- Los datos derivados DEBEN heredar la unión de las etiquetas de sus entradas.

## Lo prestado y lo nuevo

Lo que sigue es todo pensamiento establecido. **Lo nuevo:** implementar la contaminación de sesión en la **frontera del almacenamiento** con el manifiesto de lectura, y aplicar las etiquetas a las escrituras de memoria y a los datos derivados. Mantenemos deliberadamente el retículo de etiquetas en 3×3 porque los retículos de grano fino llevan en la práctica a una explosión de etiquetas. OpenClaw ya hace etiquetas de origen y aislamiento dentro de un solo runtime; nuestra diferencia es solo ponerlo en el almacenamiento compartido.

- [Agents Rule of Two (Meta)](https://ai.meta.com/blog/practical-ai-agent-security/)
- [The lethal trifecta](https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/)
- [CaMeL](https://arxiv.org/abs/2503.18813)
- [Fides](https://arxiv.org/abs/2505.23643)
- [Design Patterns for Securing LLM Agents against Prompt Injections](https://arxiv.org/abs/2506.08837)
- [OpenClaw memory architecture](https://docs.openclaw.ai/concepts/memory-architecture)

## Límites honestos

- Esto **no** es una defensa contra la inyección de prompts; limita las consecuencias.
- El NAS no puede ver las herramientas que están fuera de él (un navegador, el correo), así que necesita la cooperación del runtime.
- La contaminación es conservadora y trae fricción y falsos positivos; el texto libre fuera de los esquemas estructurados aún puede llevar palabras de un atacante.
- Los canales encubiertos no se pueden eliminar.

## Preguntas abiertas

- ¿Debe ser la granularidad de una etiqueta el archivo o el párrafo?
- ¿Cómo se gobierna el vocabulario de etiquetas entre inquilinos?
- ¿Cómo se pueden reducir los falsos positivos?

## Preguntas

### ¿La Rule of Two detiene la inyección de prompts?

No impide que ocurra una inyección. Hace que una sesión inyectada **no pueda tener las tres** cosas: “ha leído contenido no fiable, toca datos sensibles, puede cambiar un estado protegido o enviar datos al exterior”, lo que acota las consecuencias. La propia Meta subraya que es una heurística de reducción de riesgo que no sustituye al mínimo privilegio.

### ¿Por qué solo tres orígenes y tres sensibilidades?

Porque los retículos de etiquetas de grano fino tienden a hincharse y a desactivarse en la práctica. 3×3 basta para decir “quién lo escribió y cuán sensible es” y hace fácil entender el motivo de un rechazo. Las particiones más finas se pueden hacer con rutas y concesiones.

### ¿La contaminación de sesión dejará al agente sin poder hacer nada?

Solo restringe tres tipos de acción: cambiar un árbol protegido, compartir o borrar, y enviar datos al exterior. Las lecturas y escrituras dentro de una rama no se ven afectadas. Para evitar la fricción, pon el trabajo de leer contenido externo en una sesión sin datos sensibles y devuelve solo resultados validados contra un esquema.

## Conceptos relacionados

- [Human Gate (compuerta humana)](https://agentnas.com/es/concepts/human-gate/): Aparece solo antes de acciones irreversibles, hacia el exterior o que elevan privilegios, y muestra el diff real.
- [Agent Memory (memoria del agente)](https://agentnas.com/es/concepts/agent-memory/): Las notas que puedes leer y editar son la verdad. Los índices son una caché que puedes tirar.
- [Capability Lease (concesión de capacidad)](https://agentnas.com/es/concepts/capability-lease/): Una autorización estrecha para una ejecución, con caducidad y presupuestos. Las concesiones hijas solo pueden ser más estrechas.

---

URL canónica: https://agentnas.com/es/concepts/trust-labels/
Actualizado: 2026-11-11 · Borrador de especificación v0.2 · CC BY 4.0
