Loading vLEI.wiki
Fetching knowledge base...
Fetching knowledge base...
This comprehensive explanation has been generated from 130 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.
Compact disclosure is a privacy-preserving mechanism in ACDCs where field maps are represented by their SAIDs (Self-Addressing Identifiers) rather than their full content, enabling cryptographic commitments to data without revealing it, forming the foundation for both partial and selective disclosure patterns.
Compact disclosure is a fundamental disclosure mechanism in the ACDC (Authentic Chained Data Container) specification that enables privacy-preserving credential presentations by representing field maps through their SAIDs (Self-Addressing Identifiers) rather than exposing full content. This mechanism provides cryptographic commitments to undisclosed data while maintaining verifiability, serving as the architectural foundation for ACDC's graduated disclosure capabilities.
The process accomplishes several critical objectives:
Compact disclosure is used throughout the ACDC lifecycle:
Use Canonical Serialization: Always serialize field maps in insertion order before computing SAIDs. Different field orderings will produce different SAIDs, breaking verification.
Recursive Computation: When computing SAIDs for nested structures, compute inner SAIDs first, then replace nested field maps with their SAIDs before computing outer SAIDs.
Hash Algorithm Consistency: Use the same hash algorithm (typically Blake3-256) for all SAIDs within an ACDC. The derivation code in the SAID indicates which algorithm was used.
Sign Compact Forms: Issuers should sign the most compact or fully compact variant. This signature commits to all variants because they share the same top-level SAID structure.
Verify Before Trusting: Always verify the Issuer's signature on compact ACDCs before trusting the SAIDs. A valid signature proves the Issuer committed to those specific SAIDs.
Key State Lookup: Retrieve the Issuer's current public key from their KEL (Key Event Log) using the Issuer AID field (i) in the ACDC.
Pre-compute SAIDs: Compute all SAIDs during credential issuance, not during disclosure. Store both compact and expanded forms.
Implement SAID Registries: Maintain registries or caches where full content can be retrieved by SAID. This enables efficient expansion when verifiers request full disclosure.
Cache Verification Results: Cache signature verification results for compact ACDCs to avoid redundant cryptographic operations.
SAID Mismatch: If expanded content's computed SAID doesn't match the previously disclosed SAID, reject the expansion as invalid or tampered.
Missing SAIDs: If a compact ACDC references a SAID that cannot be resolved, either request full disclosure or reject the credential.
Signature Failures: If signature verification fails on a compact ACDC, reject the credential immediately - do not attempt expansion.
Key participants in compact disclosure include:
The compact disclosure process begins with a fully structured ACDC containing multiple field maps (sections). According to Document 3, an ACDC consists of:
Each section that supports compact disclosure has two possible representations:
For each field map that will be compacted, a SAID must be computed. Document 7 demonstrates this process:
H(a) = H(
b = N,
c = H(c), # recurse
g = Q,
i = H(i) # recurse
) = SAID
The SAID computation is recursive: nested field maps are first replaced by their own SAIDs before computing the parent SAID. This creates a hash tree structure where:
Critical property: The SAID computation produces identical results whether computed from the fully expanded form or the partially compact form, as demonstrated in Document 7:
Fully Expanded: H(b=N, c=H(d=M, e=O, f=P), g=Q, i=H(j=R, k=S)) = SAID
Partially Compact: H(b=N, c=H(c), g=Q, i=H(i)) = SAID
Fully Compact: H(a) = SAID
All three representations produce the same SAID, ensuring cryptographic equivalence.
The Discloser constructs the compact variant by replacing selected field maps with their SAIDs. Document 3 specifies that the value of a top-level section field can be either:
For example, a fully expanded ACDC might have:
{
"v": "ACDC10JSON00011c_",
"d": "EAdXt3gIXOf2BBWNHdSXCJnFJL5OuQPyM5K0neuniccM",
"i": "did:keri:EBkPreYpZfFk66jpf3uFv7vklXKhzBrAqjsKAn2EDIPM",
"s": {
"$id": "ED6jrVPTzlSkUPqGGeIZ8a8FWS7a6s4reAXRZOkogZ2A",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {...}
},
"a": {
"d": "EEveY4-9XgOcLxUderzwLIr9Bf7V_NHwY1lkFrn9y2PY",
"i": "did:keri:EpZfFk66jpf3uFv7vklXKhzBrAqjsKAn2EDI",
"dt": "2024-01-15T10:30:00Z",
"LEI": "254900OPPU84GM83MG36"
}
}
The compact variant replaces the full attribute block with its SAID:
{
"v": "ACDC10JSON00011c_",
"d": "EAdXt3gIXOf2BBWNHdSXCJnFJL5OuQPyM5K0neuniccM",
"i": "did:keri:EBkPreYpZfFk66jpf3uFv7vklXKhzBrAqjsKAn2EDIPM",
"s": "ED6jrVPTzlSkUPqGGeIZ8a8FWS7a6s4reAXRZOkogZ2A",
"a": "EEveY4-9XgOcLxUderzwLIr9Bf7V_NHwY1lkFrn9y2PY"
}
Document 3 establishes a critical property: An Issuer commitment via a signature to any variant of ACDC (compact, full, etc) makes a cryptographic commitment to the top-level section fields shared by all variants.
This means:
The verification process:
1. Extract Issuer AID from compact ACDC
2. Retrieve Issuer's current public key from KEL
3. Verify signature on compact ACDC
4. Confirm top-level SAID matches computed digest
5. Accept compact disclosure as valid
When the Discloser later provides expanded content, the Disclosee can verify consistency:
1. Receive expanded field map (e.g., full attributes block)
2. Compute SAID of expanded content
3. Compare computed SAID to previously disclosed SAID
4. If match: expanded content is authentic
5. If mismatch: reject as tampered or incorrect
Document 7 demonstrates this property: "The recipient can verify the expansion is authentic by recomputing the SAID and confirming it matches the original compact representation."
SAID Algorithm Consistency: All SAIDs within an ACDC must use consistent cryptographic hash functions. Document 3 specifies that SAIDs must provide approximately 128 bits of cryptographic strength.
Canonical Serialization: Document 3 mandates insertion-ordered field maps for canonical serialization. This requirement is critical because:
Signature Binding: The Issuer's signature must bind to the compact variant's top-level structure. Document 12 explains: "The signature on the compact form provides integrity proof for the entire tree."
Recursive SAID Computation: Nested structures require recursive SAID computation where inner SAIDs are computed before outer SAIDs, as shown in Document 7.
Pre-computation: SAIDs should be computed during credential issuance, not during disclosure. This ensures:
Caching: Implementations should cache computed SAIDs to avoid redundant hash operations. Document 3 notes that SAID computation can be computationally intensive for large structures.
Verification Latency: Compact disclosure verification is faster than full disclosure because:
SAID Mismatch: If an expanded field map's computed SAID doesn't match the previously disclosed SAID:
ERROR: SAID mismatch detected
Expected: EEveY4-9XgOcLxUderzwLIr9Bf7V_NHwY1lkFrn9y2PY
Computed: EXyzABC123...
Action: Reject expanded content as invalid
ERROR: Unresolvable SAID reference
SAID: EEveY4-9XgOcLxUderzwLIr9Bf7V_NHwY1lkFrn9y2PY
Action: Request full disclosure or reject credential
Signature Verification Failure: If the Issuer's signature doesn't verify on the compact form:
ERROR: Invalid Issuer signature
Issuer AID: did:keri:EBkPreYpZfFk66jpf3uFv7vklXKhzBrAqjsKAn2EDIPM
Action: Reject credential as unverifiable
Scenario: A credential holder presents proof of credential possession without revealing details.
Implementation:
{
"v": "ACDC10JSON00011c_",
"d": "EAdXt3gIXOf2BBWNHdSXCJnFJL5OuQPyM5K0neuniccM",
"i": "did:keri:EBkPreYpZfFk66jpf3uFv7vklXKhzBrAqjsKAn2EDIPM",
"s": "ED6jrVPTzlSkUPqGGeIZ8a8FWS7a6s4reAXRZOkogZ2A",
"a": "EEveY4-9XgOcLxUderzwLIr9Bf7V_NHwY1lkFrn9y2PY",
"e": "EFH3dCdoFOLe71iheqcywJcnjtJtQIYPvAu6DZIl3MOA"
}
Benefits:
Scenario: An ACDC references another ACDC through an edge without exposing the referenced credential's content.
Document 57 demonstrates this pattern in vLEI credentials:
{
"e": {
"d": "EMsSqaJsthSBA4OINZ1_fxfNVkgEPF-Sg5fq-vXM7Z6b",
"auth": {
"n": "EKA57bKBKxr_kN7iN5i7lMUxpMG-s19dRcmov1iDxz-E",
"s": "EKA57bKBKxr_kN7iN5i7lMUxpMG-s19dRcmov1iDxz-E"
}
}
}
The n field contains the SAID of the authorization credential, creating a verifiable chain without exposing the authorization credential's content.
Scenario: Multi-stage credential presentation with increasing disclosure levels.
Stage 1 - Compact Disclosure:
{"a": "EEveY4-9XgOcLxUderzwLIr9Bf7V_NHwY1lkFrn9y2PY"}
Stage 2 - Partial Disclosure (after agreement to terms):
{
"a": {
"d": "EEveY4-9XgOcLxUderzwLIr9Bf7V_NHwY1lkFrn9y2PY",
"i": "did:keri:EpZfFk66jpf3uFv7vklXKhzBrAqjsKAn2EDI",
"dt": "2024-01-15T10:30:00Z",
"personal": "EXyzABC123..."
}
}
Stage 3 - Full Disclosure (after contractual protections):
{
"a": {
"d": "EEveY4-9XgOcLxUderzwLIr9Bf7V_NHwY1lkFrn9y2PY",
"i": "did:keri:EpZfFk66jpf3uFv7vklXKhzBrAqjsKAn2EDI",
"dt": "2024-01-15T10:30:00Z",
"personal": {
"legalName": "Alice Smith",
"birthDate": "1990-05-15"
}
}
}
Scenario: Large schema definitions that don't need to be transmitted repeatedly.
Document 3 shows that schemas can be compacted:
{
"s": "ED6jrVPTzlSkUPqGGeIZ8a8FWS7a6s4reAXRZOkogZ2A"
}
Verifiers can:
1. Compute SAIDs at Issuance: Pre-compute all SAIDs during credential creation to ensure consistency and avoid runtime errors.
2. Maintain SAID Registries: Implement registries or caches where full content can be retrieved by SAID, enabling efficient expansion when needed.
3. Use Compact Forms for Initial Presentations: Start with compact disclosure and progressively expand based on verifier requirements and trust development.
4. Validate Expansions: Always verify that expanded content matches the previously disclosed SAID before accepting it as authentic.
5. Document Disclosure Policies: Clearly specify which fields support compact disclosure and under what conditions they will be expanded.
IPEX Protocol Integration: Document 14 specifies that compact disclosure integrates with IPEX (Issuance and Presentation Exchange) for credential exchanges:
Discloser -> [Compact ACDC] -> Disclosee
Disclosee -> [Request Expansion] -> Discloser
Discloser -> [Expanded Content] -> Disclosee
KEL Anchoring: Compact ACDCs must be anchored to the Issuer's KEL (Key Event Log) to enable signature verification. Document 3 notes that the Issuer AID field (i) references the KEL for key state lookup.
TEL Integration: Document 23 explains that Transaction Event Logs (TELs) track credential status (issuance/revocation). Compact ACDCs reference TELs through the registry identifier (ri) field.
Storage Optimization: Compact forms significantly reduce storage requirements. Document 12 notes that compact ACDCs can be 10-100x smaller than fully expanded forms, depending on attribute complexity.
Compact disclosure serves as the foundation for two other disclosure mechanisms:
Partial Disclosure: Document 2 defines partial disclosure as "a disclosure of an ACDC that partially discloses its field maps using Compact Disclosure." Partial disclosure builds on compact disclosure by:
Selective Disclosure: Document 4 defines selective disclosure as using "Compact Disclosure with an array of blinded blocks." Selective disclosure extends compact disclosure by:
Both mechanisms rely on compact disclosure's core property: representing field maps by their SAIDs provides cryptographic commitments without revealing content.
Rainbow Table Attacks: Document 36 warns that compact disclosure alone may be vulnerable to rainbow table attacks if attribute values are predictable. The solution is to include UUID fields (u) that add high-entropy nonces, making pre-computation attacks infeasible.
Correlation Risks: Compact disclosure of the same SAID across multiple presentations creates correlation opportunities. Document 9 recommends using selective disclosure when correlation resistance is required.
Timing Attacks: SAID computation timing may leak information about content size or complexity. Implementations should use constant-time operations where possible.
Signature Verification: Always verify the Issuer's signature on compact forms before trusting the SAIDs. A valid signature proves the Issuer committed to those specific SAIDs, preventing substitution attacks.
Add UUID Fields: Include high-entropy UUID fields (u) in ACDCs to prevent rainbow table attacks on predictable attribute values.
Avoid SAID Reuse: Don't disclose the same SAID across multiple contexts if correlation resistance is required. Use selective disclosure instead.
Timing Attacks: Use constant-time operations for SAID computation where possible to prevent timing-based information leakage.
IPEX Protocol: Compact disclosure integrates with IPEX for credential exchanges. Implement request/response flows for progressive expansion.
TEL References: Compact ACDCs reference Transaction Event Logs (TELs) through the registry identifier (ri) field for credential status checking.
Schema Validation: Validate compact ACDCs against their schemas even when attributes are compacted. The schema SAID (s) enables schema lookup and validation.
Lazy Expansion: Only expand compact field maps when explicitly requested by verifiers. Keep compact forms in memory/storage.
Batch SAID Computation: When issuing multiple credentials, batch SAID computations to amortize cryptographic operation costs.
Parallel Verification: Signature verification and SAID computation can be parallelized for ACDCs with multiple compact sections.
Round-Trip Testing: Verify that compact -> expand -> compact cycles produce identical SAIDs.
Cross-Variant Testing: Ensure signatures verify correctly on compact, partial, and full variants of the same ACDC.
Expansion Validation: Test that expanded content always matches its compact SAID representation.
Error Case Testing: Verify proper handling of SAID mismatches, signature failures, and missing SAID references.