
Decentralized Identifiers (DIDs): The New DNS for Identity
Imagine if you had to ask Google for permission every time you wanted to create a website. Imagine if Google could revoke your domain because they didn't like your content. Imagine if your website stopped working the moment Google had a server outage.
This sounds dystopian, yet this is exactly how digital identity works today.
Your identity is rented. It relies on centralized identity management systems—managed by governments, banks, or Big Tech—where a centralized registration authority controls your existence.
Decentralized Identifiers (DIDs) are the architectural fix.
Just as the Domain Name System (DNS) allowed us to map a human-readable name to an IP address without a single central computer controlling the entire internet, DIDs map an identity to a public key without a central authority.
For CTOs and architects, DIDs are not just a "crypto" feature; they are the new infrastructure layer for the web. They replace the fragile "User ID" in your database with a cryptographically verifiable, globally unique identifier that functions across decentralized networks.
This guide is a deep dive into the architecture of DIDs. We will move beyond high-level definitions and explore the DID document, the DID method specification, and the cryptographic primitives that allow institutions to minimize data retention while maximizing verification confidence.
Key Takeaways for Architects:
- Decoupling: DIDs separate the identifier from the service provider (no vendor lock-in).
- Resolvability: Like DNS, DIDs resolve to a document containing keys and endpoints.
- Control: The user (Controller) manages the document via private keys, not a password.
The Problem DIDs Solve
To understand the solution, we must audit the failure mode of current centralized identity management systems.
The Centralized Registration Authority Bottleneck
In the current stack, identity is administrative. To exist, you must be registered by a centralized registration authority (e.g., the DMV, a corporate HR department, or a social media platform).
This creates a bottleneck. The authority becomes the single source of truth. If the registration authority is slow, offline, or corrupt, the identity is useless. In a global digital economy, relying on a manual, siloed registration process is a scalability nightmare.
Systemic Risk of Centralized Registries
Centralized control creates systemic risk. When millions of identities live in centralized registries, you create a "honeypot" for attackers.
We have seen this repeatedly: Equifax, Yahoo, LinkedIn. The architecture of centralized authorities forces them to hoard data to prove identity. This makes centralized control not just a philosophical issue, but a liability issue.
Identity Providers as Single Points of Failure
Legacy identity providers (IdPs) act as gatekeepers. When you use "Login with Facebook," Facebook is the IdP.
If Facebook goes down, you are locked out of Spotify, Airbnb, and the New York Times.
For the architect, reliance on third-party identity providers introduces a dependency you cannot control. It also introduces "Single Points of Liability." If the IdP is breached, your application is compromised by proxy.

Why "Digital Identity" Fails When Portability is Vendor-Locked
True digital identity should be portable. You take your physical wallet from the bar to the bank.
In software, digital identity is vendor-locked. Your Uber reputation does not transfer to Lyft. Your Twitter following does not transfer to BlueSky.
DIDs solve this by decoupling the identifier from the service provider.
The Institutional Requirement: Minimize Data Retention
Institutions face a paradox: they need to verify users (KYC) but want to minimize data retention (GDPR).
DIDs enable this. By using a DID to authenticate a user, the institution verifies control of a key, not a password. They gain high verification confidence without holding the "toxic waste" of personal data.
What Are Decentralized Identifiers (DIDs)?
So, what is a DID?
In the W3C specification, decentralized identifiers (DIDs) are a new type of identifier that enables verifiable, decentralized digital identity.
Decentralized Identifiers vs Usernames
A username points to a row in a database (e.g., user_id: 8841).
A decentralized identifier points to a DID document.
This distinction is critical. A username is a pointer to data. A DID is a pointer to cryptographic material and service endpoints.
A Globally Unique Persistent Identifier
A DID is a globally unique identifier. No two DIDs are the same.
More importantly, it is a globally unique persistent identifier.
Unlike an IP address which might change, or an email address which might be reassigned, a DID is designed to persist as long as the controller wishes. It provides a stable anchor in a shifting digital landscape.
Decentralized Identity as an Architecture Pattern
Decentralized identity is not a SaaS product you buy. It is an architecture pattern.
It shifts the "Root of Trust" from a corporate server to a cryptographic key pair. When you implement decentralized identity, you are architecting a system where the user brings their own authentication method.
Decentralized Identifier Architecture in One Diagram
In a DID-based architecture, the flow of trust changes:
- Issuer: Signs a credential (e.g., "Over 18") and issues it to the Holder's DID.
- Holder: Stores the credential and controls their DID via a private key.
-
Verifier: Resolves the Holder's DID to verify the signature and checks the Issuer's DID to verify the claim source.
Crucially, the Issuer and Verifier never need to integrate directly. The DID infrastructure acts as the universal bridge.

DIDs Are URIs (Uniform Resource Identifier)
For the architect, it is helpful to treat DIDs as URIs.
URI vs URL
A Uniform Resource Locator (URL) tells you where something is (e.g., https://google.com implies a server).
A Uniform Resource Identifier (URI) simply identifies the resource.
DIDs are URIs. They identify an identity resource, but they do not necessarily tell you where it is stored. That is the job of the "Resolver."
Formal Syntax
The formal syntax of a DID follows a strict structure:
did:method:method-specific-identifier
- Scheme: Always did.
- Method: The specific DID method used (e.g., ethr, key, web).
- Method Specific Identifier: The unique string within that method (e.g., a public key hash).
URI Path, Query, and Fragment Syntax
Because DIDs are URIs, they support standard URI path syntax, URI query syntax, and URI fragment syntax.
- Path: did:example:123/path/to/resource (Rarely used in identity, but valid).
- Query: did:example:123?version-id=1 (Used to fetch a specific version of a DID document).
- Fragment: did:example:123#key-1 (Used to reference a specific key inside the DID document).
The Hash Sign Character (#) and Binding Keys
The hash sign character (#) is the most important operator in URI fragment syntax.
When you see did:example:123#keys-1, the fragment identifies a specific Verification Method within the DID document. This allows a Verifier to say, "I verified this signature using Key #1 specifically."
Query Syntax and "Perform Additional Processing"
URI query syntax tells the resolver to perform additional processing.
For example, did:example:123?service=agent tells the resolver to fetch the document and extract the specific service endpoint for the user's agent. This makes DIDs programmable, allowing applications to discover capabilities dynamically.
DID Method Specification (How DIDs Actually Work)
The "Method" is the driver. Just as http and ftp are different protocols, did:ethr and did:web are different methods.
What the DID Method Specification Defines
A DID method specification defines how to Create, Read, Update, and Deactivate (CRUD) a DID on a specific target system.
It defines: "If you want to resolve did:ethr, look at the Ethereum blockchain."
It must not define the data model of the DID document itself (that is defined by W3C Core).
Method Specification vs Method Specific Identifier
The method specific identifier is often generated differently across methods.
In did:key, the identifier is the public key itself.
In did:web, the identifier is a domain name.
This means you cannot easily "port" a method specific identifier from one method to another. You can't take a did:web identifier and make it a did:key.
did:ethr vs did:key vs did:web
- did:ethr: Rooted on Ethereum. High decentralization, gas costs for updates.
- did:key: Ephemeral, rooted in the key itself. No ledger needed. Cannot be updated (no rotation).
- did:web: Rooted in a DNS domain (verifyo.com). Relies on centralized control of the domain, but easy for institutions to adopt.
Interoperability and Standards
If you choose a bespoke method, you greatly hinder interoperability.
If no other tool supports your DID method specification, your identity is an island. Architects should stick to the "Big 3" (ethr, key, web) or standards with broad resolver support.
The "Technical Report" Reality
Many methods are still defined in a technical report rather than a finalized standard.
Architects must be aware that the specification defines the rules today, but implementations diverge. Always check the Universal Resolver compatibility before committing.

DID Document (The Core Architecture)
The DID document is the most critical component. If the DID is the pointer, the DID document is the payload.
The DID document contains the public keys and service endpoints necessary to interact with the identity.
What a DID Document Is
A DID document is a JSON-LD object.
The document specifies the cryptographic material required to authenticate the DID controller. If it's not in the document, it doesn't exist.
Common Data Model
The W3C defines a common data model.
Whether the DID is on Bitcoin, Ethereum, or a web server, the DID document looks the same.
It consists of representation data (the JSON text) and representation metadata (content type, created timestamp).
DID Subject and DID Controller
- DID Subject: The entity the DID refers to (usually the user). In the document, this is the id field ("id": "did:example:123").
- DID Controller: The entity that has the power to update the document. Often the same as the subject, but in enterprise cases, the DID controller might be a corporate multisig wallet.
Verification Method
The verification method section is the heart of the DID document. It lists the public keys authorized to sign on behalf of the DID.
JSON "verificationMethod": [{ "id": "did:example:123#key-1", "type": "JsonWebKey2020", "controller": "did:example:123", "publicKeyJwk": { ... } }]Plain Text
Any signature verified against a verification method in the DID document is considered valid.
Verification Key vs Public Key
- Cryptographic Public Keys: The raw math (e.g., an Elliptic Curve point).
- Verification Key: The functional use of that key in the document.
-
Public Verification Keys: The set of all visible keys.
The DID document exposes public verification keys so Verifiers can check proofs. It never exposes private keys.
Prove Control
The DID document allows the subject to prove control.
By signing a challenge with the private key corresponding to a verification method in the DID document, the user proves they "own" the identity.
Service Endpoint and Discovery
The DID document can list service endpoints.
A service endpoint tells the world how to interact with the DID (e.g., "Fetch Verifiable Credentials here"). This enables discovery services without a central directory.
Input Metadata
When you resolve a DID, the resolver might return input metadata.
This is data about the resolution process (e.g., "Retrieved from Ethereum block #15000"). It helps verify the freshness of the DID document.
Additional Syntactic Component Rules
Resolvers enforce additional syntactic component rules. If a DID document is malformed (e.g., duplicate Fragment IDs), the resolver must reject it.
Precise Operations: Create, Update, Deactivate
The DID method specification defines the precise operations for managing the document.
- Create: Generate the initial DID document.
- Update: Add a new verification method (key rotation) to the DID document.
- Deactivate: Render the DID document immutable or invalid.
Example DID Document for a Regulated Institution
An institution's DID document prioritizes security.
- DID Controller: A Gnosis Safe multisig.
- Verification Method: Only hardware-backed keys.
-
Service Endpoint: A secure, authenticated API for credential issuance.
This DID document is rigid and changes rarely.
Example DID Document for a Consumer Wallet
A consumer's DID document prioritizes recovery.
- DID Controller: The user's mobile enclave.
- Verification Method: Keys for authentication, plus a "Recovery Key" held by a guardian.
-
Service Endpoint: A personal data vault (User Hub).
This DID document is updated frequently as the user rotates devices.
Keys, Control, and Cryptographic Material (Security Layer)
The DID document is public. The security comes from the private side.
Private Key Realities
The private key is the root of control. If you lose the private key, you lose control of the DID document.
Institutions must decide: Self-custody (HSM) or Custodial (MPC).
Private Cryptographic Material
We distinguish between:
- Cryptographic Material: Keys, signatures, hashes (can be public or private).
- Private Cryptographic Material: The secrets that must never leave the secure enclave.
Secure Prove Control Flows
It is the private cryptographic material enabling the user to sign a login challenge.
The Verifier checks the signature against the DID document, but never sees the private material.
Key Agreement Process
The DID document often includes a keyAgreement section.
This specifies keys used for encryption (Diffie-Hellman), not just signing. It allows two DIDs to establish a secure communication channel (the key agreement process).
Cryptographic Proof vs Provide Cryptographic Proof
- Cryptographic Proof: The mathematical artifact (the signature).
-
Provide Cryptographic Proof: The action of the user submitting that signature.
The Verifier's job is to validate that the cryptographic proof matches the verification method in the DID document.
Cryptographically Verifiable Data Structures
DIDs enable cryptographically verifiable data structures.
Because every interaction is signed by a DID, we can build audit trails where every entry is undeniably linked to a specific actor.
Where DID Data Lives
Where is the DID document actually stored?
Verifiable Data Registry
The storage layer is called a Verifiable Data Registry.
This could be a blockchain, a distributed hash table (IPFS), or a trusted database.
Distributed Ledger vs File Storage Services
- Distributed Ledger: High trust, high cost. Good for anchoring the "Root" of the DID.
-
File Storage Services: (e.g., IPFS, AWS S3). Good for storing large Credentials or metadata.
Often, the DID document is generated from a minimal anchor on a distributed ledger, while the heavier data lives in file storage services.
Network Address and Resolution Paths
The network address of the DID is virtual. The Resolution Path determines how you get from did:ethr:0x... to a JSON object.
Ops teams must ensure the Resolution Path is highly available.
Identifier Systems vs Identifier Management
Identifier systems (like DNS) are public utilities. Identifier management is the internal governance of how an organization uses those systems.
Verifiable Credential Repository Services
DIDs often point to Verifiable Credential Repository Services via the service endpoint in the DID document. This is where the user's "Passport" and "Driver's License" are stored (encrypted), ready to be shared.
Interoperability and Operational Risk (The CTO Checklist)
The Biggest Failure Modes: Resolver Mismatch
If your app uses a library that only understands did:ethr v1, but the user presents a did:ethr v2 identity, it breaks. Resolver mismatch is the #1 integration pain.
Portability Tests
Before committing to a DID method, run portability tests.
Can you resolve the DID using the Universal Resolver? If not, you are building a walled garden.
Revocation and Deactivation Planning
How do you kill a DID?
Ensure your chosen DID method specification supports a clear Deactivation operation. Otherwise, compromised DIDs live forever.
Correlation Risks
If you use the same DID for everything, you create a perfect tracking beacon. Correlation risks are high.
Best practice: Use Pairwise DIDs (a unique DID for each relationship) to mitigate this.
"Actual Knowledge" vs Assumed Knowledge
Do not assume the DID document is fresh. Always check the updated timestamp.
Operating on assumed knowledge (cached DID docs) leads to security vulnerabilities where you accept a signature from a revoked key.

Implementation Checklist for DID-Based Identity Stacks
If you are building an identity stack, here is your roadmap.
Choose Your DID Method Specification
- Need global censorship resistance? did:ethr or did:ion.
- Need ease of use for enterprise? did:web.
- Need ephemeral sessions? did:key.
Define Governance: DID Controller Model
Who controls the corporate DID?
Implement a multisig DID controller model to prevent a single rogue admin from hijacking the company identity.
Define Key Lifecycle
- Rotation: How often do we rotate the verification method?
- Recovery: If the private key is lost, is there a social recovery module?
Define Service Endpoint Policy
What goes in the DID document?
Keep it minimal. Only public service endpoints. Never put PII in the document.
Define Registry + Storage
Strategy: Anchor the DID on a distributed ledger, but use file storage services for backups.
Define Testing
Mandatory: Conformance testing against the W3C spec. Integration testing with major wallets.
Conclusion
Decentralized Identifiers:
Are not just "identity proof." They are the identifier + control primitives for the next web.
The DID document is the operational core, replacing the siloed user row in your database.
Centralized Control:
By adopting this architecture, you eliminate centralized control, reduce the blast radius of data breaches, and prepare your infrastructure for the next wave: Verifiable Credentials and Zero-Knowledge KYC.
Frequently Asked Questions (FAQ)
What is the difference between a DID and a wallet address?
A wallet address is a hashed public key used for payments. A DID is a URI that points to a DID document. A DID can be associated with a wallet address (like did:ethr), but it is a much richer object that can contain multiple keys, service endpoints, and rotation logic.
What is a DID document and why is it so important?
The DID document is the JSON-LD file that describes the DID. It contains the public verification keys and service endpoints. Without the DID document, a DID is just a string of characters with no utility.
What is a DID controller?
The DID controller is the entity (person or organization) that has the cryptographic power to update or deactivate the DID document.
What is a verification method vs verification key?
The verification method is the section in the DID document that describes how to verify a signature. The verification key is the actual cryptographic key used in that process.
Where does the DID document live?
It depends on the method. For did:ethr, it is generated dynamically from the blockchain. For did:web, it lives on a web server. For did:ion, it lives on IPFS/Bitcoin. Ideally, it lives on a verifiable data registry.
Are DIDs anonymous?
Pseudonymous. A DID looks like a random string. However, if you use the same DID everywhere, your activity can be correlated. To achieve privacy, users should use unique DIDs for different interactions.
Which DID method should enterprises choose?
did:web is the current standard for enterprises because it links the DID to a known DNS domain (which provides trust). did:key is best for one-off interactions.
How do DIDs connect to Verifiable Credentials?
The DID is the "Subject" of the credential. A Verifiable Credential states: "The entity controlling DID A is over 18." The DID infrastructure allows the Verifier to check that the user actually controls DID A.
What breaks interoperability most often?
Non-standard DID method specifications. If you use a method that isn't supported by major wallets or resolvers, your DIDs are useless outside your ecosystem.
How do you rotate keys safely?
You broadcast an "Update" operation to the verifiable data registry. This replaces the old verification method in the DID document with a new one, without changing the DID string itself.
What Comes Next?
We have established the "DNS" of identity. We have a globally unique identifier (DID) and a way to look up its keys (DID Document).
But a DID is just an empty container. It doesn't tell us who the user is or what they are allowed to do.
For that, we need to fill the container with data.
Next, we explore the "Passport" that goes into the wallet: Verifiable Credentials vs. Soulbound Tokens.
Verifiable Credentials (VCs) vs. Soulbound Tokens (SBTs): The Architect’s Guide
Want to learn more?
Explore our other articles and stay up to date with the latest in zero-knowledge KYC and identity verification.
Browse all articles