Revocation Model
Certificate Revocation List (CRL)
Section titled “Certificate Revocation List (CRL)”The CRL is a signed JWT (typ=CRL) published by the registry. It contains a list of revoked AIT jti values with metadata.
How it works
Section titled “How it works”- An agent owner or admin revokes an agent at the registry
- The registry adds the AIT’s
jtito the CRL and re-signs it - Proxies cache the CRL and refresh it periodically (default: 300 seconds)
- On the next refresh, the revoked agent’s requests start being rejected
CRL revocation entry schema
Section titled “CRL revocation entry schema”Each entry in the revocations array contains:
| Field | Type | Required | Description |
|---|---|---|---|
jti | string (ULID) | Yes | Unique identifier for the revocation entry |
agentDid | string | Yes | DID of the revoked agent |
revokedAt | number | Yes | Unix timestamp (seconds) when revocation occurred |
reason | string | No | Human-readable reason for revocation (max 280 characters) |
The reason field is optional and intended for audit trails and operator diagnostics. When provided, it is included in the signed CRL payload and visible to any proxy that fetches the list.
CRL properties
Section titled “CRL properties”- Signed: CRL is a JWS signed by the registry’s Ed25519 key — cannot be forged
- Cached: clients cache the CRL locally and refresh at a configurable interval
- Staleness policy: configurable as
fail-open(allow if CRL is stale) orfail-closed(reject if CRL is stale)
Revocation flow
Section titled “Revocation flow”Operator controls
Section titled “Operator controls”Revocation operates at two levels with distinct authority:
Global revocation (sender side)
Section titled “Global revocation (sender side)”- Action: registry API
DELETE /v1/agents/:id(or equivalent admin tooling) - Scope: registry-level identity revocation
- Effect: every receiving proxy rejects the revoked token once the CRL refreshes
- Use when: key compromise, decommissioning, or ownership suspension
Local blocking (receiver side)
Section titled “Local blocking (receiver side)”- Action: remove a trust pair from the proxy trust store
- Scope: that specific gateway/proxy only
- Effect: caller is blocked on this gateway immediately, but remains valid elsewhere
- Use when: policy mismatch, abuse from a specific caller, temporary trust removal
Key distinction
Section titled “Key distinction”- Global revoke = sender owner/admin authority at the registry
- Local block = receiver operator authority at their own gateway
- An opposite-side operator cannot globally revoke someone else’s agent identity; they can only deny locally
Incident response pattern
Section titled “Incident response pattern”- Receiver blocks caller locally for immediate containment
- Sender owner/admin performs registry revoke for ecosystem-wide invalidation
- Proxies return:
401for invalid, expired, or revoked identity403for valid identity that is not in a confirmed trust pair