
AI 에이전트를 위한 암호학적으로 서명된 위임 영수증. AI가 할 수 있는 것과 할 수 없는 것을 정확히 정의합니다 — 서명 가능, 검증 가능, 변조 방지.
AuthProof는 에이전틱 AI를 위한 암호화 기반 위임 프로토콜입니다. 이 분야의 대부분의 프로토콜은 운영자가 정의한 정책에 대해 적용됩니다. 즉, 운영자에게 사용자의 원래 의도를 사후에 확장하거나 재해석할 수 있는 권한을 부여합니다. AuthProof는 다른 신뢰 모델을 기반으로 구축되었습니다. 사용자 자신의 개인 키가 실행을 제어하는 권한 부여 객체에 서명하고, 라이브 모델 상태는 권한 부여 시점과 실행 직전에 모두 검증됩니다. 사용자 서명 권한과 라이브 모델 상태 게이팅의 조합이 구체적인 주장이며, 광범위한 적용 강제 이야기가 아닙니다.
차별점:
사용자가 서명 권한자입니다. 경쟁 프로토콜(AIP, AITH, OAP, SAGA, AgentSpec)은 모두 운영자가 정의한 정책에 대해 적용됩니다. AuthProof에서는 사용자의 개인 키가 직접 권한 부여 객체에 서명합니다. 사용자가 서명한 후에는 운영자가 범위를 확장할 수 없습니다.
2단계 모델 상태 커밋. 모델은 권한 부여 시점에 측정되고 실행 직전에 다시 측정됩니다. 두 시점 사이에 모델이 변경된 경우, 실행 전 검증에서 실행이 차단됩니다.
공급자 업데이트와 악의적 대체 구분. 프로토콜은 모델 상태 변경을 두 가지 범주로 분류합니다. 정당한 공급자 업데이트(PROVIDER_UPDATE_REQUIRES_REAUTH)와 무단 교체(MALICIOUS_MODEL_SUBSTITUTION)입니다. 각각 어떤 구성 요소가 변경되었는지 식별하는 기계 판독 가능한 거부 이유 코드를 생성합니다.
모든 에이전트 작업이 실행되기 전에 실행되는 결정론적 게이트입니다.
PreExecutionVerifier는 에이전트 런타임 외부에 있습니다. 런타임은 검증기가 통과할 때까지 제어권을 얻지 못합니다. 손상되었거나 악의적인 에이전트는 이를 건너뛸 수 없습니다. 런타임이 시작되기 전에 실행됩니다.
전통적인 권한 부여 검사는 에이전트 런타임 내부에서 이루어집니다. 런타임이 손상되면 해당 검사는 건너뛰거나 순서가 변경되거나 우회될 수 있습니다. PreExecutionVerifier는 권한 부여를 런타임 외부로 완전히 이동하여 이러한 공격 표면을 제거합니다. 에이전트는 여섯 가지 순차적 검사가 모두 먼저 통과된 경우에만 실행됩니다.
import { PreExecutionVerifier, DelegationLog } from 'authproof-sdk/pre-execution-verifier' import { RevocationRegistry } from 'authproof-sdk'
// 1. Set up the gate const delegationLog = new DelegationLog() const revocationRegistry = new RevocationRegistry() await revocationRegistry.init({ privateKey, publicJwk })
const verifier = new PreExecutionVerifier({ delegationLog, revocationRegistry }) await verifier.init({ privateKey: verifierKey, publicJwk: verifierPub })
// 2. Register your delegation receipt delegationLog.add(receiptHash, receipt)
// 3. Gate every action â before the agent runs const result = await verifier.check({ receiptHash, action: { operation: 'read', resource: 'calendar' }, operatorInstructions: 'Summarize meetings. Stay within scope.', programHash, // optional: prevents code substitution attacks })
if (!result.allowed) {
throw new Error(Blocked: ${result.blockedReason})
}
// Agent runtime only reaches here after all six checks pass
### 6개의 순차 검사 (첫 번째 실패 시 중단)
| # | 검사 | 차단 조건 |
|---|-------|-------------|
| 1 | 영수증 서명 | ECDSA P-256 서명이 유효하지 않거나 영수증이 변조된 경우 |
| 2 | 취소 | `RevocationRegistry`를 통해 영수증이 취소된 경우 |
| 3 | 시간 창 | 영수증이 만료되었거나 아직 유효하지 않은 경우 (로그 타임스탬프 오라클 기준, 클라이언트 시계 아님) |
| 4 | 범위 | 작업이 `ScopeSchema.allowedActions`에 없거나 텍스트 기반 범위 매칭 실패 |
| 5 | 연산자 지침 | 현재 지침이 발행 시 영수증에 고정된 해시와 일치하지 않음 |
| 6 | 프로그램 해시 | 제공된 `programHash`가 커밋된 `executes` 해시와 일치하지 않음 (코드 대체 방지) |
모든 검사 결과(통과 또는 실패)는 검증자의 자체 키로 서명된 불변의 `ActionLog`에 자동으로 기록됩니다.
### 미들웨어 통합
일반적인 프레임워크를 위한 드롭인 래퍼입니다. 각 래퍼는 래핑된 코드가 실행되기 전에 모든 호출을 `PreExecutionVerifier`를 통해 게이트합니다.
- **[LangChain](https://github.com/commonguy25/authproof-sdk/blob/main/src/middleware/langchain.js)** — `invoke()` 메서드가 있는 모든 에이전트를 래핑합니다.
- **[Express/HTTP](https://github.com/commonguy25/authproof-sdk/blob/main/src/middleware/express.js)** — 모든 Express 호환 프레임워크용 요청 미들웨어
- **[Generic function wrapper](https://github.com/commonguy25/authproof-sdk/blob/main/src/middleware/generic.js)** — 모든 비동기 함수를 래핑```js
// LangChain
import { authproofMiddleware } from 'authproof-sdk/middleware/langchain'
const guardedAgent = authproofMiddleware(agent, { receiptHash, verifier })
// Express
import { authproofMiddleware } from 'authproof-sdk/middleware/express'
app.use(authproofMiddleware({ verifier, getReceiptHash: (req) => req.headers['x-receipt-hash'] }))
// Any function
import { guardFunction } from 'authproof-sdk/middleware/generic'
const guardedExecute = guardFunction(executeAction, { receiptHash, verifier, action })
기존의 모든 IETF 에이전트 신원 프레임워크 — AIP, draft-klrc-aiagent-auth, WIMSE — 는 서비스-에이전트 신뢰를 다룹니다: 하위 서비스가 에이전트가 호출할 권한이 있는지 확인하는 방법입니다. 이들 중 어느 것도 사용자-운영자 신뢰를 다루지 않습니다.
현재 에이전트 시스템의 위임 체인은 다음과 같습니다:``` User â Operator â Agent â Services
사용자가 운영자에게 지시합니다. 운영자는 에이전트에게 지시합니다. 그러나 위임 시점에 사용자의 원래 의도에 대한 암호학적 기록은 존재하지 않습니다. 운영자는 사용자의 지시가 에이전트에 도달하기 전에 이를 확장, 왜곡 또는 생략할 수 있는 무제한 권한을 가진 신뢰할 수 있는 제3자가 됩니다.
결과는 다음과 같습니다:
- 사용자는 자신이 승인한 내용을 증명할 수 없습니다.
- 규제 기관은 감사 추적을 할 수 없습니다.
- 법원은 증거 체인을 가질 수 없습니다.
- 에이전트는 합법적인 운영자 지시와 손상되거나 변조된 지시를 구분할 수 없습니다.
AuthProof가 이 격차를 메웁니다.
---
## 핵심 원시 요소(Primitive): 위임 영수증(Delegation Receipt)
**위임 영수증**은 에이전트 작업이 시작되기 전에 분산형 추가 전용 로그(append-only log)에 고정된 서명된 권한 부여 객체입니다. 다음 네 가지 필수 필드를 포함합니다.
### 범위(Scope)
허용된 작업의 명시적 허용 목록입니다. 나열되지 않은 모든 것은 기본적으로 거부됩니다. 자연어가 아닌 구조화된 형식으로 표현됩니다. 작업 클래스:
| 클래스 | 설명 |
|---|---|
| `reads` | 지정된 리소스에 대한 읽기 액세스 |
| `writes` | 지정된 리소스에 대한 쓰기 액세스 |
| `deletes` | 지정된 리소스 삭제 |
| `executes` | **정적 기능 서명 해시(static capability signature hash)**로 참조되는 특정 프로그램 실행 |
`executes`는 가장 위험한 클래스입니다. 이름, URI 또는 설명이 아닌 Safescript 프로그램의 정적 기능 DAG(Static Capability DAG)의 암호화 해시를 참조해야 합니다. 해시가 일치하지 않으면 실행이 불가능합니다.
### 경계(Boundaries)
어떠한 상황에서도 운영자 지시에 의해 재정의될 수 없는 명시적 금지 사항입니다. 사용자가 정의한 하드 리미트(Hard Limit)로, 이후의 운영자 지시에도 그대로 유지됩니다.
### 시간 창(Time Window)
권한 부여의 유효 기간입니다. **로그 타임스탬프**가 시간 오라클(Time Oracle)입니다. 클라이언트 시계는 시간 검증에서 명시적으로 제외됩니다.
### 운영자 지시 해시(Operator Instruction Hash)
위임 시점에 운영자가 명시한 지시의 암호화 해시입니다. 운영자가 이후에 에이전트에게 다르게 지시하는 경우, 추가적인 신뢰 가정 없이 로그에서 차이점을 감지할 수 있습니다.
사용자는 **WebAuthn/FIDO2를 통해 기기 보안 엔클레이브(Device Secure Enclave)**를 사용하여 개인 키로 이 객체에 서명합니다. 서명은 에이전트 작업 전에 로그에 게시됩니다. 이후의 모든 에이전트 작업은 영수증 해시를 참조합니다. 범위를 벗어난 작업은 암호학적으로 유효하지 않습니다.
---
## 신뢰 스택 아키텍처(Trust Stack Architecture)
세 가지 프로토콜 계층이 세 가지 신뢰할 수 있는 제3자를 제거합니다.
### 계층 1 — 서명된 기능 매니페스트(Signed Capability Manifest) *(레지스트리(Registry)에 대한 신뢰 제거)*
현재 MCP 생태계에서는 도구 서버의 설명이 실제 동작과 일치한다는 암호학적 증명이 없습니다. 운영자는 임의의 스키마를 제시할 수 있습니다.
해결책: 사용자 권한 부여 전에 도구 서버가 **암호학적으로 서명된 기능 매니페스트**를 게시합니다. 위임 영수증의 `scope` 필드는 운영자가 자체 보고한 스키마가 아닌 **이 매니페스트의 해시**를 참조합니다. 서버 동작과 매니페스트 간의 차이는 로그 계층에서 감지 가능합니다.
### 계층 2 — 위임 영수증(Delegation Receipt) *(운영자(Operator)에 대한 신뢰 제거)*
사용자의 원래 의도는 운영자 지시가 에이전트에 도달하기 전에 불변하게 기록됩니다. 운영자의 이탈은 증명 가능합니다.
### 계층 3 — Safescript 실행(Safescript Execution) *(코드(Code)에 대한 신뢰 제거)*
[Safescript](https://github.com/safescript)는 AI 에이전트 실행을 위한 오픈소스 샌드박스 언어입니다. 정적 DAG 구조 덕분에 모든 프로그램의 전체 기능 서명은 실행 전에 계산 가능합니다. 동적 디스패치(Dynamic Dispatch)나 런타임 기능 확장이 없습니다.
`executes` 범위 클래스는 특정 Safescript 기능 서명 해시를 참조합니다. 운영자가 제공한 프로그램이 커밋된 해시와 일치하지 않으면 실행이 차단됩니다. 위임 후 에이전트가 다른 프로그램으로 대체될 수 없습니다.
---
## 빠른 시작(Quick Start)```js
import { AuthProof, Scope, KeyCustody } from 'authproof-sdk';
// Initialize with hardware-backed key custody (recommended)
const authproof = new AuthProof({
custody: KeyCustody.HARDWARE, // WebAuthn/FIDO2 via device secure enclave
log: 'https://log.authproof.dev',
});
// Define permitted operations â explicit allowlist, deny-by-default
const scope = new Scope()
.allow('reads', ['resource://calendar/events', 'resource://email/inbox'])
.allow('writes', ['resource://calendar/events'])
.deny('deletes', '*')
.execute('sha256:a3f1c9d8...', { program: 'scheduler-v1.sg' }); // Safescript hash
// Hard limits that survive any operator instruction
const boundaries = {
never: ['external-network', 'credential-store', 'payment-methods'],
};
// Issue the Delegation Receipt â anchored to log before any agent action
const receipt = await authproof.delegate({
scope,
boundaries,
window: { duration: '8h' }, // validated against log timestamp
operatorInstructions: instructionText, // hashed and committed
});
// receipt.id â unique receipt identifier
// receipt.hash â reference in every agent action
// receipt.log â append-only log anchor
// Agent-side: validate an action against the receipt
const check = await authproof.validate({
receiptHash: receipt.hash,
action: { class: 'writes', resource: 'resource://calendar/events' },
});