AN-06 L3 準拠レベル: Guard グループ: 権限

Trust Labels トラスト・ラベル

2 つの小さなラベルとセッション汚染で、Rule of Two を実現します。

定義

Trust Labels は、データに付ける 2 つのごく小さなラベル集合、出どころ(owner、agent、external)と 機微度(public、private、secret)、そして セッション汚染 です。NAS は、Rule of Two をセッションの不変条件として強制します。1 つのセッションが、[A] 外部コンテンツを読んだ、[B] 機微なデータに触れる、[C] 保護された状態を変更する、または外部へ通信する、の 3 つをすべて持つことはできません。3 つ目を満たすには Human Gate が必要です。

v0.2 仕様ドラフト 更新日

解決する課題

プロンプトインジェクションが成り立つのは、モデルが「指示」と「データ」を区別できないからです。モデル層の防御(分類器、プロンプトの強化)は漏れがあり、攻撃者は適応します。2025 年 10 月の終わりに、Meta は Agents Rule of Two を提案しました。インジェクションが確実に解決されるまで、1 つのセッションが持つ性質は、3 つのうち多くても 2 つにとどめるべきだ、というものです。

より信頼できるのは、被害をモデルの 外側 で限定する方法です。ストレージは、すべての読み書きが通る場所であり、このルールを検証可能な不変条件にするのに、自然な場所です。

仕組み

  • ラベル。 3 つの出どころ、3 つの機微度、そして reviewed フラグ(ゲートの承認で立ちます)。取り込み口(ウェブページ、メール、アップロード)は既定で external になります。シークレットスキャナーが認証情報を見つけたときは、自動で secret とラベルづけします。
  • セッション汚染。 実行が読んだすべてのもの(読み取りマニフェストから)の要約です。セッションの中では増える一方で、新しいセッションはきれいな状態から始まります。
  • 不変条件。 A = セッションが external を読んだ。B = リースが private 以上を読める(しきい値は設定可能)。C = リースが、保護ツリーへのマージの提案、共有、削除、データの送出を行える。1 つのセッションでこの 3 つがそろったとき、C を起動する呼び出しは拒否されるか、ゲートに回されます。
  • 実際には: B と C の両方を持つリースの下では、セッションが外部コンテンツを一度読むと、それ以降の C 型の操作にはすべて人間が必要になります。この摩擦を避けるには、「外部コンテンツを読む」作業を B のない別のセッションで行い、結果は構造化されたハンドオフだけで渡します。
  • 伝播。 NAS 自身が行う導出(インデックス、要約)は、入力ラベルの和集合を決定的に引き継ぎます。実行が書くファイルは、その実行のセッション汚染を引き継ぎます(保守的な選択です)。
  • 格下げ(declassification)。 Human Gate を通すか、構造化されたハンドオフ によります。汚染されたセッションの出力を、JSON Schema で検証されたフィールド(列挙値、ID、長さに上限のある文字列)に限定し、検証後にはじめて特権セッションが読めるようにします。信頼できるのは、決定的に検証できるものだけです。
  • 強制はゲートウェイとマウントで行います(リースとセッションを知っている場所です)。モデルの中ではありません。

小さく始める

  • やることは 2 つだけです。取り込みディレクトリのファイルに external とラベルをつけること、そして external を読んだ実行には、既定で、ゲートなしの外向きの送出と保護されたマージを認めないことです。
  • ポリシーは Cedar か Rego の決定的なルールで書き、拒否するときは読める理由を返します。
  • まず 1 週間「ログのみ」で動かし、誤って何をブロックしそうかを確認してから、強制を有効にします。

インターフェースのスケッチ

説明用の例です。フィールド名は仕様 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 はすでに、1 つのランタイムの内側で出どころのラベルと隔離を行っています。私たちとの違いは、これを共有ストレージに置くことだけです。

正直な限界

  • これはプロンプトインジェクションへの防御では ありません。被害を限定するものです。
  • NAS は、自分の外にあるツール(ブラウザ、メール)を見られないため、ランタイムの協力が必要です。
  • 汚染は保守的なので、摩擦と誤検知を生みます。構造化スキーマの外にある自由記述のテキストは、攻撃者の言葉を運びうるままです。
  • 隠れチャネルはなくせません。

未解決の問い

  • ラベルの粒度は、ファイルか、段落か。
  • テナントをまたいで、ラベルの語彙をどう統治するか。
  • 誤検知をどう減らすか。

よくある質問

Rule of Two で、プロンプトインジェクションは止まりますか?

インジェクションが起きること自体は止めません。インジェクションされたセッションが、「信頼できない内容を読んだ」「機微なデータに触れる」「保護された状態を変えられる、またはデータを送出できる」の 3 つすべてを持てない ようにして、被害を限定します。Meta 自身も、これはリスクを減らす経験則であって、最小権限の代わりにはならないと強調しています。

なぜ、出どころが 3 つ、機微度が 3 つだけなのですか?

細かいラベルの格子は膨らみやすく、実際には切られてしまうからです。3×3 あれば「誰が書いたか、どのくらい機微か」を言うのに十分で、拒否の理由も理解しやすくなります。それ以上の細かい区分は、パスとリースでできます。

セッション汚染のせいで、エージェントは何もできなくなりませんか?

制限するのは、保護ツリーの変更、共有または削除、データの送出という 3 種類の操作だけです。ブランチの中での読み書きには影響しません。摩擦を避けるには、外部コンテンツを読む作業を、機微なデータのないセッションで行い、スキーマで検証した結果だけを戻します。

このページを引用する

読者・検索エンジン・エージェントのための恒久的な URL と、推奨する引用形式です。

推奨する引用形式
Agent NAS project. “Trust Labels (トラスト・ラベル).” agentnas.com, 2026-11-11. https://agentnas.com/ja/concepts/trust-labels/