Loading vLEI.wiki
Fetching knowledge base...
Fetching knowledge base...
This comprehensive explanation has been generated from 191 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 decentralized identifier (DID) is a globally unique persistent identifier that does not require a centralized registration authority and is often generated and/or registered cryptographically, enabling verifiable, decentralized digital identity as standardized by the W3C DID specification.
Decentralized Identifiers (DIDs) represent a fundamental shift in digital identity architecture as standardized by the W3C Decentralized Identifiers (DIDs) v1.0 specification. A DID is formally defined as a globally unique persistent identifier that operates without dependence on centralized registration authorities, typically employing cryptographic methods for generation and registration.
The primary objectives of the DID specification are:
DIDs fundamentally differ from traditional identifiers by decoupling identifier control from centralized infrastructure. While systems like DNS, certificate authorities, and national ID registries require centralized roots-of-trust, DIDs enable controllers to prove control using cryptography alone, as defined by specific DID method specifications.
When implementing a DID method, developers must specify:
For did:keri and did:webs implementations:
DID resolvers should:
The authoritative specification is the W3C Decentralized Identifiers (DIDs) v1.0 specification, which defines:
did:method:method-specific-idThe specification establishes DIDs as URIs (Uniform Resource Identifiers) following RFC 3986, with the did: URI scheme registered with IANA.
The DID specification evolved through several phases:
The specification explicitly acknowledges that many—but not all—DID methods utilize distributed ledger technology (DLT) or decentralized networks. This qualification is significant because it establishes that DLT or blockchain infrastructure is common but not mandatory, allowing for diverse implementation approaches including ledgerless architectures like KERI.
The DID architecture consists of four primary components:
The DID syntax follows a hierarchical structure:
did:method:method-specific-id[:path][?query][#fragment]
Where:
did: - The URI scheme identifiermethod - The specific DID method name (e.g., keri, webs, web, key)method-specific-id - Method-specific identifier stringA DID document is a set of data describing the DID subject, containing:
The DID document serves as the resolved representation of a DID, providing the cryptographic material and metadata necessary for verifying control and establishing secure communications.
A DID method is a specification defining how a particular DID scheme operates. Each method must specify:
DID methods provide the implementation-specific mechanisms that enable the abstract DID specification to function across diverse infrastructures. Examples include:
did:keri - KERI-based method using key event logsdid:webs - Web-based method with KERI securitydid:web - Simple web-based method using HTTPSdid:key - Static cryptographic key methodDID resolution is the process of retrieving a DID document given a DID. The resolution process:
Resolution relies on the Read operation of the applicable DID method, making it method-specific in implementation but standardized in interface.
The DID architecture implements a separation of concerns between:
Control Plane:
Data Plane:
This separation enables controllers to manage identifiers independently while verifiers can resolve and verify identifiers without requiring permission from controllers or intermediaries.
DID state management varies by method:
Ledger-Based Methods: Store DID documents or state commitments on distributed ledgers, with state transitions recorded as blockchain transactions.
Ledgerless Methods: Maintain state through cryptographically verifiable data structures (like KERI's key event logs) without shared ledger infrastructure.
Web-Based Methods: Store DID documents at well-known web locations, with state managed through standard web infrastructure.
The W3C specification is infrastructure-agnostic, allowing each method to define its own state management approach while maintaining interoperability through the common DID document data model.
The DID syntax is formally defined using ABNF (Augmented Backus-Naur Form):
did = "did:" method ":" method-specific-id
method = 1*method-char
method-char = %x61-7A / DIGIT ; lowercase letters and digits
method-specific-id = *idchar *( ":" *idchar )
idchar = ALPHA / DIGIT / "." / "-" / "_"
Key constraints:
The DID document data model is defined abstractly, with multiple concrete representations:
Required Properties:
id - The DID subject identifierOptional Properties:
controller - Entity(ies) authorized to make changesverificationMethod - Array of verification method objectsauthentication - Verification methods for authenticationassertionMethod - Verification methods for assertionskeyAgreement - Verification methods for key agreementcapabilityInvocation - Verification methods for capability invocationcapabilityDelegation - Verification methods for capability delegationservice - Array of service endpoint objectsA verification method object contains:
{
"id": "did:example:123#key-1",
"type": "Ed25519VerificationKey2020",
"controller": "did:example:123",
"publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
}
Where:
id - Verification method identifier (typically a DID URL with fragment)type - Cryptographic suite identifiercontroller - DID of the controlling entityThe W3C specification defines multiple representation formats:
The primary representation uses JSON with specific requirements:
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/suites/ed25519-2020/v1"
],
"id": "did:example:123456789abcdefghi",
"verificationMethod": [{
"id": "did:example:123456789abcdefghi#keys-1",
"type": "Ed25519VerificationKey2020",
"controller": "did:example:123456789abcdefghi",
"publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
}],
"authentication": [
"did:example:123456789abcdefghi#keys-1"
]
}
The @context field is a representation-specific entry meaningful only in JSON-LD representation.
JSON-LD representation adds semantic web capabilities through linked data contexts, enabling semantic interoperability and RDF processing.
The specification allows for additional representations (CBOR, MessagePack, etc.) provided they maintain semantic equivalence with the abstract data model.
DID Subject: The entity identified by the DID, which can be anything (person, organization, thing, data model, abstract entity).
DID Controller: Entity(ies) with the capability to make changes to the DID document. A DID may have multiple controllers, and the controller might be the DID subject itself or a separate entity.
Verification Relationships: Define the purpose for which verification methods may be used:
authentication - Proving control of the DIDassertionMethod - Issuing verifiable credentialskeyAgreement - Establishing secure communicationcapabilityInvocation - Invoking capabilitiescapabilityDelegation - Delegating capabilitiesService Endpoints: Means of communicating with the DID subject, including discovery services, agent services, messaging services, and credential repositories.
DID creation follows a method-specific process:
For KERI-based methods like did:keri, creation involves:
Resolution transforms a DID into a DID document:
Resolution Metadata includes:
contentType - Media type of the representationcreated - Timestamp of DID creationupdated - Timestamp of last updateDocument Metadata includes:
created - When the DID document was createdupdated - When the DID document was last updateddeactivated - Whether the DID has been deactivatedversionId - Version identifier for the documentUpdating a DID document follows method-specific procedures:
For KERI-based methods, updates occur through:
Deactivation marks a DID as no longer active:
Deactivated DIDs cannot be reactivated, ensuring finality of the deactivation decision.
DID lifecycle state transitions:
[Non-existent] --create--> [Active] --update--> [Active]
|
+--deactivate--> [Deactivated]
Once deactivated, a DID cannot transition back to active state, providing immutable deactivation semantics.
The W3C specification does not mandate specific timing requirements, leaving these to individual DID methods. However, general principles include:
KERI-based methods provide strong ordering guarantees through key event logs with cryptographic chaining.
The DID specification addresses several threat categories:
Threat: Attacker creates a DID claiming to represent a legitimate entity.
Mitigation: DIDs alone do not prevent impersonation; they must be combined with:
Threat: Attacker intercepts DID resolution and provides fraudulent DID document.
Mitigation:
Threat: Attacker obtains private keys controlling a DID.
Mitigation:
Threat: Attacker correlates DID usage across contexts to track subjects.
Mitigation:
The DID specification provides:
Cryptographic Verifiability: Control over a DID can be cryptographically proven through signatures with verification methods listed in the DID document.
Decentralized Control: No centralized authority can unilaterally revoke or modify a DID (method-dependent).
Persistent Identifiers: DIDs remain valid over time, enabling long-term verifiable relationships.
Method-Specific Security: Each DID method defines its own security properties, which may include:
Sybil Attacks: DIDs do not inherently prevent Sybil attacks (creating many identities). Resistance requires:
Eclipse Attacks: Relevant for peer-to-peer resolution systems. Mitigation includes:
Quantum Computing Threats: Current cryptographic algorithms may be vulnerable to quantum attacks. Mitigation strategies:
DIDs serve as the identifier layer for KERI-based systems:
did:keri Method: Implements DIDs using KERI's key event infrastructure:
The did:keri method provides:
did:webs Method: Combines web-based discovery with KERI security:
did:web)did:web to full KERIDIDs serve as issuer and subject identifiers in ACDC credentials:
i field contains issuer's DIDACDCs extend DIDs by providing:
Verifiable Credentials: DIDs serve as identifiers for:
The W3C Verifiable Credentials specification explicitly supports DIDs as the primary identifier type.
DIDComm: Secure messaging protocol using DIDs for:
Verifiable Presentations: DIDs identify:
Authentication Protocols: DIDs enable:
URI/URL Standards (RFC 3986): DIDs are URIs and follow URI syntax rules.
Cryptographic Standards: DIDs depend on:
JSON/JSON-LD: Primary representation formats for DID documents.
HTTPS: Many DID methods use HTTPS for:
did:web, did:webs)Distributed Ledgers: Blockchain-based DID methods depend on:
Challenge: Choosing appropriate DID method for use case.
Considerations:
KERI-based methods (did:keri, did:webs) offer strong security without ledger dependencies but require witness/watcher infrastructure.
Challenge: Implementing reliable DID resolution.
Considerations:
KERI-based methods enable end-verifiable resolution, eliminating trust in resolver infrastructure.
Challenge: Securely managing private keys controlling DIDs.
Considerations:
KERI's pre-rotation mechanism provides post-quantum secure key rotation and compromise recovery.
Challenge: Preventing correlation across contexts.
Considerations:
Resolution Latency:
Scalability:
Storage Requirements:
Implementers should test:
Implementations should:
For transitioning from centralized identifiers:
KERI-based did:webs provides a migration path from did:web by adding cryptographic verification to existing web-based DIDs.