Loading vLEI.wiki
Fetching knowledge base...
Fetching knowledge base...
This comprehensive explanation has been generated from 13 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.
The NI2I (Not-Issuer-To-Issuee) operator is one of three primary edge operators defined in the ACDC specification for establishing logical relationships between chained credentials within a directed acyclic graph (DAG) structure. Unlike the restrictive I2I operator that enforces strict issuer-issuee identity constraints, or the DI2I operator that permits delegated authority, NI2I represents the most permissive edge operator, allowing any AID to reference another ACDC regardless of the relationship between the issuer and the referenced credential's issuee.
The fundamental purpose of NI2I is to enable referential linking where one credential needs to cite, reference, or provide context from another credential without claiming or implying any delegated authority from the referenced credential. This operator is essential for use cases where credentials need to:
According to Document 2, "NI2I allows any identifier to chain a child credential to a parent credential, regardless of whether the issuer has any relationship to the parent credential's issuee. This operator is used for referencing, associating, or linking to another ACDC for context or supporting information without implying delegated authority."
The NI2I operator is formally defined within the ACDC specification maintained by the Trust Over IP Foundation's Technical Stack Working Group. As documented in Document 3 and Document 4, the ACDC specification is currently at version 0.9 Draft status and defines edge operators as part of the broader ACDC edge section specification.
The operator is implemented in the reference implementation KERIpy and is intended for use through the KERI Command Line Interface (KLI) and KERIA agent systems.
IMPORTANT: According to Document 13, there is a blocking bug affecting NI2I operator functionality:
"The command line interface hangs indefinitely during execution when attempting to create a chained credential that utilizes the NI2I (Not-Issuer-To-Issuee) operator. Log messages are displayed but the operation never completes. No workaround is currently available. The issue is tracked in GitHub issue #1040 in the keripy repository."
Document 1 explicitly states: "the NI2I operator does not work due to a bug" and advises "For now you can skip this notebook." This represents a critical limitation for production use cases requiring NI2I functionality as of the documentation date.
The NI2I operator functions within the edge section (e field) of an ACDC, which is one of the top-level optional fields in the ACDC structure. According to Document 4, the edge section enables ACDCs to form labeled property graphs where:
The edge section can appear in multiple forms:
e field contains only the SAID of the edge sectione field contains the full edge section as a nested field mapEdge operators in ACDC form a hierarchy of constraint levels:
As Document 2 explains:
"NI2I is the most permissive operator. It allows any identifier to chain a child credential to a parent credential, regardless of whether the issuer has any relationship to the parent credential's issuee."
Edge operators can be combined using logical operators (AND, OR, NOT) to create complex authorization logic, though NI2I's permissive nature means it is typically used standalone for simple referential links.
The data flow for NI2I-linked credentials follows this pattern:
Critically, the child issuer has no authority relationship with the parent credential - they are simply creating a verifiable reference to it.
The edge section in an ACDC follows the standard ACDC field map structure with specific fields for defining edges. According to Document 4, the edge section is a top-level field map that can contain:
The NI2I operator is encoded as a string value within the edge definition. Based on the tutorial examples in Document 1 and Document 2, the edge section structure for NI2I follows this pattern:
{
"e": {
"d": "<SAID of edge section>",
"<edge_name>": {
"n": "<SAID of referenced parent ACDC>",
"o": "NI2I"
}
}
}
Where:
e: Top-level edge section fieldd: SAID of the edge section itself (for compact disclosure)<edge_name>: A semantic label for the edge (e.g., "trainingCourse", "supportingEvidence")n: The SAID of the parent ACDC being referencedo: The operator field, set to the string "NI2I"Document 1 provides a conceptual example of an ACDC using NI2I to reference an external training course credential:
{
"v": "ACDC10JSON00011c_",
"d": "<SAID of this ACDC>",
"i": "<Company AID>",
"ri": "<Registry SAID>",
"s": "<Schema SAID>",
"a": {
"d": "<SAID of attributes>",
"employeeId": "EMP-12345",
"skillName": "Advanced Data Analysis",
"certificationDate": "2024-01-15"
},
"e": {
"d": "<SAID of edge section>",
"trainingCourse": {
"n": "<SAID of Training Provider's Course Completion ACDC>",
"o": "NI2I"
}
},
"r": {
"d": "<SAID of rules section>",
"usagePolicy": "This certification is valid for internal company purposes only."
}
}
In this structure:
All ACDC fields, including edge sections, must be expressible in CESR (Composable Event Streaming Representation) format. According to Document 5, CESR provides:
The NI2I operator string and associated SAIDs are encoded as CESR primitives, ensuring they can be transmitted in both text (JSON) and binary (CBOR, MessagePack) serializations while maintaining cryptographic verifiability.
The process of creating an ACDC with an NI2I edge involves several steps, as documented in Document 1:
n fieldo fieldd fieldWhen a verifier receives an ACDC with an NI2I edge, the verification process includes:
Child ACDC Verification:
Edge Section Verification:
n fieldParent ACDC Retrieval and Verification:
NI2I Constraint Validation:
As Document 2 emphasizes:
"With NI2I, there is no requirement for the issuer of the child credential to have any relationship with the issuee of the parent credential. This makes NI2I suitable for scenarios where one party wants to reference or link to another credential for informational or contextual purposes, without claiming any authority derived from that credential."
NI2I edges are stateless references - they do not create or modify state in either the parent or child ACDC. The relationship is purely referential:
The only temporal requirement for NI2I edges is that the parent ACDC must exist before the child ACDC is created, since the child needs the parent's SAID to construct the edge reference. However:
The NI2I operator's permissive nature creates specific security considerations:
Since NI2I permits any issuer to reference any ACDC, malicious actors could:
Mitigation: These attacks are mitigated through:
NI2I edges rely on SAID-based references, which provide:
NI2I provides these security guarantees:
NI2I edges resist several attack vectors:
An attacker attempting to create a malicious ACDC with the same SAID as a legitimate parent would need to:
NI2I edges are not vulnerable to replay attacks because:
NI2I references are resistant to MITM attacks because:
NI2I edges have specific privacy implications:
NI2I edges create explicit correlation points between credentials:
Mitigation strategies:
The mere existence of an NI2I edge reveals:
This information leakage must be considered in privacy-sensitive applications.
NI2I is deeply integrated with the broader KERI/ACDC protocol stack:
NI2I can be combined with other edge operators using logical composition:
Multiple edges with different operators can coexist:
{
"e": {
"d": "<edge section SAID>",
"parentCredential": {
"n": "<parent SAID>",
"o": "I2I"
},
"supportingEvidence": {
"n": "<evidence SAID>",
"o": "NI2I"
}
}
}
This structure requires:
parentCredential (I2I constraint)supportingEvidence without relationship constraints (NI2I)Edge operators can be composed with OR logic for flexible authorization:
{
"o": {
"OR": [
{"o": "I2I"},
{"o": "NI2I"}
]
}
}
This allows either direct authority (I2I) or referential linking (NI2I).
NI2I is used in several KERI ecosystem contexts:
The vLEI ecosystem, managed by GLEIF, uses edge operators including NI2I for:
As Document 9 notes, the vLEI implementation demonstrates sophisticated use of ACDC edge operators in a production ecosystem.
The Signify client libraries and KERIA agent system provide infrastructure for NI2I operations:
However, as noted in Document 13, the current implementation has blocking bugs affecting NI2I functionality.
When designing ACDC schemas that support NI2I edges, implementers should:
Document 7 provides detailed examples of schema design with edge sections, showing how oneOf composition operators enable multiple variants.
Implementers of ACDC verifiers must:
NI2I edges have performance implications:
Each NI2I edge requires:
For ACDCs with multiple NI2I edges, this can create significant verification latency.
Optimization strategies:
NI2I edges increase ACDC size:
For resource-constrained environments, consider:
Implementers must handle several error conditions:
Given the current bug status (Document 13), implementers should:
NI2I usage should be governed by ecosystem-specific rules:
The vLEI Ecosystem Governance Framework provides a model for such governance structures.
The key differences between NI2I and I2I:
| Aspect | I2I | NI2I |
|---|---|---|
| Constraint | Issuer of child MUST be issuee of parent | No relationship required |
| Authority | Implies delegated authority | No authority transfer |
| Use Case | Delegation chains | Referential linking |
| Verification | Must verify issuer-issuee match | Only verify cryptographic properties |
| Trust Model | Transitive trust | Independent trust |
As Document 2 explains:
"I2I enforces a strict constraint: the issuer of a child credential MUST be the issuee (subject) of the parent credential. This creates a direct chain of authority... NI2I, in contrast, allows any identifier to chain a child credential to a parent credential, regardless of whether the issuer has any relationship to the parent credential's issuee."
The key differences between NI2I and DI2I:
| Aspect | DI2I | NI2I |
|---|---|---|
| Constraint | Issuer must be root AID or delegate of parent's issuee | No relationship required |
| Authority | Permits delegated authority | No authority transfer |
| Use Case | Scalable delegation trees | Referential linking |
| Verification | Must verify delegation chain | Only verify cryptographic properties |
| Complexity | Moderate (delegation verification) | Low (simple reference) |
Document 2 notes:
"DI2I extends the strict I2I constraint to include formally recognized delegates, enabling security, flexibility, and scalability through the single responsibility pattern and reduced exposure of parent AID signing keys."
NI2I, by contrast, imposes no delegation requirements whatsoever.
The primary use case demonstrated in Document 1 involves a company issuing skill certifications that reference external training courses:
Scenario:
This demonstrates NI2I's value for:
NI2I enables credentials to reference supporting documentation:
In each case, the issuer maintains independent authority while providing verifiable references to supporting evidence.
NI2I can link credentials to contextual information:
These links provide context without implying that the referenced credentials grant authority for the linking credential.
NI2I enables credentials from one ecosystem to reference credentials from another:
This cross-ecosystem linking is particularly valuable in scenarios where different governance frameworks operate independently but need to reference each other's credentials.
The NI2I operator's development and adoption will likely evolve in several directions:
The immediate priority is resolving the blocking bug documented in Document 13. Once GitHub issue #1040 is resolved, NI2I will become practically usable in production systems.
As NI2I usage grows, ecosystems will likely develop:
Future developments may include:
As the KERI ecosystem matures, expect:
Governance frameworks like the vLEI EGF will likely:
BLOCKING BUG: As of the documentation date, NI2I operator functionality is non-functional due to a bug in KERIpy (GitHub issue #1040). The kli vc create command hangs indefinitely when attempting to create credentials with NI2I edges. No workaround is currently available. Implementers should:
When creating ACDC schemas that support NI2I edges:
e field in the schema with nested field maps for each edgeo field that can accept "NI2I" as a valuen field for the parent ACDC's SAIDoneOf operators to support both compact and expanded formsVerifiers must implement the following logic for NI2I edges:
e fieldo field for "NI2I" operator valuen field to fetch the referenced parentNI2I edges can create verification overhead. Optimize by:
Implement robust error handling for:
When deploying NI2I in production ecosystems:
Given the current bug status: