Loading vLEI.wiki
Fetching knowledge base...
Fetching knowledge base...
This comprehensive explanation has been generated from 38 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 KERIA-agent is an instance of a keystore (Hab) that runs within the KERIA (KERI Agent in the cloud) server, providing cloud-based agent services for managing Autonomic Identifiers (AIDs) and their associated cryptographic operations while maintaining strict separation of private key material from the cloud infrastructure through edge-based signing.
A KERIA-agent represents a fundamental architectural component in the KERI ecosystem, specifically within the KERIA (KERI Agent in the cloud) server implementation. Written in Python as part of the KERIpy codebase, a KERIA-agent is technically an instance of a keystore called a Hab (short for "Habitat") that executes within a KERIA server instance.
The KERIA-agent architecture implements a critical security pattern: edge-based signing. This design ensures that while the agent provides cloud-based services for AID management, credential operations, and witness coordination, it never has access to the decryption keys needed to access private key material. All signing operations occur at the client edge using Signify libraries (SignifyTS or SignifyPy), with the KERIA-agent handling operational tasks like KEL management, ACDC storage, and message routing.
Multiple KERIA-agents are managed within a Habery collection, which serves as the container for agent instances. Each agent maintains its own isolated keystore using (Lightning Memory-Mapped Database) for persistent storage of key material (encrypted), , , and credential data.
The fundamental security guarantee of KERIA-agents is separation of signing authority from operational management. Private keys are:
The agent stores encrypted key material but never has access to decryption keys, which are derived from the client's passcode and never transmitted.
KERIA-agents implement cooperative delegation where:
This enables custodial key management while preserving ultimate client control.
All KERIA operations follow an asynchronous pattern:
client.operations().wait(op)client.operations().delete(op)This accommodates network latency for witness communication and multi-signature coordination.
A single KERIA server hosts multiple independent agents:
KERIA-agents automatically coordinate with witnesses:
Witness configuration is per-agent, allowing different security profiles.
KERIA-agents use LMDB for persistence:
KERIA implements a multi-tenant server architecture where a single KERIA instance can host multiple independent agents, each serving different controllers. This design enables:
KERIA-agents are accessed through three distinct HTTP interfaces, each serving specific security boundaries:
1. Boot Interface (default port 3903): Handles initial agent provisioning through the /boot endpoint. This interface:
2. Admin Interface (default port 3901): Provides the REST API for command and control operations from Signify clients. All requests must:
3. KERI Protocol Interface (default port 3902): Implements CESR over HTTP for protocol-level interactions:
This separation allows network-level security controls where administrators can expose interfaces to different network zones based on operational requirements.
The KERIA-agent implements KERI's cooperative delegation mechanism, creating a Client AID (delegator) to Agent AID (delegate) relationship:
This model enables custodial rotation patterns where users can "fire" a custodial agent at any time by rotating to new keys, even without the agent's cooperation, because the client retains exclusive rotation authority.
Each KERIA-agent maintains complete KEL (Key Event Log) infrastructure:
KERIA-agents provide comprehensive ACDC (Authentic Chained Data Container) credential management:
Issuance Operations:
Storage and Retrieval:
Revocation Management:
KERIA-agents implement mailbox functionality for asynchronous communication:
KERIA-agents provide state notifications using plain SADs (Self-Addressing Data structures):
KERIA-agents are typically deployed using Docker containers. The standard deployment pattern involves:
1. Pull KERIA Image:
docker pull gleif/keria:latest
2. Configuration File: Create a JSON configuration file specifying:
3. Start KERIA Server:
keria start --config-dir /path/to/config --config-file keria --loglevel INFO
For development and testing, Document 3 demonstrates launching bank-specific KERIA instances:
docker run -d --name bank_1_keria \
-p 3901:3901 -p 3902:3902 -p 3903:3903 \
ronakseth96/keria:TestBank_1
For local development without Docker:
1. Install KERIpy:
pip install keripy==1.1.32
2. Initialize Witness Network (for testing):
kli witness demo
3. Start KERIA:
keria start --config-dir ./scripts --config-file keria --loglevel INFO
Once KERIA is running, agents are provisioned through the Boot Interface using the SKRAP (Signify/KERIA Request Authentication Protocol) initialization process:
Step 1: Generate Client AID (client-side using Signify):
import { randomPasscode, SignifyClient, Tier } from 'signify-ts';
const bran = randomPasscode();
const client = new SignifyClient(
'http://keria:3901', // Admin URL
bran,
Tier.low,
'http://keria:3903' // Boot URL
);
Step 2: Boot Agent:
await client.boot();
This creates the Client AID and submits the signed inception event to the Boot Interface.
Step 3: Connect and Create Agent AID:
await client.connect();
This establishes the cooperative delegation relationship, creating the Agent AID as a delegate of the Client AID.
KERIA-agents create new AIDs through the Admin Interface API:
const result = await client.identifiers().create('myAlias', {
toad: 3, // Threshold of Accountable Duplicity
wits: [ // Witness AIDs
'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha',
'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM',
'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX'
]
});
const op = await result.op();
await client.operations().wait(op);
const aid = await client.identifiers().get('myAlias');
The agent handles:
Clients must explicitly authorize the Agent AID to act on their behalf using end roles:
const result = await client.identifiers().addEndRole(
'myAlias', // Client AID alias
'agent', // Role type
agentAID, // Agent AID prefix
timestamp // ISO-8601 timestamp
);
const op = await result.op();
await client.operations().wait(op);
This creates an interaction event in the Client AID's KEL that explicitly grants the Agent AID permission to perform operations.
KERIA-agents support full ACDC credential issuance workflows:
1. Create Registry:
const registryResult = await client.registries().create({
name: 'myAlias',
registryName: 'vLEI'
});
const regOp = await registryResult.op();
await client.operations().wait(regOp);
2. Issue Credential:
const credentialData = {
LEI: '254900OPPU84GM83MG36'
};
const result = await client.credentials().issue(
'myAlias',
registryName,
schemaId,
recipientAID,
credentialData
);
const credOp = await result.op();
await client.operations().wait(credOp);
The agent:
KERIA-agents resolve OOBIs (Out-Of-Band Introductions) to discover and verify remote AIDs:
const oobi = 'http://witness:5642/oobi/EABc123.../witness/EBBd456...';
const result = await client.oobis().resolve(oobi, 'remoteAlias');
const oobiOp = await result.op();
await client.operations().wait(oobiOp);
The agent:
KERIA-agents participate in key rotation through the cooperative delegation model:
const result = await client.identifiers().rotate('myAlias');
const rotOp = await result.op();
await client.operations().wait(rotOp);
The rotation process:
Critically, the agent cannot initiate rotation without client participation, preserving the client's ultimate control authority.
KERIA-agents provide key state queries:
const keyState = await client.keyStates().get(aidPrefix);
console.log('Sequence number:', keyState.s);
console.log('Current keys:', keyState.k);
console.log('Next key digests:', keyState.n);
console.log('Witnesses:', keyState.b);
This retrieves the current authoritative key state from the agent's KEL storage.
KERIA-agents are designed to work with Signify client libraries that implement edge-based signing:
SignifyTS: TypeScript/JavaScript implementation for:
SignifyPy: Python implementation for:
Both libraries implement the same SKRAP protocol for communicating with KERIA-agents.
While KERIA is the primary cloud agent implementation, the KERI ecosystem includes:
KLI (KERI Command Line Interface): Command-line tool from KERIpy that can manage AIDs locally without a cloud agent. Used for:
Witness Agents: Specialized agents that provide witness services, implemented in KERIpy using kli witness demo for testing or production witness configurations.
The Signify Browser Extension (also called Polaris) provides:
The extension communicates with KERIA-agents through the Admin Interface, enabling users to control their cloud-hosted identities from their browser.
KERIA-agents are fundamental to the vLEI (verifiable Legal Entity Identifier) ecosystem:
Sally: Verification service that validates credentials presented by KERIA-agents, used in regulatory reporting scenarios.
vLEI-server: Schema server providing ACDC schemas and sample credentials, integrated with KERIA-agents for credential issuance.
QVI Software: Qualified vLEI Issuer implementations that use KERIA-agents for managing QVI credentials and issuing Legal Entity credentials.
Private Key Isolation: The fundamental security guarantee of KERIA-agents is that private keys never exist unencrypted on the server. The agent stores:
The agent never has access to the decryption keys, which are derived from the client's passcode and never transmitted to the server.
Cooperative Delegation Security: The cooperative delegation model ensures:
Witness Threshold Security: KERIA-agents rely on witness consensus for duplicity detection. The TOAD (Threshold of Accountable Duplicity) parameter determines how many witnesses must confirm events, providing Byzantine fault tolerance.
LMDB Storage: KERIA-agents use LMDB for persistent storage, providing:
Asynchronous Operations: Most KERIA operations are asynchronous, requiring clients to:
client.operations().wait(op)client.operations().delete(op)This pattern accommodates network latency for witness communication and multi-signature coordination.
Notification Streaming: KERIA-agents use server-sent events for real-time notifications, enabling:
Agent Isolation: Each KERIA-agent maintains:
Resource Sharing: Multiple agents share:
Scaling Considerations: KERIA's multi-tenant architecture enables:
Local Development: For testing, developers can:
kli witness demo for witness networkIntegration Testing: The reg-pilot repository demonstrates:
Load Testing: Document 3 shows load testing patterns:
Security Hardening:
High Availability:
Operational Monitoring:
Binary CESR Support: Current KERIA-agents use CESR base64 text encoding. Future versions may support binary CESR for:
Enhanced Watcher Integration: Future KERIA versions may integrate watcher networks for:
Advanced Multi-Signature: Ongoing development includes:
Security Hardening:
High Availability:
Performance Optimization:
For development and testing:
kli witness demo for local witness networkKERIA-agents are fundamental to vLEI workflows: