Loading vLEI.wiki
Fetching knowledge base...
Fetching knowledge base...
This comprehensive explanation has been generated from 68 GitHub source documents. All source documents are searchable here.
Last updated: October 7, 2025
This content is meant to be consumed by AI agents via MCP. Click here to get the MCP configuration.
Note: In rare cases it may contain LLM hallucinations.
For authoritative documentation, please consult the official GLEIF vLEI trainings and the ToIP Glossary.
A public verifiable credential registry is a KERI-based infrastructure using Transaction Event Logs (TELs) anchored to Key Event Logs (KELs) to track the issuance and revocation state of verifiable credentials issued by an AID controller, enabling anyone to verify credential status through cryptographically verifiable, append-only data structures.
A public verifiable credential registry represents a fundamental architectural pattern within the KERI ecosystem for managing the lifecycle state of verifiable credentials. As defined in the IETF PTEL (Public Transaction Event Log) specification by Phil Feairheller and the KERIpy TEL reference documentation, this registry architecture provides a cryptographically verifiable mechanism for tracking credential issuance and revocation states that is publicly observable and independently verifiable by any party.
The primary purpose of a public verifiable credential registry is to solve the credential status verification problem in a decentralized manner. Traditional credential systems rely on centralized registries or certificate revocation lists (CRLs) that create single points of failure and privacy concerns. KERI's approach provides:
Implementers MUST ensure proper cryptographic anchoring between TEL and KEL events:
The registrar threshold (bt field) determines consensus requirements:
vrt)Verifiers MUST compute credential state by:
Implementers MUST handle event ordering correctly:
s field)Implementers SHOULD implement duplicity detection:
Implementers MUST understand privacy limitations:
The public verifiable credential registry architecture is formally specified in:
These specifications establish the normative requirements for implementing public credential registries within the KERI protocol suite.
The PTEL specification explicitly states: "This document addresses public VCs only. The use of hash digests of VC contents allows for correlation of VC uses." This design choice acknowledges that public registries sacrifice privacy for verifiability. The use of content digests as identifiers means that multiple presentations of the same credential can be correlated, making this architecture unsuitable for privacy-preserving credential use cases. For private credentials, alternative architectures using blinded revocation registries with salty nonce blinding factors are required.
The public verifiable credential registry architecture evolved through several phases:
The architecture continues to evolve with ongoing work on privacy-preserving variants and enhanced registry discovery mechanisms.
The public verifiable credential registry implements a three-layer architecture that separates concerns between identifier control, registry management, and individual credential tracking:
Layer 1: Key Event Log (KEL) - Control Authority Layer
Layer 2: Management TEL - Registry Infrastructure Layer
Layer 3: VC TEL - Credential State Layer
The registry architecture comprises several key components:
KEL Controller: The entity controlling the issuing AID, responsible for:
Registrars (Backers): Analogous to witnesses in KERI KELs, registrars:
TEL Event Processors: Components that:
Verifiers: External parties that:
The data flow through a public verifiable credential registry follows this pattern:
Credential Issuance Flow:
Credential Revocation Flow:
Credential Verification Flow:
The registry implements a deterministic state machine for credential lifecycle:
State Transitions:
State Representation:
State Verification:
All TEL events share a common structure with KEL events but serve different purposes. The fundamental fields are:
Common Fields (present in all TEL events):
i (Identifier): The AID of the TEL controller (typically the credential issuer)s (Sequence Number): The sequence number in the TEL (independent of KEL sequence)t (Event Type): The type of TEL event (vcp, vrt, iss, rev, bis, brv)Critical Distinction: The s field in TEL events represents a registry-specific "clock" rather than following KEL sequence numbering. Each registry maintains its own independent sequencing, which can be based on:
This independence allows TEL events to be anchored to any KEL event (interaction or rotation) without requiring strict sequence alignment.
The Management TEL uses specific event types for registry lifecycle management:
vcp (VDR Inception / Registry Inception):
{
"v": "KERI10JSON000116_",
"t": "vcp",
"d": "ELvaU6Z-i0d8JJR2nmwyYAZAoTNZH3UfSVPzhzS6b5CM",
"i": "EpDA1n-WiBA0A8YOqnKrB-wWQYYC49i5zY_qrIZIicQg",
"ii": "EJJR2nmwyYAZAoTNZH3ULvaU6Z-i0d8fSVPzhzS6b5CM",
"s": "0",
"bt": "2",
"b": [
"BGKVzj4ve0VSd8z_AmvhLg4lqcC_9WF93Saq",
"BuyRFMideczFZoapylLIyCjSdhtqVb2U_R"
],
"c": ["NB"]
}
Key fields:
ii: Issuer identifier (the AID that will issue credentials)bt: Backer threshold (number of registrars required)b: Backer list (registrar AIDs)c: Configuration traits (e.g., "NB" for non-backers allowed)vrt (VDR Rotation / Registry Rotation):
Allows rotation of the registrar set, similar to witness rotation in KELs.
The VC TEL uses event types specific to credential state management:
iss (Issuance Event - Non-Registry-Backed):
{
"v": "KERI10JSON000116_",
"t": "iss",
"d": "E8JZAoTNZH3ULvaU6Z-i0d8fSVPzhzS6b5CMJR2nmwy",
"i": "EpDA1n-WiBA0A8YOqnKrB-wWQYYC49i5zY_qrIZIicQg",
"s": "0",
"ri": "ELvaU6Z-i0d8JJR2nmwyYAZAoTNZH3UfSVPzhzS6b5CM",
"dt": "2021-01-01T00:00:00.000000+00:00"
}
Key fields:
ri: Registry identifier (SAID of the management TEL inception event)dt: Datetime of issuance (ISO 8601 format)rev (Revocation Event - Non-Registry-Backed):
{
"v": "KERI10JSON000116_",
"t": "rev",
"d": "EYOqnKrB-wWQYYC49i5zY_qrIZIicQgpDA1n-WiBA0A8",
"i": "EpDA1n-WiBA0A8YOqnKrB-wWQYYC49i5zY_qrIZIicQg",
"s": "1",
"p": "E8JZAoTNZH3ULvaU6Z-i0d8fSVPzhzS6b5CMJR2nmwy",
"dt": "2021-06-01T00:00:00.000000+00:00"
}
Key fields:
p: Prior event digest (links to previous VC TEL event)dt: Datetime of revocationbis (Backers Issuance - Registry-Backed):
Similar to iss but includes registrar receipts for enhanced trust.
brv (Backers Revocation - Registry-Backed):
Similar to rev but includes registrar receipts.
The distinction between registry-backed (bis/brv) and non-backed (iss/rev) events allows for flexible trust models where some credentials require distributed consensus while others rely solely on issuer authority.
TEL events are anchored to KEL events using Event Source Seals, which provide the cryptographic binding between the two log structures. The seal structure is:
JSON Representation:
{
"s": "3",
"d": "ELvaU6Z-i0d8JJR2nmwyYAZAoTNZH3UfSVPzhzS6b5CM"
}
Where:
s: Sequence number of the TEL event being anchoredd: SAID (digest) of the TEL event being anchoredCESR Encoding: Event source seals are delivered as attachments in CESR format using event source seal triples (duples of sequence number and digest):
-GAB
0AAAAAAAAAAAAAAAAAAAAAAw
ELvaU6Z-i0d8JJR2nmwyYAZAoTNZH3UfSVPzhzS6b5CM
Breakdown:
-GAB: CESR group framing code indicating an event source seal triple attachment0AAAAAAAAAAAAAAAAAAAAAAw: Base64 encoded sequence number ("3" in this example)ELvaU6Z...: CESR-encoded SAID of the TEL eventThis encoding enables efficient streaming and parsing of seal attachments while maintaining composability with other CESR primitives.
All TEL events use CESR (Composable Event Streaming Representation) encoding, which provides:
Dual Text-Binary Encoding: Events can be serialized in either text (JSON) or binary (CBOR, MGPK) formats with full round-trip conversion capability.
Self-Framing: Each primitive includes type and size information, enabling stream parsing without external schema knowledge.
Composability: Multiple primitives can be concatenated and parsed as a group, supporting efficient pipelining.
Version Strings: Each event begins with a version string like KERI10JSON000116_ that encodes:
This self-describing format enables parsers to extract events from streams without prior knowledge of event structure.
The creation of a public verifiable credential registry follows a specific protocol sequence:
Step 1: Management TEL Inception
vcp)Step 2: KEL Anchoring
Step 3: Registrar Distribution
Step 4: VC TEL Creation For each credential to be issued:
iss or bis)ri fieldThe issuance of a credential through a public registry involves:
Phase 1: Credential Creation
Phase 2: Registry Entry Creation
Phase 3: Cryptographic Commitment
Phase 4: Distribution and Confirmation
Phase 5: Credential Delivery
Revocation follows a similar but simpler pattern:
Phase 1: Revocation Decision
rev or brv)p fieldPhase 2: Cryptographic Commitment
Phase 3: Distribution and Confirmation
Phase 4: Verification Impact
Verifiers determine credential status through:
Step 1: Credential Receipt
ri field)Step 2: Registry Query
Step 3: Event Validation
Step 4: State Computation
Sequence Number Independence: TEL sequence numbers are independent of KEL sequence numbers. A single KEL event can anchor multiple TEL events, and TEL events can be anchored to any KEL event (interaction or rotation).
Monotonic State Transitions: Credential state transitions are monotonic - once revoked, a credential cannot be "un-revoked" without detecting key compromise and replaying from a trusted checkpoint.
Eventually Consistent: The registry achieves eventual consistency across registrars. Temporary inconsistencies may occur during network partitions but are resolved through duplicity detection and first-seen policies.
Grace Periods: The architecture supports "ghost credentials" - credentials in a grace period between revocation transaction creation and final booking to the registry. This allows for operational flexibility while maintaining security.
Timestamp Semantics: The dt (datetime) field in issuance and revocation events provides human-readable timestamps but is not used for cryptographic ordering. Sequence numbers provide the authoritative ordering.
The public verifiable credential registry architecture addresses several threat categories:
Threat 1: Unauthorized Credential Issuance
Threat 2: Unauthorized Credential Revocation
Threat 3: Registry State Manipulation
Threat 4: Registrar Compromise
Threat 5: Key Compromise
Threat 6: Replay Attacks
Threat 7: Eclipse Attacks
The architecture provides several formal security guarantees:
Authenticity Guarantee: All registry state transitions are cryptographically bound to the issuer's key state. Verifiers can independently verify that state changes were authorized by the entity controlling the issuing AID.
Integrity Guarantee: TEL events are cryptographically chained and anchored to KEL events. Any modification to event content invalidates the cryptographic binding, making tampering detectable.
Non-Repudiation Guarantee: Issuer signatures on KEL events provide non-repudiable proof of credential issuance and revocation. Issuers cannot deny having issued or revoked credentials without claiming key compromise.
Duplicity Evidence Guarantee: The architecture inherits KERI's duplicity-evident properties. If an issuer creates conflicting registry states, the conflict is cryptographically provable and detectable by any verifier.
Availability Guarantee: The use of multiple registrars provides redundancy. The registry remains available as long as the threshold number of registrars is reachable.
Consistency Guarantee: The deterministic state machine ensures that all honest verifiers computing state from the same event sequence reach the same conclusion about credential status.
Resistance to Dead Attacks: Dead attacks (attacks on stale key state) are prevented through KERI's pre-rotation mechanism. Even if old keys are compromised, they cannot be used to create valid new registry events because the next key digest was committed before compromise.
Resistance to Live Attacks: Live attacks (attacks on current key state) are detectable through duplicity detection. If an attacker compromises current keys and creates conflicting registry states, the conflict is evident to verifiers querying multiple registrars.
Resistance to Sybil Attacks: The registrar threshold mechanism prevents Sybil attacks where an adversary creates multiple fake registrars. The issuer explicitly designates trusted registrars, and verifiers validate registrar identities through their AIDs.
Resistance to Denial of Service: The distributed registrar architecture provides resilience against DoS attacks. Attackers must successfully DoS the threshold number of registrars to prevent registry access.
Resistance to Correlation Attacks: This is explicitly NOT a security property of public registries. The architecture acknowledges that public registries enable correlation of credential usage across presentations. This is an intentional design trade-off for public verifiability.
The security of public verifiable credential registries rests on:
Hash Function Security: The architecture assumes collision-resistant hash functions (typically Blake3-256). Breaking this assumption would allow creation of conflicting events with the same SAID.
Digital Signature Security: The architecture assumes secure digital signature schemes (Ed25519, ECDSA secp256k1). Breaking this assumption would allow unauthorized state transitions.
Key Management Security: The architecture assumes secure key generation, storage, and rotation practices. Poor key management undermines all other security properties.
CESR Encoding Security: The architecture assumes CESR encoding is unambiguous and parseable. Encoding ambiguities could enable parsing attacks.
Public verifiable credential registries are deeply integrated with the KERI protocol suite:
KEL Dependency: TELs fundamentally depend on KELs for:
Without a valid KEL, a TEL cannot be verified. The KEL provides the authoritative key state that validates TEL event signatures.
CESR Dependency: All events use CESR encoding for:
CESR provides the foundational encoding layer that enables interoperability across different serialization formats.
SAID Dependency: The architecture relies on SAIDs for:
SAIDs provide the self-referential integrity mechanism that binds registry components together.
ACDC Dependency: While not strictly required, public registries are typically used with ACDCs:
ri field) link credentials to registriesThe integration between public registries and ACDCs follows specific patterns:
Registry Identifier Field: ACDCs include an ri field that references the management TEL:
{
"v": "ACDC10JSON000116_",
"d": "EpDA1n-WiBA0A8YOqnKrB-wWQYYC49i5zY_qrIZIicQg",
"i": "ELvaU6Z-i0d8JJR2nmwyYAZAoTNZH3UfSVPzhzS6b5CM",
"ri": "EYOqnKrB-wWQYYC49i5zY_qrIZIicQgpDA1n-WiBA0A8",
"s": "E8JZAoTNZH3ULvaU6Z-i0d8fSVPzhzS6b5CMJR2nmwy",
"a": { ... }
}
The ri field enables verifiers to locate the appropriate registry for status queries.
Credential Identifier Alignment: The ACDC's SAID (d field) serves as the credential identifier in the VC TEL. This creates a direct cryptographic binding between the credential content and its registry entry.
Issuance Workflow Integration: ACDC issuance and TEL issuance are coordinated:
Revocation Workflow Integration: ACDC revocation triggers TEL revocation:
Public registries leverage KERI's witness and watcher infrastructure:
Witness Integration: Registrars can be implemented as KERI witnesses:
Watcher Integration: Watchers monitor both KELs and TELs:
OOBI Integration: Out-Of-Band Introductions enable registry discovery:
Multiple registries can coexist and interoperate:
Registry Namespacing: Each registry has a unique identifier (management TEL SAID), preventing namespace collisions.
Multi-Registry Credentials: A single credential can reference multiple registries for different purposes (e.g., issuance registry and revocation registry).
Registry Delegation: Registries can delegate authority to sub-registries, creating hierarchical registry structures.
Registry Federation: Multiple independent registries can be federated through shared registrars or watcher networks.
Implementers face several challenges when initializing registries:
Registrar Selection: Choosing appropriate registrars requires considering:
Threshold Configuration: Setting the registrar threshold involves trade-offs:
Bootstrap Coordination: Initial registry setup requires coordination:
Query Latency: Registry queries involve multiple network round-trips:
Implementers should consider caching strategies and pre-computation of state to reduce verification latency.
Storage Requirements: Registries accumulate events over time:
Implementers should plan for long-term storage scaling and archival strategies.
Bandwidth Optimization: Event distribution can consume significant bandwidth:
Implementers should consider event batching and compression techniques.
Registrar Maintenance: Operating registrars requires ongoing effort:
State Synchronization: Maintaining consistent state across registrars:
Revocation Timing: Managing revocation timing involves trade-offs:
While public registries explicitly sacrifice privacy for verifiability, implementers should consider:
Correlation Risks: Public registries enable correlation:
Mitigation Strategies: Implementers can reduce correlation risks:
Regulatory Compliance: Public registries must consider:
Horizontal Scaling: Registries can scale horizontally:
Vertical Scaling: Individual registrars can scale vertically:
Hierarchical Registries: Large-scale deployments can use hierarchical structures:
Implementers should thoroughly test:
Functional Testing: Verify correct protocol implementation:
Security Testing: Validate security properties:
Performance Testing: Measure system performance:
Interoperability Testing: Ensure compatibility:
Implementers SHOULD optimize for performance:
Implementers MUST handle error conditions:
Implementers SHOULD test:
Implementers MUST ensure interoperability: