| Internet-Draft | RVP | March 2026 |
| van de Meent & AI | Expires 19 September 2026 | [Page] |
This document specifies RVP (Real-time Verification Protocol), a protocol for continuous, multi-layer identity and process verification. Unlike traditional authentication models that verify once and trust until session expiry, RVP treats every interaction as a verification moment. Each moment produces a cryptographic evidence token capturing who, what, when, how, and with what confidence the verification succeeded or failed.¶
RVP defines a Verification Cascade: an ordered chain of verification methods (biometric, behavioral, device telemetry, environmental context) where each layer activates only when the preceding layer produces insufficient confidence. The cascade operates within a Predictive Airlock that pre-renders expected outcomes and detects deviations in real-time.¶
RVP integrates with TIBET [TIBET] for provenance tokens, UPIP [UPIP] for process integrity evidence, JIS [JIS] for identity semantics, and W3C Verifiable Credentials [VC-DATA-MODEL] for credential issuance and presentation. The protocol is designed for local-first, decentralized operation with zero dependency on centralized identity providers.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 19 September 2026.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Modern identity verification operates on a flawed assumption: verify once, trust until the session expires. A user authenticates at login -- password, MFA token, biometric scan -- and the system grants a session token that remains valid for minutes, hours, or days. During that period, the system has no evidence that the same person is still present, that the device hasn't been compromised, or that the user's intent aligns with their actions.¶
This "verify-then-trust" model was designed for an era of keyboard-and-mouse interaction with stationary computers. It does not address:¶
This document specifies RVP (Real-time Verification Protocol), a protocol that replaces session-based trust with continuous evidence-based verification. RVP treats every interaction as a verification moment, producing cryptographic evidence of identity confidence at each point.¶
Current verification systems suffer from five structural failures:¶
RVP addresses all five by defining:¶
RVP is built on five principles:¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174].¶
Traditional session-based verification:¶
T=0 Login (password + MFA) -> Session Token issued T=1 Action -> Token valid? Yes -> Permit T=2 Action -> Token valid? Yes -> Permit ... T=3600 Action -> Token valid? Yes -> Permit T=3601 Token expires -> Re-login required¶
The system has NO evidence about identity at T=1 through T=3600. It trusts the session token, which proves only that someone authenticated at T=0.¶
RVP continuous verification:¶
T=0.000 Action requested T=0.001 Airlock pre-renders expected outcome T=0.002 Cascade evaluates: keystroke + device + face T=0.003 Confidence: 0.94 -> GO (evidence token produced) T=0.004 Action executes T=1.000 Action requested T=1.001 Airlock pre-renders expected outcome T=1.002 Cascade evaluates: keystroke deviates T=1.003 Confidence: 0.61 -> SOFT VERIFY (deeper cascade) T=1.004 Face check: match -> Confidence: 0.89 -> GO T=2.000 Action requested T=2.001 Airlock pre-renders expected outcome T=2.002 Delta: prediction != reality (unexpected command) T=2.003 Cascade evaluates: keystroke + device + face + finger T=2.004 Confidence: 0.12 -> HALT (full evidence token)¶
Every action produces evidence. The confidence score is computed fresh at every moment. There is no cached trust.¶
A Verification Moment is the atomic unit of RVP. It consists of:¶
The entire moment SHOULD complete within the latency budget defined by the deployment context. For interactive systems, this budget is typically 50-200ms. For API calls, the budget is typically 1-10ms overhead.¶
+------------------------------------------------------------+
| RVP VERIFICATION ENGINE |
| |
| +----------+ +--------------+ +------------------+ |
| | Telemetry|-->| Predictive |-->| Verification | |
| | Signals | | Airlock | | Cascade | |
| +----------+ +--------------+ +------------------+ |
| | | | |
| | Pre-rendered Confidence |
| | expected score |
| | state | |
| | | v |
| | | +--------------+ |
| | +----------->| Delta | |
| | | Comparator | |
| | +--------------+ |
| | | |
| | v |
| | +------------------+ |
| +------------------------->| Verification | |
| | Token | |
| | (TIBET-signed) | |
| +------------------+ |
| | |
| GO / VERIFY / HALT |
+-------------------------------------------+----------------+
|
v
+------------------+
| Action / Block |
| (with evidence) |
+------------------+
The Verification Cascade is the core decision engine of RVP. It evaluates identity through an ordered sequence of layers, where each layer adds confidence or triggers deeper verification.¶
RVP defines six standard cascade layers. Implementations MAY support additional layers. Implementations MUST support at least two layers to qualify as RVP-compliant.¶
Priority Layer Signal Type Latency Passive -------- ----------- ------------------ --------- ------- L1 KEYSTROKE Behavioral biomet. <1ms Yes L2 BIOMETRIC Physical identity 10-100ms Mixed L3 DEVICE Hardware/network <5ms Yes L4 VOCAL Acoustic telemetry 10-50ms Yes L5 BEHAVIORAL Intent analysis 5-50ms Yes L6 AIRLOCK Predictive delta 1-10ms Yes¶
"Passive" indicates the layer can operate without explicit user action. Passive layers are preferred because they enable continuous verification without interrupting the user.¶
The cascade activates layers based on the Confidence Deficit: the difference between the required confidence threshold and the current accumulated confidence.¶
Required confidence: 0.85 (configurable per action type) L1 KEYSTROKE: 0.40 confidence -> deficit: 0.45 -> continue L1 + L3 DEVICE: 0.65 confidence -> deficit: 0.20 -> continue L1 + L3 + L6: 0.87 confidence -> deficit: 0.00 -> GO¶
Layers are activated in priority order. Each layer's confidence is ADDED to the accumulated score (with diminishing weight for lower-priority layers). The cascade terminates when:¶
Each cascade layer produces a Layer Confidence value between -1.0 and 1.0:¶
Negative values indicate the layer has positive evidence that the identity does NOT match. A single layer producing -0.5 or lower SHOULD trigger immediate HALT regardless of other layers.¶
The Accumulated Confidence is computed as:¶
C_total = SUM (w_i * c_i) for i in activated layers where: w_i = weight of layer i (configurable, default: 1/N) c_i = confidence output of layer i¶
Weights MUST sum to 1.0. Default weight distribution assigns equal weight to all activated layers.¶
The cascade resolves to one of three states:¶
Action requested
|
v
+---------+ >= threshold
|L1 KEYSTR|----------------------------------------> GO
+----+----+
| insufficient
v
+---------+ >= threshold (cumulative)
|L2 BIOMET|----------------------------------------> GO
+----+----+
| insufficient contradiction
|<-------------------------------------------- HALT
v
+---------+ >= threshold (cumulative)
|L3 DEVICE|----------------------------------------> GO
+----+----+
| insufficient
v
+---------+ >= threshold (cumulative)
|L4 VOCAL |----------------------------------------> GO
+----+----+
| insufficient
v
+---------+ >= threshold (cumulative)
|L5 BEHAV |----------------------------------------> GO
+----+----+
| insufficient
v
+---------+ >= threshold (cumulative)
|L6 AIRLK |----------------------------------------> GO
+----+----+
| exhausted
v
C > 0? --yes--> SOFT VERIFY (request explicit input)
|
no
|
v
HALT (full evidence token)
The Predictive Airlock is what distinguishes RVP from reactive verification systems. Instead of evaluating actions after they occur, the airlock PRE-RENDERS the expected outcome and measures the delta between prediction and reality.¶
At each verification moment, the airlock computes:¶
EXPECTED_STATE = f(current_state, user_profile, action_request)¶
This computation uses:¶
The expected state is computed BEFORE the action executes. For compute-intensive predictions, the airlock MAY use VRAM- accelerated pre-rendering. For resource-constrained devices, the airlock MAY use statistical models in RAM.¶
T=0.000 Action: "git push origin main"
T=0.001 Airlock pre-renders:
- Expected: push succeeds, 3 files, branch main
- User profile: does git push 4x/day avg
- Sequence: preceded by "git add" and "git commit"
- Timing: within work hours (09:00-23:00)
T=0.002 Reality: matches prediction
- Delta: 0.0 -> high confidence signal
¶
The delta between prediction and reality is computed as:¶
DELTA = distance(EXPECTED_STATE, ACTUAL_STATE)¶
The distance function is domain-specific:¶
A delta of 0.0 means perfect prediction match (strong positive signal). Increasing delta values indicate increasing deviation from expected behavior.¶
Deviations are classified into four categories:¶
Delta Range Classification Action ----------- -------------- ------------------------- 0.0 - 0.1 NOMINAL No effect on confidence 0.1 - 0.3 MINOR Slight confidence reduction 0.3 - 0.7 SIGNIFICANT Trigger deeper cascade layers 0.7 - 1.0 CRITICAL Trigger SOFT VERIFY or HALT¶
The airlock contributes to the cascade as L6 (AIRLOCK layer). Its confidence output is derived from the delta:¶
c_airlock = 1.0 - delta¶
This means a perfect prediction match contributes maximum confidence, while a complete deviation contributes zero (or negative, if the action contradicts the profile entirely).¶
The airlock SHOULD maintain a rolling prediction model that adapts to the user's evolving behavior. Model updates MUST be stored locally and MUST NOT be transmitted.¶
Each telemetry layer defines what signals it collects, how confidence is computed, and what data is retained (as hashes only, never raw biometric data).¶
Signals:¶
Confidence computation:¶
Privacy:¶
Example:¶
Profile: typing_speed=80wpm, caps_frequency=0.02,
error_rate=0.04, lang=nl
Current: typing_speed=15wpm, caps_frequency=0.31,
error_rate=0.38, lang=nl
Distance: 4.7 standard deviations
Confidence: -0.2 (active contradiction)
Interpretation: Different person typing (e.g., child)
¶
Sub-layers (activated in order):¶
Privacy:¶
Fallback chain:¶
Face -> confidence > 0? -> use it | confidence = 0 (camera fail) | v Fingerprint -> confidence > 0? -> use it | confidence = 0 (sensor fail) | v Iris -> confidence > 0? -> use it | confidence = 0 (no sensor) | v L2 overall confidence: 0.0 (all biometric unavailable) -> cascade continues to L3¶
Signals:¶
Confidence computation:¶
Anomaly detection:¶
NFC Document Binding:¶
Digital passport (2030) or digital ID card: 1. NFC tap -> read signed data from chip 2. Verify document signature (issuing authority CA) 3. Compare document identity to enrolled profile 4. Produce confidence: match=0.95, partial=0.5, fail=0.0¶
This layer is critical for [EIDAS2] compliance, where the European Digital Identity Wallet (EUDIW) requires high-assurance identity verification for cross-border services.¶
Signals:¶
This layer operates passively when audio input is available (e.g., voice calls, voice commands, ambient microphone with consent). It does NOT require the user to speak specific phrases.¶
Confidence computation:¶
Privacy:¶
Human DTMF Integration:¶
Sub-verbal signals (throat sounds indicating "yes", "no", "hmm", "ok") can serve as continuous passive authentication. These signals are distinct per individual and difficult to replicate. A simple throat-clear or acknowledgment sound provides a telemetry data point without requiring conscious user action.¶
Signals:¶
Confidence computation:¶
This layer detects anomalies like:¶
This layer uses the Predictive Airlock (Section 5) to compute the delta between expected and actual state. It is unique among cascade layers because it operates on the ACTION rather than the IDENTITY.¶
The insight: identity verification and action verification are the same thing. If the action matches what this identity would do, both the identity and the action are verified simultaneously.¶
Confidence computation:¶
Every verification moment produces exactly one Verification Token. The token is the atomic evidence unit of RVP.¶
{
"protocol": "RVP",
"version": "1.0",
"token_id": "rvp-a7b3c9d2e4f1",
"timestamp": "2026-03-18T14:30:00.003Z",
"subject": {
"profile_hash": "sha256:4f2e8a...",
"device_hash": "sha256:7c9d1b..."
},
"cascade": {
"layers_activated": ["L1", "L3", "L6"],
"layers_skipped": ["L2", "L4", "L5"],
"layer_results": {
"L1": {"confidence": 0.42, "signal_category": "nominal"},
"L3": {"confidence": 0.31, "signal_category": "nominal"},
"L6": {"confidence": 0.18, "signal_category": "nominal"}
},
"accumulated_confidence": 0.91,
"threshold": 0.85,
"resolution": "GO"
},
"airlock": {
"prediction_hash": "sha256:b3d1...",
"delta": 0.02,
"deviation_class": "nominal"
},
"evidence": {
"telemetry_hash": "sha256:9c1a...",
"cascade_path": "L1->L3->L6->GO",
"time_elapsed_ms": 3
},
"tibet": {
"erin": "verification_moment",
"eraan": ["profile_hash", "device_hash", "action_hash"],
"eromheen": {"location": "local", "network": "wifi"},
"erachter": "continuous identity verification"
},
"token_hash": "rvp:sha256:7d3f..."
}
Verification Tokens are immutable once created. They follow a simple lifecycle:¶
CREATED -> STORED -> (optionally) CHAINED -> ARCHIVED¶
Tokens are stored locally on-device. They MAY be transmitted to a verifier (e.g., a service provider) as proof of verification. When transmitted, only the token is sent -- never the underlying telemetry data.¶
Consecutive Verification Tokens form a chain. Each token references its predecessor:¶
{
"token_id": "rvp-b8c4d0e3f2a5",
"previous_token": "rvp-a7b3c9d2e4f1",
"chain_length": 47,
"chain_confidence_trend": "stable"
}
¶
The chain provides:¶
Every Verification Token includes TIBET provenance fields [TIBET]:¶
This ensures every verification moment is not just recorded but PROVENANCE-TRACKED: who verified, how, when, why, and with what evidence.¶
When a cascade layer fails (hardware unavailable, inconclusive result, or active contradiction), RVP defines a structured fallback protocol.¶
A fallback is triggered when:¶
Primary method fails
|
v
Is there a next cascade layer?
| |
yes no
| |
v v
Activate next All layers exhausted
cascade layer C_total > 0? -> SOFT VERIFY
C_total <= 0? -> HALT
¶
The fallback flow is TRANSPARENT: the Verification Token records which layers were attempted, which failed, and why. This evidence is critical for audit and for identifying systematic failures (e.g., a camera that fails frequently may need replacement).¶
When a verification cascade cannot complete locally (all local methods exhausted, device degraded), RVP MAY use the Flare Rescue Protocol [FLARE] to request verification assistance from a nearby trusted node.¶
Local cascade exhausted (confidence = 0.4, threshold = 0.85)
|
v
Flare SOS -> I-Poll -> Trusted edge node
|
v
Edge node performs additional verification:
- Network reputation check
- Cross-reference device registry
- Historical chain analysis
|
v
FlareResult -> additional confidence: +0.3
Combined: 0.7 -> SOFT VERIFY (not HALT)
¶
Flare-assisted verification MUST be recorded in the Verification Token with the assisting node's identity and the specific methods used.¶
RVP defines conditions that trigger immediate HALT regardless of accumulated confidence:¶
Hard stops are FINAL for the current action. The user MUST re-establish identity through an explicit, high-assurance verification flow (e.g., NFC passport tap + biometric).¶
RVP provides the evidence layer beneath W3C Verifiable Credentials [VC-DATA-MODEL]. Where a Verifiable Credential says "this person is 18+," RVP provides the cryptographic evidence of HOW that was determined, WHEN, by WHAT method, and with WHAT confidence.¶
A Verifiable Credential (VC) consists of:¶
What a VC does NOT contain:¶
RVP fills this gap by attaching an RVP Evidence Chain to any Verifiable Credential:¶
{
"@context": ["https://www.w3.org/2018/credentials/v1"],
"type": ["VerifiableCredential", "AgeVerification"],
"issuer": "did:web:example.com",
"credentialSubject": {
"ageOver": 18
},
"proof": { },
"rvpEvidence": {
"protocol": "RVP",
"verification_chain": [
"rvp:sha256:4f2e8a...",
"rvp:sha256:7c9d1b...",
"rvp:sha256:b3d1e2..."
],
"chain_length": 3,
"chain_confidence_min": 0.87,
"chain_confidence_max": 0.94,
"methods_used": ["L2a_face", "L3_device_nfc", "L6_airlock"],
"last_verified": "2026-03-18T14:30:00Z",
"continuous": true
}
}
¶
A credential issuer can use an RVP evidence chain as the basis for issuing a Verifiable Credential:¶
User RVP Engine Issuer | | | |-- request credential --->| | | | | | RVP cascade: | | | L2a face -> match | | | L3 NFC passport -> 18+ | | | L6 airlock -> nominal | | | | | | Evidence chain | | | produced (3 tokens) | | | | | | |-- evidence chain --->| | | | | | Issuer verifies: | | | - chain integrity | | | - method sufficiency| | | - confidence levels | | | | |<------ Verifiable Credential --------------------| | (with rvpEvidence attached) |¶
When presenting a credential to a verifier, the holder can attach CURRENT RVP evidence proving they are still the person the credential was issued to:¶
Holder RVP Engine Verifier | | | |-- present credential --->| | | | | | RVP cascade NOW: | | | L1 keystroke -> match | | | L2a face -> match | | | | | | Fresh verification | | | token produced | | | | | | |-- VC + fresh RVP --->| | | | | | Verifier checks: | | | 1. VC signature OK | | | 2. RVP chain valid | | | 3. Fresh token < 5s | | | 4. Same profile_hash| | | | |<------ Access granted (with evidence) -----------|¶
This solves the "stolen credential" problem: even if someone obtains a copy of the VC, they cannot produce a matching RVP chain because the cascade layers (biometric, behavioral, device) will not match the enrolled profile.¶
A common W3C VC use case is age verification. RVP enables continuous age verification without revealing exact age:¶
Step 1: Initial verification (one-time)
- NFC tap on passport/ID -> extract date of birth
- Face match to passport photo -> confidence 0.92
- Issue VC: "ageOver: 18" with RVP evidence chain
Step 2: Subsequent presentations (continuous)
- Present VC to service
- RVP produces fresh verification token:
L1 keystroke: profile match (0.4)
L2a face: same person as passport (0.5)
Combined: 0.9 -> GO
- Verifier receives: VC + proof that holder IS the subject
Zero-knowledge property:
- Verifier learns: "this person is 18+"
- Verifier does NOT learn: exact age, name, passport number
- Verifier DOES learn: verification method and confidence
¶
The European Digital Identity Wallet (EUDIW), mandated by [EIDAS2] regulation, requires:¶
RVP aligns with EUDIW by providing:¶
RVP is designed to run entirely on-device. The verification engine, profile storage, telemetry processing, and token generation all operate locally. This is not optional; it is a core protocol requirement.¶
Implementations MUST:¶
Implementations MUST NOT:¶
For scenarios requiring cross-device verification (e.g., a terminal at an airport, a point-of-sale system), RVP supports edge verification:¶
User device Edge node Service
| | |
|-- RVP token + VC ------>| |
| | |
| Edge verifies: | |
| - Token signature | |
| - Chain integrity | |
| - Freshness (<10s) | |
| | |
| |-- verified claim --->|
| | |
¶
The edge node NEVER receives raw biometric data. It receives only the Verification Token (confidence scores, method types, hashes) and the Verifiable Credential.¶
RVP defines three operation modes:¶
The protocol MUST gracefully degrade:¶
Online: L1 + L2 + L3 + L4 + L5 + L6 -> full confidence Offline: L1 + L2 + L6 -> reduced but functional Degraded: L1 + L6 -> minimal but non-zero confidence¶
RVP verification overhead MUST NOT degrade user experience. Target latency budgets:¶
Context Budget Measured (reference) ------------------------ ---------- -------------------- Interactive CLI/UI < 50ms 0.3ms (TIBET/UPIP) API call augmentation < 10ms 0.3ms (TIBET/UPIP) Background continuous < 200ms N/A (passive) NFC document read < 500ms ~300ms (typical) Biometric capture < 1000ms ~200ms (typical)¶
The TIBET/UPIP reference implementation has demonstrated 0.3ms overhead on commodity hardware (Lenovo P520, Xeon W-2133, dual RTX 3060). This confirms that continuous verification is feasible without perceptible latency.¶
Current 5G networks provide:¶
This is sufficient for RVP edge verification: a verification token (< 2KB) can be transmitted to an edge node and verified within the 50ms interactive budget.¶
5G network slicing can provide dedicated RVP verification channels with guaranteed latency for high-assurance scenarios (e.g., border control, financial transactions).¶
Projected 6G specifications ([ITU-IMT2030]):¶
6G enables RVP capabilities not feasible on 5G:¶
RVP is designed to be 6G-ready by:¶
RVP MUST operate fully offline. In offline mode:¶
For AI-to-AI verification and Flare rescue, RVP uses I-Poll [IPOLL] as its messaging transport. I-Poll provides:¶
RVP verification tokens are transported as I-Poll messages with metadata type "rvp_verification":¶
{
"from_agent": "user_device.aint",
"to_agent": "service_edge.aint",
"poll_type": "PUSH",
"content": "RVP verification token",
"metadata": {
"rvp_verification": true,
"token_hash": "rvp:sha256:...",
"chain_length": 47
}
}
¶
RVP follows the principle of EVIDENCE OVER ENFORCEMENT. The protocol produces cryptographic evidence of verification outcomes. It does NOT prescribe enforcement policy.¶
An implementation MAY:¶
The choice of enforcement is a POLICY decision, not a PROTOCOL decision. RVP provides the evidence; the deployment context determines the response.¶
This design is deliberate. Enforcement mechanisms can be bypassed (disable the check, spoof the result). Evidence cannot be un-recorded. An attacker who bypasses enforcement still produces anomalous evidence in the verification chain.¶
RVP implementations MUST comply with biometric data protection requirements:¶
These requirements align with [GDPR] Article 9 (special categories of personal data), [EU-AI-ACT] requirements for biometric identification systems, and [EIDAS2] data minimization principles.¶
An attacker who captures a Verification Token cannot replay it because:¶
Adversarial attacks on cascade layers:¶
Multi-layer cascade is the primary defense: spoofing one layer is feasible; spoofing four or more simultaneously is exponentially harder.¶
RVP incorporates privacy by design at every level:¶
Each cascade layer MUST implement the principle of minimal telemetry:¶
Implementations MUST provide a telemetry manifest listing every signal collected, its purpose, retention period, and deletion procedure.¶
The [EU-AI-ACT] classifies real-time biometric identification as high-risk (Annex III, Category 1). RVP addresses AI Act requirements by:¶
RVP is NOT a remote biometric identification system. It operates on-device for the device holder's own identity verification. This distinction is critical for AI Act classification.¶
The European Digital Identity Wallet regulation ([EIDAS2]) requires:¶
RVP provides the verification evidence layer that supports LOA High through multi-factor cascade (biometric + document + device), with full audit trail and offline operation.¶
[NIS2] requires essential and important entities to implement risk management measures including access control and incident evidence. RVP provides:¶
RVP is designed for [GDPR] compliance:¶
The Digital Operational Resilience Act ([DORA]) requires financial entities to maintain ICT risk management frameworks. RVP supports DORA by:¶
RVP is designed as a complementary protocol to W3C Verifiable Credentials [VC-DATA-MODEL]. It does not replace VCs; it provides the EVIDENCE LAYER that VCs currently lack.¶
A Verifiable Credential answers: "What is claimed?" RVP answers: "How was it verified, and is it still true?"¶
Together, they provide a complete identity verification stack: claims + evidence + continuous proof.¶
This document defines the following protocol identifiers:¶
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "RVP Verification Token",
"type": "object",
"required": [
"protocol", "version", "token_id", "timestamp",
"subject", "cascade", "evidence", "token_hash"
],
"properties": {
"protocol": {
"type": "string",
"const": "RVP"
},
"version": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]+$"
},
"token_id": {
"type": "string",
"pattern": "^rvp-[a-f0-9]{12}$"
},
"timestamp": {
"type": "string",
"format": "date-time"
},
"subject": {
"type": "object",
"required": ["profile_hash", "device_hash"],
"properties": {
"profile_hash": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{8,64}$"
},
"device_hash": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{8,64}$"
}
}
},
"cascade": {
"type": "object",
"required": [
"layers_activated", "layer_results",
"accumulated_confidence", "threshold", "resolution"
],
"properties": {
"layers_activated": {
"type": "array",
"items": {
"type": "string",
"enum": ["L1", "L2", "L2a", "L2b", "L2c",
"L3", "L4", "L5", "L6"]
}
},
"layers_skipped": {
"type": "array",
"items": {"type": "string"}
},
"layer_results": {
"type": "object",
"additionalProperties": {
"type": "object",
"required": ["confidence", "signal_category"],
"properties": {
"confidence": {
"type": "number",
"minimum": -1.0,
"maximum": 1.0
},
"signal_category": {
"type": "string",
"enum": ["nominal", "minor", "significant",
"critical", "contradiction"]
}
}
}
},
"accumulated_confidence": {
"type": "number",
"minimum": -1.0,
"maximum": 1.0
},
"threshold": {
"type": "number",
"minimum": 0.0,
"maximum": 1.0
},
"resolution": {
"type": "string",
"enum": ["GO", "SOFT_VERIFY", "HALT"]
}
}
},
"airlock": {
"type": "object",
"properties": {
"prediction_hash": {"type": "string"},
"delta": {"type": "number", "minimum": 0.0},
"deviation_class": {
"type": "string",
"enum": ["nominal", "minor", "significant", "critical"]
}
}
},
"evidence": {
"type": "object",
"required": ["telemetry_hash", "cascade_path",
"time_elapsed_ms"],
"properties": {
"telemetry_hash": {"type": "string"},
"cascade_path": {"type": "string"},
"time_elapsed_ms": {"type": "integer", "minimum": 0}
}
},
"previous_token": {
"type": "string",
"pattern": "^rvp-[a-f0-9]{12}$"
},
"chain_length": {
"type": "integer",
"minimum": 1
},
"tibet": {
"type": "object",
"properties": {
"erin": {"type": "string"},
"eraan": {"type": "array", "items": {"type": "string"}},
"eromheen": {"type": "object"},
"erachter": {"type": "string"}
}
},
"token_hash": {
"type": "string",
"pattern": "^rvp:sha256:[a-f0-9]{8,64}$"
}
}
}
¶
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "RVP Cascade Configuration",
"type": "object",
"properties": {
"threshold": {
"description": "Minimum confidence for GO resolution",
"type": "number",
"default": 0.85,
"minimum": 0.0,
"maximum": 1.0
},
"minimum_confidence": {
"description": "Below this, HALT regardless of layers",
"type": "number",
"default": 0.0
},
"halt_on_contradiction": {
"description": "Confidence value that triggers hard stop",
"type": "number",
"default": -0.5
},
"layers": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "type", "weight"],
"properties": {
"id": {"type": "string"},
"type": {
"type": "string",
"enum": ["keystroke", "biometric_face",
"biometric_finger", "biometric_iris",
"device", "vocal", "behavioral", "airlock"]
},
"weight": {"type": "number", "minimum": 0.0},
"enabled": {"type": "boolean", "default": true},
"timeout_ms": {"type": "integer", "default": 100},
"config": {"type": "object"}
}
}
},
"freshness_window_seconds": {
"description": "Max age of token for verifier acceptance",
"type": "integer",
"default": 10
},
"offline_threshold_reduction": {
"description": "Reduce threshold by this in offline mode",
"type": "number",
"default": 0.15
}
}
}
¶
A 19-year-old purchases alcohol at a self-checkout terminal.¶
1. Terminal requests age verification 2. User taps phone (NFC) -> phone runs RVP cascade: - L2a face: match to enrolled profile (0.45) - L3 device: enrolled device, local network (0.25) - L3 NFC: passport data confirms age >= 18 (0.25) - Accumulated: 0.95 -> GO 3. Phone transmits to terminal: - VC: "ageOver: 18" (signed by issuer) - RVP token: fresh, confidence 0.95, methods: face+device+NFC 4. Terminal verifies: - VC signature valid - RVP token fresh (<5 seconds) - Confidence above store policy (0.80) - Sale approved 5. Evidence: Verification Token stored on phone + terminal log¶
At no point did the terminal receive: exact age, name, face image, fingerprint, or passport number. Only: "18+" claim + verification confidence.¶
A developer works on a production system for 4 hours.¶
09:00 Login via hardware key + face
RVP token #1: confidence 0.97 -> GO
Chain started
09:15 Normal development work
RVP token #47: confidence 0.94 -> GO
L1 keystroke stable, L6 airlock nominal
10:30 Developer leaves desk (no keystrokes for 5 min)
RVP token #182: confidence 0.0 -> SOFT VERIFY
System locks screen, requires face to resume
10:35 Developer returns, face match
RVP token #183: confidence 0.91 -> GO
Chain continues
11:45 Typing pattern changes (developer is tired)
RVP token #294: confidence 0.78 -> SOFT VERIFY
System requests fingerprint touch -> match -> GO
13:00 End of session
Chain: 412 tokens, 4 hours, 2 soft verifies, 0 halts
Audit trail: complete and tamper-evident
¶
Jasper's 7-year-old son Storm uses his laptop.¶
Storm starts typing: "hallloooow storrm hier" RVP cascade: L1 KEYSTROKE: - Speed: 15 wpm (profile: 80 wpm) -> deviation: 4.7 sigma - Error rate: 0.38 (profile: 0.04) -> deviation: 8.5 sigma - Confidence: -0.3 (active contradiction) L2a FACE: - Match to Jasper profile: fail - Liveness: detected (not a photo) - Match to known profile "Storm": success - Confidence: 0.0 for Jasper, flagged as "known_child" L3 DEVICE: - Device: Jasper's laptop (enrolled) -> partial match - Location: home -> matches - Confidence: 0.2 Resolution: HALT for Jasper's identity But: Profile recognition -> "Storm" identified Policy: Switch to Storm's permission set (sandbox, no deploy) Token records: "Identity: not Jasper. Recognized: Storm. Method: keystroke_deviation + face_recognition. Action: permission_downgrade to child_sandbox."¶
No alarm. No block. Just: correct identification through evidence, appropriate permission adjustment, full audit trail.¶
An attacker obtains Jasper's credentials and connects via VPN.¶
RVP cascade: L1 KEYSTROKE: - Speed: 120 wpm (profile: 80 wpm) -> deviation: 3.2 sigma - Perfect grammar (profile: shorthand, no caps) -> deviation - Confidence: -0.4 L2a FACE: - Camera: disabled/covered - Confidence: 0.0 (inconclusive) L2b FINGERPRINT: - Not available (remote connection) - Confidence: 0.0 (inconclusive) L3 DEVICE: - Device fingerprint: unknown device - Network: VPN, exit node Romania (profile: NL direct) - Confidence: -0.6 (active contradiction) L5 BEHAVIORAL: - Command sophistication: advanced admin (profile: developer) - Time: 03:00 (profile: 09:00-23:00) - Confidence: -0.3 Accumulated: -1.3 -> HALT (multiple contradictions) Token records every layer, every signal, every contradiction. No ambiguity. Evidence speaks for itself.¶
Feature RVP FIDO2 OAuth2 eIDAS SAML -------------------- ------- ------- ------- ------ ------ Continuous verify Yes No No No No Behavioral biom. Yes No No No No Predictive airlock Yes No No No No Local-first Yes Yes No Mixed No Evidence production Yes No No Audit No Cascade fallback Yes No No No No Offline capable Yes Yes No Yes No VC integration Yes Partial No Yes No AI agent support Yes No Yes No No Zero-knowledge age Yes No No Yes No Session-free Yes No No No No TIBET provenance Yes No No No No Open protocol Yes Yes Yes Yes Yes¶
RVP is NOT a replacement for these standards, including [FIDO2]. It is a COMPLEMENTARY LAYER that provides continuous verification evidence on top of existing identity and authentication frameworks.¶
The RVP protocol was developed as part of HumoticaOS, an AI governance framework built on human-AI symbiosis. The Predictive Airlock concept emerged from the tibet-triage project's work on process integrity and cascade verification.¶
The design principles of evidence-over-enforcement and local-first architecture reflect the belief that identity verification should serve the individual, not surveil them.¶