Loading vLEI.wiki Fetching knowledge base...
vLEI.wiki Comprehensive knowledge base for KERI (Key Event Receipt Infrastructure) and vLEI (verifiable Legal Entity Identifier) ecosystem.
Made by Key State Capital .
© 2025 vLEI.wiki. Educational resource for KERI/vLEI ecosystem.
out-of-band-introduction - vLEI.wiki | KERI Knowledge Base - vLEI.wiki
Back to ConceptsShort Definition Out-of-Band Introduction (OOBI) is a discovery mechanism that associates a URL with a KERI AID (Autonomic Identifier ) or SAID (Self-Addressing Identifier), enabling bootstrap discovery of IP resources through the principle 'discovery via URI, trust via KERI'—where the OOBI itself is untrusted and all discovered information must be cryptographically verified through KERI protocols.
Related Concepts No related concepts available
Comprehensive Explanation Out-of-Band Introduction (OOBI)
Process Definition
Out-of-Band Introduction (OOBI) is a fundamental discovery protocol in the KERI ecosystem that solves the critical challenge of associating cryptographically verifiable autonomic identifiers (AIDs) with network-accessible service endpoints. The process accomplishes vacuous discovery —bootstrapping trust relationships without requiring pre-existing infrastructure or centralized registries.
What OOBI Accomplishes
OOBI enables:
Discovery of IP Resources : Associates AIDs or SAIDs with URLs that provide access to key event logs (KELs) , witnesses , watchers , and other KERI infrastructure
Bootstrap Trust Establishment : Provides initial introduction without requiring trust in the introduction mechanism itself
Decentralized Service Discovery : Eliminates dependency on centralized DNS or certificate authorities for identifier-to-endpoint mapping
Percolated Information Discovery : Enables invasion percolation-based discovery where information spreads through trust networks
When OOBI Is Used
Implementation Notes Critical Implementation Considerations
OOBI Resolution Pipeline
Implementations must handle the complete resolution pipeline:
Parse OOBI : Extract AID/SAID and URL from various formats (tuple, URL, JSON)
HTTP Request : Perform GET request with appropriate headers and timeouts
CESR Parsing : Decode returned data using CESR parser
Cryptographic Verification : Validate signatures, hash chains, and pre-rotation commitments
State Update : Update local key state only after successful verification
Witness Receipt Collection : For indirect mode, collect threshold-satisfying receipts
Security-Critical Code Paths
Never Trust OOBI Source : The OOBI itself must be treated as untrusted input:
Validate URL format before making HTTP requests
Implement request timeouts to prevent DoS
Sandbox CESR parsing to prevent injection attacks
Reject any data that fails cryptographic verification
Implement BADA Policy : Use Best Available Data Acceptance for state updates:
Accept only monotonically increasing sequence numbers
Verify all signatures before state changes
Escrow out-of-order events until dependencies resolved
Implement replay attack protection
Performance Optimization
Caching Strategy :
Cache resolved KELs with TTL based on identifier activity
Cache witness/watcher endpoint information
Implement connection pooling for frequently accessed endpoints
Use local database for key state to avoid repeated resolution
Parallel Resolution :
Resolve multiple witness OOBIs concurrently
Use async/await patterns for non-blocking resolution
Implement circuit breakers for failing endpoints
Batch OOBI resolutions when processing credential chains
Error Handling Patterns
Network Failures :
try:
response = await http_client.get(oobi_url, timeout=30)
except TimeoutError:
# Try alternative OOBI if available
if alternative_oobi:
response = await http_client.get(alternative_oobi, timeout=30)
else:
raise OOBIResolutionError("All OOBIs failed")
OOBI is employed in several critical scenarios:
Initial AID Discovery : When a validator first encounters an AID and needs to locate its KEL
Witness Discovery : Finding witness endpoints for an identifier
Watcher Network Bootstrap : Connecting to watcher infrastructure for duplicity detection
Credential Schema Resolution : Locating ACDC schemas via SAIDs
Agent Communication : Establishing connections between KERIA agents and Signify clients
Key Participants The OOBI process involves:
Discloser : Entity sharing the OOBI (may be the AID controller, a witness, or any party with knowledge)
Discoverer : Entity receiving and resolving the OOBI
Service Endpoint : The URL-accessible resource providing KERI data
Witnesses/Watchers : Infrastructure components discovered through OOBIs
Process Flow
Basic OOBI Structure The simplest OOBI is a tuple associating a URL with an identifier:
("http://8.8.5.6:8080/oobi", "EaU6JR2nmwyZ-i0d8JZAoTNZH3ULvYAfSVPzhzS6b5CM")
OOBIs can be expressed as self-describing URLs where the AID is embedded in the path:
http://8.8.5.6:8080/oobi/EaU6JR2nmwyZ-i0d8JZAoTNZH3ULvYAfSVPzhzS6b5CM
With optional query parameters for role hints:
http://8.8.5.6:8080/oobi/EaU6JR2nmwyZ-i0d8JZAoTNZH3ULvYAfSVPzhzS6b5CM?role=witness&name=wan
Resolution Sequence
Discoverer receives OOBI through out-of-band channel (QR code, email, chat, web page)
OOBI may be in tuple form, URL form, or structured message format
Discoverer performs HTTP GET request to the OOBI URL
Service endpoint returns KERI data (typically KEL events, witness information, or schema data)
Response format is CESR -encoded KERI messages
Step 3: Cryptographic Verification
Step 4: State Establishment
Discoverer updates local key state based on verified KEL
Establishes connection to discovered witnesses/watchers
Stores endpoint information for future interactions
State Changes OOBI resolution triggers several state transitions:
Unknown → Discovered : AID moves from unknown to having known service endpoints
Unverified → Verified : KEL data transitions from unverified to cryptographically validated
Disconnected → Connected : Witness/watcher connections established
Incomplete → Complete : Key state becomes fully established with witness receipts
Decision Points Role-Based Routing : If OOBI includes role parameter, discoverer routes to appropriate handler:
role=witness: Process as witness discovery
role=watcher: Process as watcher discovery
role=controller: Process as direct controller endpoint
Forwarding Logic : If OOBI points to a forwarding service, the service may:
Return the actual KEL data directly
Provide additional OOBIs pointing to authoritative sources
Redirect to witness endpoints
Verification Failure Handling : If cryptographic verification fails:
Reject the discovered data
Do NOT update key state
Optionally attempt alternative OOBIs if available
Technical Requirements
Cryptographic Requirements Self-Certifying Identifiers : All AIDs discovered via OOBI must be self-certifying , meaning:
The identifier is cryptographically derived from the public key
Verification requires no external trust authority
Inception events establish the binding between identifier and initial keys
Minimum threshold of witness receipts required (specified by TOAD )
Receipts must be cryptographically valid signatures from designated witnesses
KAACE algorithm ensures witness agreement
Timing Considerations Asynchronous Resolution : OOBI resolution is inherently asynchronous:
No guaranteed response time from service endpoints
Witness receipt collection may require multiple round-trips
Escrow mechanisms handle out-of-order event arrival
Caching and Staleness : Discovered information may become stale:
KELs may have new events after OOBI resolution
Witness endpoints may change
Periodic re-resolution or watcher monitoring recommended
Bootstrap Timeout : Implementations should implement timeouts:
HTTP request timeouts for unresponsive endpoints
Overall resolution timeout for complete key state establishment
Fallback to alternative OOBIs if primary fails
Error Handling
HTTP connection failures: Try alternative OOBIs if available
Timeout: Implement exponential backoff for retries
DNS resolution failures: Fall back to IP-based OOBIs
Cryptographic Verification Failures :
Invalid signatures: Reject data, do not update state
Broken hash chains: Treat as duplicity , report to watchers
Insufficient witness receipts: Escrow events until threshold met
Invalid CESR encoding: Reject and log error
Schema validation failures: Reject credential/schema data
Missing required fields: Treat as protocol violation
Usage Patterns
Typical Scenarios Scenario 1: Initial AID Discovery
A verifier receives a credential presentation containing an issuer AID they've never encountered:
Extract issuer AID from credential
Obtain OOBI for issuer (may be embedded in credential metadata)
Resolve OOBI to get issuer's KEL
Verify issuer's current key state
Validate credential signature against issuer's keys
Scenario 2: Witness Network Bootstrap
A new controller creates an AID and needs to connect to witnesses:
Generate witness OOBIs from witness AID and known endpoints
Resolve each witness OOBI to verify witness identity
Send inception event to witnesses for receipting
Collect witness receipts to complete inception
Scenario 3: Watcher Network Discovery
A validator wants to monitor an AID for duplicity :
Obtain watcher network OOBI (may be well-known or published)
Resolve OOBI to discover watcher endpoints
Subscribe to watcher for AID monitoring
Receive notifications of any duplicitous events
Scenario 4: Schema Resolution
An ACDC processor encounters a schema SAID it hasn't cached:
Extract schema SAID from credential
Resolve schema OOBI (may be in credential metadata or well-known location)
Retrieve schema JSON
Verify schema SAID matches retrieved content
Cache schema for future use
Best Practices
Use multiple channels for redundancy (QR code + URL + embedded in credentials)
Include role hints to optimize resolution
Provide multiple witness OOBIs for high availability
Use well-known URIs (.well-known/keri/oobi/) for discoverability
Never trust OOBI source—always verify cryptographically
Implement BADA (Best Available Data Acceptance) policy
Monitor for duplicity through watchers
Use blind OOBIs when privacy required
Performance Optimization :
Cache resolved KELs and key states
Implement connection pooling for witness/watcher connections
Use percolated discovery to share OOBIs within trust networks
Batch OOBI resolutions when processing multiple credentials
Implement retry logic with exponential backoff
Maintain multiple OOBI sources for critical identifiers
Use escrow for out-of-order events
Log resolution failures for debugging
Integration Considerations
KERIA agents expose OOBI endpoints for client discovery
Signify clients use OOBIs to bootstrap agent connections
Agent-client authentication uses challenge-response after OOBI resolution
Credentials may embed issuer OOBIs in metadata
Schema OOBIs enable schema resolution
IPEX protocol uses OOBIs for presentation exchange
With Witness/Watcher Networks :
Witnesses publish OOBIs for discoverability
Watchers use OOBIs to monitor multiple identifiers
Promiscuous mode watchers accept any OOBI
did:keri embeds OOBI in DID document
did:webs uses web infrastructure for OOBI hosting
DID resolution may trigger OOBI resolution for key state updates
OOBI Variants
Verbose OOBI Structured JSON format with complete metadata:
{
"eid": "EaU6JR2nmwyZ-i0d8JZAoTNZH3ULvYAfSVPzhzS6b5CM",
"scheme": "http",
"url": "http://8.8.5.6:8080/",
"role": "witness",
"name": "wan"
}
Multi-OOBI (MOOBI) Bundles multiple OOBIs for a single identifier:
Provides redundancy through multiple endpoints
Enables load balancing across witnesses
Challenges: Authorization complexity for each endpoint
Blind OOBI (BOOBI) OOBI where witness information is not embedded:
Verification relies on external mechanisms
Used when witness list is known through other channels
Provides privacy by not exposing witness relationships
Self OOBI (SOOBI) Identifier introduces itself:
Controller publishes own OOBI
Enables self-service discovery
Common pattern for public identifiers
Security Model
Trust Boundaries
The OOBI itself (may come from adversary)
The URL/endpoint (may be compromised)
Network infrastructure (DNS, routing)
Any intermediaries in discovery path
Cryptographic verification algorithms
Local key state validation logic
Witness threshold policies
Pre-rotation commitments in KEL
Attack Resistance OOBI Spoofing : Attacker provides false OOBI
Mitigation : Cryptographic verification rejects invalid KELs
Result : No state change, attack fails
Man-in-the-Middle : Attacker intercepts OOBI resolution
Mitigation : KEL signatures and hash chains detect tampering
Result : Verification fails, attack detected
Replay Attacks : Attacker replays old KEL data
Mitigation : Sequence numbers and monotonic updates prevent rollback
Result : Stale data rejected
Duplicity Attacks : Attacker provides conflicting KELs
Mitigation : Duplicity detection through witnesses/watchers
Result : Conflict detected, reported, identifier reputation damaged
Standardization OOBI is formalized in IETF draft-ssmith-oobi , establishing it as a standardized component of the KERI protocol suite. The specification defines:
OOBI URL syntax and semantics
Resolution protocol requirements
Security considerations
Interoperability requirements
This standardization ensures consistent implementation across KERI ecosystem tools including KERIpy , KERIA , Signify , and other KERI implementations.
if not verify_kel_signatures(kel_data):
logger.error(f"Signature verification failed for AID {aid}")
# Do NOT update key state
raise VerificationError("Invalid KEL signatures")
Integration Patterns
KERIA exposes OOBIs at /oobi/{aid} endpoints
Clients resolve agent OOBI during bootstrap
Agent-client authentication follows OOBI resolution
With Credential Processing :
Extract issuer OOBI from credential metadata
Resolve issuer KEL before signature verification
Cache issuer key state for batch processing
Generate witness OOBIs from AID and known endpoints
Resolve all witness OOBIs during inception
Maintain persistent connections to witnesses
Testing Considerations
Test OOBI parsing for all formats (tuple, URL, JSON)
Test cryptographic verification with valid/invalid data
Test error handling for network failures
Test state update logic with various KEL scenarios
Test complete resolution pipeline with real witnesses
Test OOBI resolution with multiple concurrent requests
Test failover to alternative OOBIs
Test percolated discovery scenarios
Test with malicious OOBIs (invalid URLs, malformed data)
Test replay attack resistance
Test duplicity detection through watchers
Test MITM attack resistance through cryptographic verification