AN-06 L3 符合性等级: Guard 概念簇: 权限

Trust Labels 信任标签

来源与敏感度两个小标签,加上会话污点,强制执行 Rule of Two。

定义

Trust Labels(信任标签) 是附在数据上的两个很小的标签集,来源(owner、agent、external)与敏感度(public、private、secret),再加上会话污点。NAS 把 Rule of Two 当作会话不变量来强制:一次会话不能同时拥有 [A] 读过外部内容、[B] 接触敏感数据、[C] 改变受保护状态或对外通信;要补全第三项,就走 Human Gate。

v0.2 规范草案 更新于

要解决的问题

提示词注入之所以奏效,是因为模型分不清“指令”和“数据”。模型层的防御(分类器、提示加固)会漏,攻击者还可以自适应。Meta 在 2025 年 10 月底提出 Agents Rule of Two:在注入问题被可靠解决之前,一次会话最多只应同时具备三个性质中的两个。

更可靠的做法是在模型之外限定后果。存储恰好是“读”和“写”的必经之地,所以适合把这条规则变成可以测试的不变量。

工作方式

  • 标签。 来源 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
# 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 已经在单个运行时里做了来源标签与隔离,我们的区别只是把它放到共享的存储中。

坦诚的局限

  • 这不是提示词注入的防御,它限制的是后果。
  • NAS 看不到它之外的工具(浏览器、邮件),需要运行时配合。
  • 污点是保守的,会带来摩擦与误报;结构化模式之外的自由文本仍然可以携带攻击者的话。
  • 隐蔽信道无法消除。

开放问题

  • 标签的粒度应当是文件还是段落?
  • 多租户下标签词汇表如何治理?
  • 如何降低误报?

常见问题

Rule of Two 能防住提示词注入吗?

不能阻止注入发生。它让一次被注入的会话无法同时拥有“读过不可信内容、接触敏感数据、能改变受保护状态或对外发送”三项,从而限制后果。Meta 自己也强调它是减轻风险的启发式,不替代最小权限。

为什么只有三个来源和三个敏感度?

因为细粒度的标签格在实践中会膨胀、会被关掉。3×3 足够表达“谁写的、有多敏感”,也容易让人理解拒绝的原因。更细的分区可以靠路径与租约来做。

会话污点会不会让智能体什么都干不了?

只会限制三类动作:改动受保护树、共享或删除、对外发送。分支内的读写不受影响。需要避开摩擦时,可以把读外部内容的工作放进一个没有敏感数据的会话,只传回经模式校验的结果。

引用本页

为读者、搜索引擎和智能体提供稳定的网址与建议的引用格式。

建议引用格式
Agent NAS project. “Trust Labels (信任标签).” agentnas.com, 2026-11-11. https://agentnas.com/zh-cn/concepts/trust-labels/