did:adi Method Specification
did:adi Method Specification
Version: 1.0 Status: Draft Authors: Infinia Team Date: 2026-03-28
This document specifies the did:adi DID method, conformant with the W3C DID Core v1.0 specification. The did:adi method uses the ADI blockchain as its Verifiable Data Registry.
1. DID Method Name
The method name for this DID method is adi.
A DID using this method MUST begin with the prefix did:adi:. The remainder of the DID is the method-specific identifier described below.
2. Method-Specific Identifier
2.1 ABNF Syntax
2.2 Identifier Generation
The method-specific identifier is derived from the initial public key:
- Generate a cryptographic key pair (Ed25519, secp256k1, or P-256)
- Compute
SHA-256(publicKey) - Take the first 32 bytes (64 hex characters) as the identifier
- For AI agents, prefix with
agent:
2.3 Examples
3. DID Document
3.1 Structure
Every did:adi DID Document MUST conform to the W3C DID Core Data Model. The document is stored on the ADI blockchain via the DID Registry smart contract.
3.2 Verification Methods
The did:adi method supports the following verification key types:
3.3 Verification Relationships
4. CRUD Operations
4.1 Create (Register)
To create a new did:adi:
- Generate key pair: Client generates one or more cryptographic key pairs
- Compute DID:
did:adi:+ SHA-256(publicKey)[0:32].hex() - Construct DID Document: Build conformant document with verification methods
- Submit transaction: Call
DIDRegistry.registerDID(did, didDocumentHash, ipfsHash)on ADI blockchain - Store document: Upload full DID Document to IPFS, store hash on-chain
The transaction MUST be signed by the private key corresponding to the first authentication key in the DID Document.
4.2 Read (Resolve)
DID resolution returns the DID Document and metadata:
- Query on-chain: Call
DIDRegistry.resolveDID(did)to get document hash and storage URI - Fetch document: Retrieve full DID Document from IPFS using the storage URI
- Verify integrity: Confirm
SHA-256(document) == onChainHash - Return: DID Document + resolution metadata
Resolution metadata:
4.3 Update
To update a DID Document:
- Authenticate: Sign the update with a key listed in the current
authenticationrelationship - Modify document: Add/remove verification methods, update services, etc.
- Submit transaction: Call
DIDRegistry.updateDID(did, newDocumentHash, newStorageUri, signature) - Increment version: On-chain version counter increments automatically
Allowed updates:
4.4 Deactivate
Deactivation is permanent and irreversible:
- Authenticate: Sign with authentication key
- Submit transaction: Call
DIDRegistry.deactivateDID(did, signature) - On-chain state:
deactivatedflag set totrue - Resolution: Returns DID Document with
deactivated: true
After deactivation:
- The DID can still be resolved (returns deactivated document)
- No further updates are possible
- All VCs issued by this DID should be treated as suspect
- This satisfies GDPR right-to-erasure requirements
5. Security Considerations
5.1 Key Compromise
If a private key is compromised:
- Use a different authentication key (if multiple exist) to rotate the compromised key
- If all authentication keys are compromised, use the recovery key (stored separately)
- If no recovery is possible, the DID should be considered compromised
5.2 Recovery Mechanism
The did:adi method supports social recovery:
- A DID Document may include a
recoveryverification relationship - Recovery keys can be held by trusted parties (e.g., 3-of-5 multisig)
- Recovery replaces all authentication keys and requires on-chain transaction
5.3 Replay Protection
All on-chain transactions include:
- Nonce: Monotonically increasing per DID
- Chain ID: ADI chain identifier to prevent cross-chain replay
- Timestamp: Transaction timestamp for temporal ordering
5.4 Man-in-the-Middle
- DID resolution integrity is guaranteed by on-chain hash verification
- IPFS content addressing provides content integrity
- DIDComm messages are encrypted end-to-end with X25519
5.5 Quantum Resistance
The current key types (Ed25519, secp256k1) are not quantum-resistant. The specification anticipates future extension to post-quantum algorithms (e.g., CRYSTALS-Dilithium) as standards mature.
6. Privacy Considerations
6.1 Correlation
- Each
did:adiis globally unique and persistent, enabling correlation - For privacy-sensitive interactions, use pairwise DIDs (unique per relationship)
- BBS+ credentials enable selective disclosure without revealing the full DID
6.2 On-Chain Data
Only the following data is stored on-chain:
- DID string
- DID Document hash (SHA-256)
- IPFS storage URI
- Version counter
- Deactivation flag
- Timestamps
No personally identifiable information (PII) is stored on-chain.
6.3 Herd Privacy
DID resolution queries to ADI nodes may reveal which DIDs are being resolved. Mitigation:
- Use a trusted resolver service
- Batch resolution queries
- Future: Private information retrieval (PIR) techniques
7. Conformance
This DID method is designed to be conformant with:
8. Reference Implementation
The reference implementation is located at:
- DID Registry Smart Contract:
packages/blockchain/contracts/DIDRegistry.sol - DID Service:
packages/api/internal/did/ - DID Resolver:
packages/api/internal/resolver/