# Trust Labels (信任標籤)

*來源與敏感度兩個小標籤，加上工作階段污點，強制執行 Rule of Two。*

> **Trust Labels（信任標籤）** 是附在資料上的兩個很小的標籤集，**來源**（`owner`、`agent`、`external`）與**敏感度**（`public`、`private`、`secret`），再加上**工作階段污點**。NAS 把 Rule of Two 當作工作階段不變數來強制：一次工作階段不能同時擁有 [A] 讀過外部內容、[B] 接觸敏感資料、[C] 改變受保護狀態或對外通訊；要補全第三項，就走 [Human Gate](https://agentnas.com/zh-tw/concepts/human-gate/)。

**AN-06** · 符合性等級: L3 Guard · 概念組: 權限

## 要解決的問題

提示詞注入之所以奏效，是因為模型分不清「指令」和「資料」。模型層的防禦（分類器、提示加固）會漏，攻擊者還可以自適應。Meta 在 2025 年 10 月底提出 [Agents Rule of Two](https://ai.meta.com/blog/practical-ai-agent-security/)：在注入問題被可靠解決之前，一次工作階段最多隻應同時具備三個性質中的兩個。

更可靠的做法是在模型**之外**限定後果。儲存恰好是「讀」和「寫」的必經之地，所以適合把這條規則變成可以測試的不變數。

## 工作方式

- **標籤。** 來源 3 檔、敏感度 3 檔，外加 `reviewed` 標記（由閘門批准設定）。匯入點（網頁、郵件、上傳）預設標為 `external`；金鑰掃描器發現憑據時，自動標為 `secret`。
- **工作階段污點。** 一次執行讀過的一切的彙總（來自讀清單）；在一個工作階段內只增不減，新工作階段重置。
- **不變數。** A = 工作階段讀過 `external`；B = 租約允許讀 `private` 或以上（閾值可配置）；C = 租約允許向受保護樹提議合併、共享、刪除或出口。三者在同一工作階段裡同時成立時，觸發 C 的那次呼叫被拒絕或轉交閘門。
- **實際效果：** 在同時具備 B 和 C 的租約下，工作階段一旦讀過外部內容，之後的 C 類動作都要經過人。想避免這種摩擦，就把「讀外部內容」放到另一個沒有 B 的工作階段裡，只透過結構化交接傳遞結果。
- **傳播。** NAS 自己的派生（索引、摘要）確定性地繼承輸入標籤的並集；執行寫入的檔案繼承該執行的工作階段污點（保守做法）。
- **降級。** 只能經由 Human Gate，或**結構化交接：** 把受污染工作階段的輸出限定為經 JSON Schema 校驗的欄位（列舉、ID、有界字串），校驗通過後才允許被特權工作階段讀取。能被確定性校驗的，才可能被信任。
- **強制點在閘道器與掛載層**（它們知道租約與工作階段），不在模型內部。

## 從小處開始

- 只做兩件事：給匯入目錄裡的檔案打上 `external`；讀過 `external` 的執行預設沒有出口和受保護合併的權限，需要閘門。
- 策略用 Cedar 或 Rego 寫成確定性的規則，拒絕時給出可讀的原因。
- 先用「僅記錄」模式跑一週，看看會誤攔什麼，再開啟強制。

## 介面草圖

僅作示意。欄位名在規範 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
```

## 規範的要求

- 每個匯入點**必須**賦予預設標籤；外部內容**必須**標為 `external`。
- 工作階段污點**必須**在工作階段內只增不減。
- 策略求值**必須**是確定的，**不得**呼叫 LLM。
- 會讓同一工作階段補全 A+B+C 的呼叫**必須**被拒絕或轉交閘門。
- 降級**必須**經過閘門或經模式校驗的結構化交接。
- 派生資料**必須**繼承其輸入標籤的並集。

## 借鑑與區別

下面這些都是現成的思路。**真正新的部分：** 在**儲存邊界**用讀清單實作工作階段污點，並把標籤用到記憶寫入和派生資料上。我們刻意把標籤格縮小到 3×3，因為細粒度的格在實踐中會導致標籤膨脹。OpenClaw 已經在單個執行環境裡做了來源標籤與隔離，我們的區別只是把它放到共享的儲存中。

- [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)

## 坦誠的侷限

- 這**不是**提示詞注入的防禦，它限制的是後果。
- NAS 看不到它之外的工具（瀏覽器、郵件），需要執行環境配合。
- 污點是保守的，會帶來摩擦與誤報；結構化模式之外的自由文本仍然可以攜帶攻擊者的話。
- 隱蔽通道無法消除。

## 開放問題

- 標籤的粒度應當是檔案還是段落？
- 多租戶下標籤詞彙表如何治理？
- 如何降低誤報？

## 常見問題

### Rule of Two 能防住提示詞注入嗎？

不能阻止注入發生。它讓一次被注入的工作階段**無法同時**擁有「讀過不可信內容、接觸敏感資料、能改變受保護狀態或對外傳送」三項，從而限制後果。Meta 自己也強調它是減輕風險的啟發式，不替代最小權限。

### 為什麼只有三個來源和三個敏感度？

因為細粒度的標籤格在實踐中會膨脹、會被關掉。3×3 足夠表達「誰寫的、有多敏感」，也容易讓人理解拒絕的原因。更細的分割槽可以靠路徑與租約來做。

### 工作階段污點會不會讓智能體什麼都幹不了？

只會限制三類動作：改動受保護樹、共享或刪除、對外傳送。分支內的讀寫不受影響。需要避開摩擦時，可以把讀外部內容的工作放進一個沒有敏感資料的工作階段，只傳回經模式校驗的結果。

## 相關概念

- [Human Gate (人類閘門)](https://agentnas.com/zh-tw/concepts/human-gate/): 只在不可逆、對外或提權的動作之前出現，展示真實的差異。
- [Agent Memory (智能體記憶)](https://agentnas.com/zh-tw/concepts/agent-memory/): 筆記是你能讀能改的真相，索引只是可以丟棄的快取。
- [Capability Lease (能力租約)](https://agentnas.com/zh-tw/concepts/capability-lease/): 發給一次執行的、有期限與預算的窄域授權；子租約只能更窄。

---

標準網址: https://agentnas.com/zh-tw/concepts/trust-labels/
更新於: 2026-11-11 · 規範草案 v0.2 · CC BY 4.0
