Loading vLEI.wiki
Fetching knowledge base...
Fetching knowledge base...
This comprehensive explanation has been generated from 33 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 data anchor is a cryptographic digest of digital data that serves dual purposes: uniquely identifying the data and providing a verifiable pointer to that data. In KERI/ACDC systems, data anchors enable cryptographic commitments to arbitrary data through content-addressable references.
A data anchor is a cryptographic digest (hash) of digital data that functions as both a unique identifier and a verifiable reference pointer to that data. The anchoring process involves computing a cryptographic digest of arbitrary data and embedding or referencing that digest within another data structure, creating a verifiable cryptographic commitment to the original data.
In the KERI/ACDC ecosystem, data anchors are fundamental primitives that enable:
The act of anchoring data consists of two operations:
This creates a verifiable cryptographic commitment where the digest serves as both:
Data anchors serve multiple critical functions in KERI-based systems:
In Key Event Logs (KELs): Non-establishment events (interaction events) use data anchors through to cryptographically bind external data to specific points in the key event sequence. This enables controllers to make verifiable, authoritative statements about external data without including the data directly in the KEL.
When implementing data anchors, choose hash algorithms based on:
Security Requirements:
Performance Needs:
Compliance Requirements:
When encoding data anchors in CESR:
Derivation Code Selection:
E, F, G, etc.) for human-readable formats0D, 0E, 0F, etc.) for efficient streamingEncoding Consistency:
Digest Computation:
# Pseudocode for data anchor verification
def verify_data_anchor(anchor, data, derivation_code):
# Extract hash algorithm from derivation code
algorithm = parse_derivation_code(derivation_code)
# Compute digest of provided data
computed_digest = algorithm.hash(data)
# Encode in CESR format
computed_anchor = derivation_code + base64_encode(computed_digest)
# Compare with provided anchor
return computed_anchor == anchor
Error Handling:
Anchor Storage:
In ACDCs: Data anchors enable the compact disclosure mechanism where field maps can be represented by their SAIDs (Self-Addressing Identifiers) rather than full content. This supports graduated disclosure privacy patterns while maintaining cryptographic verifiability.
In Transaction Event Logs (TELs): Data anchors bind credential state changes to the authoritative KEL, creating a verifiable chain of custody for credential lifecycle events.
Data anchors are classified as:
Data anchors in KERI utilize collision-resistant hash functions to ensure cryptographic security. The KERI protocol supports multiple hash algorithms through its derivation code system, including:
Blake3-256: A modern, high-performance cryptographic hash function providing:
SHA-256: The widely-adopted SHA-2 family hash providing:
SHA3-256: The Keccak-based SHA-3 standard providing:
Data anchors provide several critical security properties:
Collision Resistance: The computational infeasibility of finding two different inputs that produce the same digest. This ensures that each unique data item has a unique anchor, preventing ambiguity in data references.
Pre-image Resistance: Given a digest, it is computationally infeasible to find the original data that produced it. This property enables data anchors to serve as commitments without revealing the committed data.
Second Pre-image Resistance: Given data and its digest, it is computationally infeasible to find different data that produces the same digest. This prevents substitution attacks where an attacker might try to replace anchored data with malicious content.
Deterministic Output: The same input data always produces the same digest, ensuring consistency in data references across different systems and time periods.
Avalanche Effect: Small changes in input data produce completely different digests, making tampering immediately evident through digest comparison.
Data anchor digest sizes in KERI are determined by the chosen hash algorithm:
256-bit digests (32 bytes):
512-bit digests (64 bytes):
When encoded in CESR format, data anchors include a derivation code prefix that identifies the hash algorithm used, adding 1-2 characters to the total length.
Data anchors in KERI are encoded using CESR (Composable Event Streaming Representation), which provides dual text-binary encoding with composability properties. A CESR-encoded data anchor consists of:
Derivation Code: A prefix that identifies:
Digest Value: The actual hash output encoded in:
Text Domain Example (Blake3-256):
EAdXt3gIXOf2BBWNHdSXCJnFJL5OuQPyM5K0neuniccM
Breakdown:
E: Derivation code for Blake3-256 in text domainAdXt3gIXOf2BBWNHdSXCJnFJL5OuQPyM5K0neuniccM: Base64-encoded 256-bit digestBinary Domain: The same digest in binary domain would use a different derivation code and raw byte encoding, maintaining the same semantic meaning while optimizing for binary streaming.
Common derivation codes for data anchors include:
Text Domain:
E: Blake3-256 digestF: Blake2b-256 digestG: Blake2s-256 digestH: SHA3-256 digestI: SHA2-256 digestBinary Domain:
0D: Blake3-256 digest0E: Blake2b-256 digest0F: Blake2s-256 digest0G: SHA3-256 digest0H: SHA2-256 digestThe derivation code system enables:
Data anchors appear in KELs through seal mechanisms within interaction events. The seal structure includes:
Seal Types:
Interaction Event Structure:
{
"v": "KERI10JSON00011c_",
"t": "ixn",
"d": "EL1L56LyoKrIofnn0oPChS4EyzMHEEk75INJohDS_Bug",
"i": "EBkPreYpZfFk66jpf3uFv7vklXKhzBrAqjsKAn2EDIPM",
"s": "2",
"p": "EAdXt3gIXOf2BBWNHdSXCJnFJL5OuQPyM5K0neuniccM",
"a": [
{
"d": "EFH3dCdoFOLe71iheqcywJcnjtJtQIYPvAu6DZIl3MOA"
}
]
}
In this structure:
a (anchors) field contains seal objectsd field is a data anchor (digest) of external dataData anchors enable ACDC's sophisticated disclosure mechanisms:
Compact Variant: Field maps are represented by their SAIDs:
{
"v": "ACDC10JSON00011c_",
"d": "EAdXt3gIXOf2BBWNHdSXCJnFJL5OuQPyM5K0neuniccM",
"i": "EBkPreYpZfFk66jpf3uFv7vklXKhzBrAqjsKAn2EDIPM",
"s": "ED6jrVPTzlSkUPqGGeIZ8a8FWS7a6s4reAXRZOkogZ2A",
"a": "EEveY4-9XgOcLxUderzwLIr9Bf7V_NHwY1lkFrn9y2PY"
}
The a field contains a data anchor (SAID) of the attribute section rather than the full attributes, enabling:
Full Variant: The same ACDC with expanded attributes:
{
"v": "ACDC10JSON00011c_",
"d": "EAdXt3gIXOf2BBWNHdSXCJnFJL5OuQPyM5K0neuniccM",
"i": "EBkPreYpZfFk66jpf3uFv7vklXKhzBrAqjsKAn2EDIPM",
"s": "ED6jrVPTzlSkUPqGGeIZ8a8FWS7a6s4reAXRZOkogZ2A",
"a": {
"d": "EEveY4-9XgOcLxUderzwLIr9Bf7V_NHwY1lkFrn9y2PY",
"name": "John Doe",
"role": "Developer"
}
}
The d field within the attribute block is the same data anchor, proving the expanded content matches the compact reference.
Credential Issuance: When issuing an ACDC credential, the issuer:
Data Provenance: Controllers use data anchors to create verifiable chains:
Multi-Party Workflows: Data anchors enable coordination:
Verifying data anchors involves:
Step 1: Extract the anchor
Step 2: Obtain the anchored data
Step 3: Recompute the digest
Step 4: Compare digests
Step 5: Verify signatures
SAIDs are a specialized form of data anchor where the digest is embedded within the data being digested. This creates a self-referential, content-addressable identifier. The relationship:
Seals are the mechanism by which data anchors are embedded in key events. The relationship:
Digests are the raw cryptographic hash outputs. The relationship:
Merkle tree roots are specialized data anchors that commit to multiple data items:
Hierarchical Anchoring: Data anchors can reference other data anchors, creating chains:
Event A → Anchor(Data B) → Anchor(Data C) → Anchor(Data D)
Multi-Anchor Seals: Single events can contain multiple data anchors:
{
"a": [
{"d": "EAnchor1..."},
{"d": "EAnchor2..."},
{"d": "EAnchor3..."}
]
}
Cross-KEL Anchoring: Data anchors enable references between different identifiers' KELs, creating verifiable inter-identifier relationships without requiring shared infrastructure.
The KERI documentation explicitly warns against confusing cryptographic data anchors with HTML anchor elements. The distinction:
HTML Anchors: Web navigation constructs that create clickable links within documents. These are purely presentational and provide no cryptographic security.
Cryptographic Data Anchors: Cryptographic commitments that provide integrity verification, content-addressability, and tamper-evidence. These are fundamental security primitives.
This disambiguation is critical because the term "anchor" appears in both web development and cryptographic contexts with entirely different meanings and security properties.
Data Retrieval:
Collision Resistance:
Pre-image Protection:
Timing Attacks:
Cross-System Anchoring:
Version Management:
Batch Processing:
Caching Strategies:
Test Vectors:
Edge Cases:
Implementation Documentation:
API Design: