
에이전트 시스템을 위한 프로토콜 수준 비밀 사용 — 비밀 사용 위임 프로토콜
에이전트 시스템을 위한 프로토콜 수준의 비밀 사용.
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이 완전히 침해되더라도(프롬프트 인젝션, 런타임 심 등) s에 대한 재사용 가능한 권한을 얻지 못합니다.
@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
세 패키지를 모두 빌드하고, Custodian을 실행하며, Node 스크립트에서 R + A를 실행하고, 모든 와이어 상호작용을 역할별로 색상 구분하여 출력하며, 적대적 검사(R이 A가 서명한 후 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 (setup 테스트) | conformance.test.ts: seal_ad: DS_SEAL ‖ ver_be |
레코드별 seal (record_aad / K_aead / sealed 프레이밍) | 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를 참조하세요.