
Secret-Use Delegation Protocol — エージェントシステムのためのプロトコルレベルのシークレット利用
エージェント型システムのためのプロトコルレベルのシークレット利用。
arXiv:2604.24920 のリファレンス実装 — 本論文の引用を参照。
sudp は、自律的な Requester (R) がシークレットに裏付けられた操作を提案し、Authorizer (A) がまさにその操作を承認し、Custodian (T) がそれを実行することを可能にします。委任の単位はシークレットではなく、1 回の use です。
┌─────────────────────────┐
│ Authorizer A │
│ (passkey on a device) │
└────────────┬────────────┘
│ signs β over (DS ‖ r ‖ H(o))
▼
┌──────────────┐ ┌───────────────┐ ┌──────────────┐
│ Requester R │ ─o─▶ │ Custodian T │ ─s─▶ │ Environment │
│ (agent) │ │ │ │ E │
│ │◀ρ────│ holds sealed Σ│ │ │
└──────────────┘ └───────────────┘ └──────────────┘
R は s を決して見ることができず、s に対する再利用可能な権限を一切得ることはありません — たとえ R が完全に侵害されていたとしても(プロンプトインジェクション、ランタイムシムなど)。
@misc{yu2026sudp,
title = {SUDP: Secret-Use Delegation Protocol for Agentic Systems},
author = {Xiaohang Yu and Hejia Geng and Xinmeng Zeng and William Knottenbelt},
year = {2026},
eprint = {2604.24920},
archivePrefix = {arXiv},
primaryClass = {cs.CR},
url = {https://arxiv.org/abs/2604.24920}
}
Xiaohang Yu、Hejia Geng、Xinmeng Zeng、William Knottenbelt 著 「SUDP: Secret-Use Delegation Protocol for Agentic Systems」 arXiv preprint arXiv:2604.24920 (2026)。
| 役割 | ソース | 公開名 |
|---|---|---|
| Custodian (T) | custodian/rust | crates.io の sudp |
| Authorizer (A) | authorizer/ts | npm の @sudp-protocol/authorizer |
| Requester (R) | requester/ts | npm の @sudp-protocol/requester |
前提条件: Rust 1.85+ (rustup 経由) および Node.js 20+。
git clone https://github.com/xhyumiracle/sudp
cd sudp/examples/protocol-demo
./run.sh
3つのパッケージをすべてビルドし、Custodianを起動し、NodeスクリプトでR + Aを実行し、すべてのワイヤー上のやり取りをロール別に色分けして出力し、最後に敵対的チェック(Aが署名した後にRがoを改ざん → Tが拒否)で終了します。
APIレベルの使用方法については、custodian/rust ·
authorizer/ts · requester/ts を参照してください。
エージェントの作者は通常、@sudp-protocol/requester のみを必要とします — 型付きのOperationビルダーと形状バリデータのみで、トランスポートもフレームワークアダプターも不要です。Requesterは最も置き換え可能なレイヤーであり、各エージェントフレームワークが独自のグルーコードを接続します。
適合性ベクターは、Authorizerのバイト列をCustodianに対してバイトレベルで固定します — 複合的な形状は構造上整合したまま保たれます。
| サーフェス | Rustアンカー | TSアンカー |
|---|---|---|
canonical(o) | Operation::canonical_bytes ユニットテスト | conformance.test.ts: canonical: nested ordering |
β + DS_BIND | beta_matches_ts_authorizer_conformance_vector | conformance.test.ts: β: matches Rust... |
バッチ β (H(canonical(ops))) | batch_beta_matches_ts_authorizer_conformance_vector | conformance.test.ts: batch β: matches Rust... |
derive_wrapping_key | derive_wrapping_key_matches_ts_authorizer_conformance_vector | conformance.test.ts: deriveWrappingKey: matches Rust... |
| AEAD暗号化(固定nonce) | aead_matches_ts_authorizer_conformance_vector | conformance.test.ts: aeadEncrypt: matches Rust... |
wrap_adレイアウト | WrapBinding::to_canonical_ad テスト | conformance.test.ts: wrap_ad: DS_WRAP ‖ cid ‖ ver_be |
seal_adレイアウト | phases::setup::seal_ad(セットアップテスト) | conformance.test.ts: seal_ad: DS_SEAL ‖ ver_be |
レコード単位のシール(record_aad / K_aead / シール済みフレーミング) | state::record::tests::conformance_* | conformance.test.ts: per-record conformance vectors |
WRAP_VERSION ↔ CURRENT_VERSION | state::CURRENT_VERSION = 1 | conformance.test.ts: WRAP_VERSION matches Rust... |
CIはプッシュのたびに両方の半分を実行します:
cd custodian/rust && cargo test
cd authorizer/ts && npm test
cd requester/ts && npm test
ワイヤーフォーマットとトレイトの形状は、1.0 より前にまだ変更される可能性があります。本番環境ではマイナーバージョンを固定してください:
# Cargo.toml
sudp = "~0.1"
// package.json
"@sudp-protocol/authorizer": "~0.1.0",
"@sudp-protocol/requester": "~0.1.0"
SECURITY.md を参照してください。
Apache-2.0。LICENSE を参照してください。