
Протокол делегирования использования секретов — использование секретов на уровне протокола для агентных систем
Использование секретов на уровне протокола для агентных систем.
Эталонная реализация arXiv:2604.24920 — см. Цитирование этой статьи.
sudp позволяет автономному Requester (R) предложить операцию, подкреплённую секретом, Authorizer (A) авторизовать именно эту операцию, а Custodian (T) выполнить её. Единицей делегирования является одно использование, а не сам секрет.
┌─────────────────────────┐
│ 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 и не получает многоразовых полномочий над ним — даже если R
полностью скомпрометирован (prompt injection, runtime shim и т. п.).
@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 arXiv:2604.24920 (2026).
| Роль | Исходный код | Опубликовано как |
|---|---|---|
| Custodian (T) | custodian/rust | sudp на crates.io |
| Authorizer (A) | authorizer/ts | @sudp-protocol/authorizer на npm |
| Requester (R) | requester/ts | @sudp-protocol/requester на npm |
Предварительные требования: Rust 1.85+ (через rustup) и Node.js 20+.
git clone https://github.com/xhyumiracle/sudp
cd sudp/examples/protocol-demo
./run.sh
Собирает все три пакета, запускает Custodian, выполняет R + A в Node-
скрипте, выводит каждое сетевое взаимодействие с цветовой кодировкой по роли и завершает
состязательной проверкой (R подменяет o после того, как A подписал → 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 (тесты setup) | conformance.test.ts: seal_ad: DS_SEAL ‖ ver_be |
помарочная герметизация (record_aad / K_aead / sealed framing) | 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 запускает обе половины при каждом push:
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.