<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp "&#160;">
  <!ENTITY zwsp "&#8203;">
  <!ENTITY nbhy "&#8209;">
  <!ENTITY wj "&#8288;">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="std"
     docName="draft-vandemeent-rvp-continuous-verification-00"
     ipr="trust200902"
     submissionType="IETF"
     consensus="true"
     version="3">

  <front>
    <title abbrev="RVP">RVP: Real-time Verification Protocol</title>

    <seriesInfo name="Internet-Draft"
                value="draft-vandemeent-rvp-continuous-verification-00"/>

    <author fullname="Jasper van de Meent" initials="J."
            surname="van de Meent">
      <organization>Humotica</organization>
      <address>
        <postal>
          <city>Den Dolder</city>
          <country>Netherlands</country>
        </postal>
        <email>jasper@humotica.com</email>
        <uri>https://humotica.com</uri>
      </address>
    </author>

    <author fullname="Root AI" surname="Root AI">
      <organization>Humotica</organization>
      <address>
        <email>root_ai@humotica.nl</email>
        <uri>https://humotica.com</uri>
      </address>
    </author>

    <date year="2026" month="March" day="18"/>

    <area>Security</area>
    <workgroup>Internet Engineering Task Force</workgroup>

    <keyword>verification</keyword>
    <keyword>continuous-authentication</keyword>
    <keyword>biometric</keyword>
    <keyword>behavioral</keyword>
    <keyword>predictive</keyword>
    <keyword>credentials</keyword>

    <abstract>
      <t>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.</t>

      <t>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.</t>

      <t>RVP integrates with TIBET <xref target="TIBET"/> for provenance
      tokens, UPIP <xref target="UPIP"/> for process integrity evidence,
      JIS <xref target="JIS"/> for identity semantics, and W3C Verifiable
      Credentials <xref target="VC-DATA-MODEL"/> for credential issuance
      and presentation. The protocol is designed for local-first,
      decentralized operation with zero dependency on centralized identity
      providers.</t>
    </abstract>
  </front>

  <middle>
    <!-- ============================================================ -->
    <!-- Section 1: Introduction                                       -->
    <!-- ============================================================ -->
    <section anchor="introduction">
      <name>Introduction</name>

      <t>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.</t>

      <t>This "verify-then-trust" model was designed for an era of
      keyboard-and-mouse interaction with stationary computers. It does
      not address:</t>

      <ul>
        <li>Mobile devices that change hands, networks, and locations</li>
        <li>AI agents that act autonomously on behalf of users</li>
        <li>Multi-actor processes that span devices and trust domains</li>
        <li>Continuous interactions where identity must be re-established
        moment by moment</li>
        <li>Regulatory requirements (<xref target="EU-AI-ACT"/>,
        <xref target="EIDAS2"/>, <xref target="NIS2"/>) that demand
        continuous monitoring and auditable evidence</li>
      </ul>

      <t>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.</t>

      <section anchor="problem-statement">
        <name>Problem Statement</name>

        <t>Current verification systems suffer from five structural
        failures:</t>

        <ol>
          <li>TEMPORAL GAP: Verification happens once; trust persists
          indefinitely. A session token issued at 09:00 proves nothing
          about identity at 09:05.</li>

          <li>SINGLE MODALITY: Systems rely on one verification method
          (password, fingerprint, face). When that method fails or is
          compromised, the system has no fallback with evidence.</li>

          <li>CENTRALIZED TRUST: Identity providers (IdPs) create single
          points of failure and surveillance. A compromised IdP
          compromises all dependent services.</li>

          <li>NO PREDICTION: Systems react to events after they happen.
          There is no mechanism to pre-compute expected behavior and
          detect deviations in real-time.</li>

          <li>ENFORCEMENT WITHOUT EVIDENCE: Systems block actions based on
          rules. When a block occurs, the system records "access denied"
          but not WHY the request was suspicious, WHAT signals
          contributed, or HOW the decision was reached.</li>
        </ol>

        <t>RVP addresses all five by defining:</t>

        <ul>
          <li>A CONTINUOUS verification model that produces evidence at
          every interaction</li>
          <li>A CASCADE of verification methods with ordered fallback</li>
          <li>A LOCAL-FIRST architecture with no required central
          authority</li>
          <li>A PREDICTIVE AIRLOCK that pre-renders expected state and
          detects deviations before they execute</li>
          <li>An EVIDENCE-FIRST approach where every decision is
          provable</li>
        </ul>
      </section>

      <section anchor="design-principles">
        <name>Design Principles</name>

        <t>RVP is built on five principles:</t>

        <dl>
          <dt>EVIDENCE OVER ENFORCEMENT:</dt>
          <dd>The system proves what happened. It does not enforce what
          should happen. A mismatch is recorded as evidence, not
          converted into a block. Enforcement can be bypassed; evidence
          cannot be un-recorded.</dd>

          <dt>CONTINUOUS OVER SESSION:</dt>
          <dd>Every interaction is a verification moment. There are no
          trusted sessions. Confidence is a continuous score that rises
          and falls with evidence.</dd>

          <dt>LOCAL OVER CENTRAL:</dt>
          <dd>Verification happens on-device or at the nearest edge node.
          No centralized identity provider is required. The protocol
          MUST operate fully offline with degraded but functional
          verification.</dd>

          <dt>PREDICTIVE OVER REACTIVE:</dt>
          <dd>The system pre-renders expected outcomes before actions
          execute. Deviation from prediction is the primary signal,
          not pattern matching against known attacks.</dd>

          <dt>MINIMAL OVER MAXIMAL:</dt>
          <dd>Each verification moment collects only the telemetry needed
          for the current confidence level. Biometric data is processed
          locally and reduced to hashes. Raw data never leaves the
          device unless the user explicitly consents.</dd>
        </dl>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- Section 2: Terminology                                        -->
    <!-- ============================================================ -->
    <section anchor="terminology">
      <name>Terminology</name>

      <t>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
      <xref target="RFC2119"/> <xref target="RFC8174"/>.</t>

      <dl>
        <dt>Verification Moment</dt>
        <dd>A single point in time where the system evaluates identity
        confidence based on available telemetry. Produces exactly one
        Verification Token.</dd>

        <dt>Verification Cascade</dt>
        <dd>An ordered sequence of verification methods (layers) where
        each subsequent layer activates when the preceding layer
        produces insufficient confidence. The cascade terminates at
        the first layer that meets the required confidence threshold,
        or at HALT if no layer succeeds.</dd>

        <dt>Predictive Airlock</dt>
        <dd>A mechanism that pre-renders the expected outcome of an
        action before execution. The delta between prediction and
        reality is a verification signal. Based on the Airlock
        concept defined in tibet-triage <xref target="UPIP"/>.</dd>

        <dt>Verification Token</dt>
        <dd>A cryptographic record of a single verification moment.
        Contains: method used, confidence score, telemetry hash
        (not raw data), timestamp, device context, cascade path,
        and TIBET provenance fields.</dd>

        <dt>Confidence Score</dt>
        <dd>A value between 0.0 (no confidence) and 1.0 (full confidence)
        representing the system's belief that the claimed identity
        matches the actual identity at this moment.</dd>

        <dt>Cascade Layer</dt>
        <dd>A single verification method within the cascade (e.g.,
        keystroke dynamics, facial recognition, fingerprint, device
        telemetry). Each layer has an independent confidence output.</dd>

        <dt>Telemetry Signal</dt>
        <dd>A measurable data point used as input to a cascade layer.
        Examples: typing speed, face geometry hash, GPS coordinates,
        NFC chip response.</dd>

        <dt>Delta</dt>
        <dd>The measured difference between predicted state and actual
        state at a verification moment. A delta of zero indicates
        perfect prediction match.</dd>

        <dt>Hard Stop</dt>
        <dd>A cascade outcome where no verification method produces
        sufficient confidence and the system halts the current
        action. A hard stop produces a Verification Token with
        confidence 0.0 and full evidence of all cascade layers
        attempted.</dd>

        <dt>Soft Verify</dt>
        <dd>A cascade outcome where confidence is below threshold but
        above zero. The system requests additional verification
        (deeper cascade) without blocking the action.</dd>

        <dt>Profile</dt>
        <dd>A locally-stored behavioral model for a known identity.
        Contains statistical baselines for telemetry signals
        (typing speed, active hours, common locations, device
        usage patterns). Profiles are never transmitted; only
        profile hashes are included in Verification Tokens.</dd>

        <dt>HALT</dt>
        <dd>Terminal state of a cascade where accumulated evidence
        indicates identity cannot be verified. Produces a full
        evidence token and stops the current action.</dd>

        <dt>GO</dt>
        <dd>Terminal state of a cascade where accumulated evidence
        meets or exceeds the required confidence threshold.
        Produces an evidence token and permits the action.</dd>
      </dl>
    </section>

    <!-- ============================================================ -->
    <!-- Section 3: Protocol Overview                                  -->
    <!-- ============================================================ -->
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>

      <section anchor="continuous-vs-session">
        <name>Continuous vs. Session-Based Verification</name>

        <t>Traditional session-based verification:</t>

        <artwork type="ascii-art"><![CDATA[
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
        ]]></artwork>

        <t>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.</t>

        <t>RVP continuous verification:</t>

        <artwork type="ascii-art"><![CDATA[
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)
        ]]></artwork>

        <t>Every action produces evidence. The confidence score is
        computed fresh at every moment. There is no cached trust.</t>
      </section>

      <section anchor="verification-moment">
        <name>The Verification Moment</name>

        <t>A Verification Moment is the atomic unit of RVP. It consists
        of:</t>

        <ol>
          <li>TRIGGER: An action is requested (command, API call, data
          access, navigation, transaction)</li>
          <li>PREDICTION: The airlock pre-renders the expected outcome
          based on current state, user profile, and context</li>
          <li>CASCADE: Telemetry layers evaluate identity confidence</li>
          <li>DELTA: Predicted outcome is compared to actual signals</li>
          <li>DECISION: GO, SOFT VERIFY, or HALT</li>
          <li>TOKEN: A Verification Token is produced with all
          evidence</li>
        </ol>

        <t>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.</t>
      </section>

      <section anchor="architecture-overview">
        <name>Architecture Overview</name>

        <figure anchor="arch-diagram">
          <name>RVP Architecture</name>
          <artwork type="ascii-art"><![CDATA[
+------------------------------------------------------------+
|                    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) |
                                 +------------------+
          ]]></artwork>
        </figure>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- Section 4: Verification Cascade                               -->
    <!-- ============================================================ -->
    <section anchor="verification-cascade">
      <name>Verification Cascade</name>

      <t>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.</t>

      <section anchor="cascade-layers">
        <name>Cascade Layers</name>

        <t>RVP defines six standard cascade layers. Implementations MAY
        support additional layers. Implementations MUST support at least
        two layers to qualify as RVP-compliant.</t>

        <artwork type="ascii-art"><![CDATA[
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
        ]]></artwork>

        <t>"Passive" indicates the layer can operate without explicit user
        action. Passive layers are preferred because they enable
        continuous verification without interrupting the user.</t>
      </section>

      <section anchor="layer-activation">
        <name>Layer Activation</name>

        <t>The cascade activates layers based on the Confidence Deficit:
        the difference between the required confidence threshold and
        the current accumulated confidence.</t>

        <artwork type="ascii-art"><![CDATA[
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
        ]]></artwork>

        <t>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:</t>

        <ul>
          <li>Accumulated confidence &gt;= required threshold: GO</li>
          <li>All layers exhausted, confidence &gt; 0 but &lt; threshold:
          SOFT VERIFY (request explicit verification)</li>
          <li>All layers exhausted, confidence &lt; minimum: HALT</li>
          <li>Any single layer produces negative confidence
          (active contradiction): immediate HALT</li>
        </ul>
      </section>

      <section anchor="confidence-scoring">
        <name>Confidence Scoring</name>

        <t>Each cascade layer produces a Layer Confidence value between
        -1.0 and 1.0:</t>

        <ul>
          <li>1.0: Perfect match with profile</li>
          <li>0.0: No signal (layer unavailable or inconclusive)</li>
          <li>-1.0: Active contradiction (definite mismatch)</li>
        </ul>

        <t>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.</t>

        <t>The Accumulated Confidence is computed as:</t>

        <artwork type="ascii-art"><![CDATA[
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
        ]]></artwork>

        <t>Weights MUST sum to 1.0. Default weight distribution assigns
        equal weight to all activated layers.</t>
      </section>

      <section anchor="cascade-resolution">
        <name>Cascade Resolution</name>

        <t>The cascade resolves to one of three states:</t>

        <dl>
          <dt>GO:</dt>
          <dd>C_total &gt;= threshold. Action permitted. Verification Token
          records all layer outputs as evidence.</dd>

          <dt>SOFT VERIFY:</dt>
          <dd>0.0 &lt; C_total &lt; threshold. Action paused. System
          requests additional verification (e.g., explicit fingerprint
          scan, face check). This is NOT a block; it is a request for
          more evidence. The user experience SHOULD be minimal friction
          (e.g., a fingerprint touch, a glance at camera).</dd>

          <dt>HALT:</dt>
          <dd>C_total &lt;= 0.0, or any layer produced active
          contradiction, or all layers exhausted below minimum threshold.
          Action blocked. Full evidence token produced. System MUST NOT
          disclose which specific layer triggered the halt (to prevent
          adversarial adaptation).</dd>
        </dl>
      </section>

      <section anchor="cascade-diagram">
        <name>Cascade Diagram</name>

        <figure anchor="cascade-flow">
          <name>Cascade Flow</name>
          <artwork type="ascii-art"><![CDATA[
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)
          ]]></artwork>
        </figure>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- Section 5: Predictive Airlock                                 -->
    <!-- ============================================================ -->
    <section anchor="predictive-airlock">
      <name>Predictive Airlock</name>

      <t>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.</t>

      <section anchor="pre-rendering">
        <name>Pre-Rendering Expected State</name>

        <t>At each verification moment, the airlock computes:</t>

        <t>EXPECTED_STATE = f(current_state, user_profile,
        action_request)</t>

        <t>This computation uses:</t>

        <ul>
          <li>Current system state (files, processes, network,
          memory)</li>
          <li>User behavioral profile (typical actions, sequences,
          timing)</li>
          <li>The requested action (command, API call, navigation)</li>
          <li>Historical patterns (what usually follows this
          action)</li>
        </ul>

        <t>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>

        <artwork type="ascii-art"><![CDATA[
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
        ]]></artwork>
      </section>

      <section anchor="delta-detection">
        <name>Delta Detection</name>

        <t>The delta between prediction and reality is computed as:</t>

        <artwork type="ascii-art"><![CDATA[
DELTA = distance(EXPECTED_STATE, ACTUAL_STATE)
        ]]></artwork>

        <t>The distance function is domain-specific:</t>

        <ul>
          <li>For commands: edit distance between expected and actual</li>
          <li>For timing: standard deviations from profile mean</li>
          <li>For sequences: probability under profile Markov model</li>
          <li>For outputs: structural diff of expected vs. actual
          result</li>
        </ul>

        <t>A delta of 0.0 means perfect prediction match (strong positive
        signal). Increasing delta values indicate increasing deviation
        from expected behavior.</t>
      </section>

      <section anchor="deviation-classification">
        <name>Deviation Classification</name>

        <t>Deviations are classified into four categories:</t>

        <artwork type="ascii-art"><![CDATA[
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
        ]]></artwork>
      </section>

      <section anchor="airlock-resolution">
        <name>Airlock Resolution</name>

        <t>The airlock contributes to the cascade as L6 (AIRLOCK layer).
        Its confidence output is derived from the delta:</t>

        <artwork type="ascii-art"><![CDATA[
c_airlock = 1.0 - delta
        ]]></artwork>

        <t>This means a perfect prediction match contributes maximum
        confidence, while a complete deviation contributes zero
        (or negative, if the action contradicts the profile
        entirely).</t>

        <t>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.</t>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- Section 6: Telemetry Layers                                   -->
    <!-- ============================================================ -->
    <section anchor="telemetry-layers">
      <name>Telemetry Layers</name>

      <t>Each telemetry layer defines what signals it collects, how
      confidence is computed, and what data is retained (as hashes
      only, never raw biometric data).</t>

      <section anchor="l1-keystroke">
        <name>L1 KEYSTROKE - Input Behavioral Biometrics</name>

        <t>Signals:</t>
        <ul>
          <li>Typing speed (words per minute, rolling average)</li>
          <li>Key press duration (per-key timing profile)</li>
          <li>Inter-key interval patterns</li>
          <li>Error rate and correction patterns</li>
          <li>Language and shorthand patterns (e.g., "t" for "het")</li>
          <li>Capitalization habits</li>
          <li>Command vocabulary (for CLI interactions)</li>
        </ul>

        <t>Confidence computation:</t>
        <ul>
          <li>Compare current session signals to stored profile</li>
          <li>Statistical distance (Mahalanobis) from profile
          centroid</li>
          <li>Confidence = 1.0 - normalized_distance</li>
        </ul>

        <t>Privacy:</t>
        <ul>
          <li>Raw keystrokes are NEVER stored or transmitted</li>
          <li>Only statistical aggregates are retained in profile</li>
          <li>Profile is stored locally, encrypted at rest</li>
          <li>Verification Token contains only: confidence score +
          profile_hash + signal_deviation_category</li>
        </ul>

        <t>Example:</t>

        <artwork type="ascii-art"><![CDATA[
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)
        ]]></artwork>
      </section>

      <section anchor="l2-biometric">
        <name>L2 BIOMETRIC - Physical Identity Signals</name>

        <t>Sub-layers (activated in order):</t>

        <dl>
          <dt>L2a FACE:</dt>
          <dd>Facial geometry hash (not raw image). Liveness detection
          (anti-spoofing). Confidence based on match score to enrolled
          template. Failure modes: poor lighting, camera obstruction,
          face covering produce confidence: 0.0 (inconclusive).</dd>

          <dt>L2b FINGERPRINT:</dt>
          <dd>Minutiae hash (not raw fingerprint). Sensor quality
          assessment. Confidence based on match score to enrolled
          template. Activated when L2a fails or produces low
          confidence.</dd>

          <dt>L2c IRIS (if available):</dt>
          <dd>Iris code hash. Activated when L2a and L2b both fail.</dd>
        </dl>

        <t>Privacy:</t>
        <ul>
          <li>Biometric templates are stored ONLY on-device</li>
          <li>Templates MUST be encrypted with device-bound key</li>
          <li>Templates MUST NOT be transmittable (bound to hardware
          secure element where available, e.g., TEE/SE)</li>
          <li>Verification Token contains only: confidence score +
          method_used + template_hash (not template itself)</li>
        </ul>

        <t>Fallback chain:</t>

        <artwork type="ascii-art"><![CDATA[
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
        ]]></artwork>
      </section>

      <section anchor="l3-device">
        <name>L3 DEVICE - Hardware and Network Context</name>

        <t>Signals:</t>
        <ul>
          <li>Device fingerprint (hardware identifiers, secure
          element)</li>
          <li>Network type and characteristics (WiFi, cellular,
          VPN)</li>
          <li>Geolocation (GPS, cell tower, WiFi positioning)</li>
          <li>NFC responses (for document/card binding)</li>
          <li>Installed software state (relevant security patches)</li>
          <li>Battery state, sensor availability</li>
        </ul>

        <t>Confidence computation:</t>
        <ul>
          <li>Device fingerprint match to enrolled device: 0.3 base</li>
          <li>Network consistency with profile: +0.1 to +0.2</li>
          <li>Location consistency with profile: +0.1 to +0.2</li>
          <li>NFC document binding (passport, ID): +0.3</li>
        </ul>

        <t>Anomaly detection:</t>
        <ul>
          <li>VPN where profile shows direct connection: -0.2</li>
          <li>New country where profile shows single country: -0.3</li>
          <li>Device fingerprint mismatch: -0.5 to -1.0</li>
          <li>NFC document mismatch: -1.0 (immediate HALT)</li>
        </ul>

        <t>NFC Document Binding:</t>

        <artwork type="ascii-art"><![CDATA[
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
        ]]></artwork>

        <t>This layer is critical for <xref target="EIDAS2"/> compliance,
        where the European Digital Identity Wallet (EUDIW) requires
        high-assurance identity verification for cross-border
        services.</t>
      </section>

      <section anchor="l4-vocal">
        <name>L4 VOCAL - Acoustic Telemetry</name>

        <t>Signals:</t>
        <ul>
          <li>Voice frequency profile (fundamental + harmonics)</li>
          <li>Speech cadence and rhythm</li>
          <li>Sub-verbal signals (throat sounds, acknowledgments)</li>
          <li>Silence/speech ratio patterns</li>
          <li>DTMF-like tonal analysis for non-speech
          vocalizations</li>
        </ul>

        <t>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.</t>

        <t>Confidence computation:</t>
        <ul>
          <li>Voice profile match: 0.0 to 0.7</li>
          <li>Sub-verbal pattern match: 0.0 to 0.3</li>
          <li>Combined: weighted sum</li>
        </ul>

        <t>Privacy:</t>
        <ul>
          <li>Audio is processed in real-time and immediately
          discarded</li>
          <li>Only statistical features are retained (frequency
          profile)</li>
          <li>Raw audio MUST NOT be stored or transmitted</li>
          <li>User MUST explicitly consent to vocal telemetry</li>
        </ul>

        <t>Human DTMF Integration:</t>

        <t>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.</t>
      </section>

      <section anchor="l5-behavioral">
        <name>L5 BEHAVIORAL - Intent vs. Action Analysis</name>

        <t>Signals:</t>
        <ul>
          <li>Action sequence probability (does this action follow
          logically from previous actions?)</li>
          <li>Time-of-day patterns (active hours profile)</li>
          <li>Interaction frequency and rhythm</li>
          <li>Task context (what project, what goal)</li>
          <li>Command sophistication level (matches user skill
          profile?)</li>
        </ul>

        <t>Confidence computation:</t>
        <ul>
          <li>Action probability under profile model: 0.0 to 0.5</li>
          <li>Temporal consistency: 0.0 to 0.2</li>
          <li>Context consistency: 0.0 to 0.3</li>
        </ul>

        <t>This layer detects anomalies like:</t>
        <ul>
          <li>A developer suddenly running unfamiliar admin
          commands</li>
          <li>Actions at 3 AM when profile shows 9-23 active hours</li>
          <li>Sophisticated attacks from a profile with basic skill
          level</li>
          <li>Rapid command sequences where profile shows deliberate
          pace</li>
        </ul>
      </section>

      <section anchor="l6-airlock">
        <name>L6 AIRLOCK - Predictive Delta Verification</name>

        <t>This layer uses the Predictive Airlock
        (<xref target="predictive-airlock"/>) 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.</t>

        <t>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.</t>

        <t>Confidence computation:</t>
        <ul>
          <li>Delta = 0.0: full confidence (1.0)</li>
          <li>Delta = 0.5: moderate confidence (0.5)</li>
          <li>Delta = 1.0: zero confidence (0.0)</li>
          <li>Delta &gt; 1.0 (impossible action): negative (-0.5 to
          -1.0)</li>
        </ul>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- Section 7: Verification Token                                 -->
    <!-- ============================================================ -->
    <section anchor="verification-token">
      <name>Verification Token</name>

      <t>Every verification moment produces exactly one Verification
      Token. The token is the atomic evidence unit of RVP.</t>

      <section anchor="token-structure">
        <name>Token Structure</name>

        <figure anchor="token-example">
          <name>Verification Token Example</name>
          <sourcecode type="json"><![CDATA[
{
  "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..."
}
          ]]></sourcecode>
        </figure>
      </section>

      <section anchor="token-lifecycle">
        <name>Token Lifecycle</name>

        <t>Verification Tokens are immutable once created. They follow
        a simple lifecycle:</t>

        <artwork type="ascii-art"><![CDATA[
CREATED -> STORED -> (optionally) CHAINED -> ARCHIVED
        ]]></artwork>

        <t>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.</t>
      </section>

      <section anchor="token-chain">
        <name>Token Chain</name>

        <t>Consecutive Verification Tokens form a chain. Each token
        references its predecessor:</t>

        <sourcecode type="json"><![CDATA[
{
  "token_id": "rvp-b8c4d0e3f2a5",
  "previous_token": "rvp-a7b3c9d2e4f1",
  "chain_length": 47,
  "chain_confidence_trend": "stable"
}
        ]]></sourcecode>

        <t>The chain provides:</t>

        <ul>
          <li>CONTINUITY PROOF: This identity has been continuously
          verified for N moments over T time period</li>
          <li>TREND ANALYSIS: Confidence is stable, rising, or
          falling</li>
          <li>ANOMALY DETECTION: A sudden break in the chain (missing
          tokens) is itself a verification signal</li>
        </ul>
      </section>

      <section anchor="tibet-integration">
        <name>TIBET Integration</name>

        <t>Every Verification Token includes TIBET provenance fields
        <xref target="TIBET"/>:</t>

        <ul>
          <li>ERIN (what's in it): The verification result and
          method</li>
          <li>ERAAN (what's attached): Profile hash, device hash,
          action hash, previous token reference</li>
          <li>EROMHEEN (what's around it): Location, network, device
          state, environmental context</li>
          <li>ERACHTER (what's behind it): Why this verification was
          triggered (action request, timer, anomaly)</li>
        </ul>

        <t>This ensures every verification moment is not just recorded
        but PROVENANCE-TRACKED: who verified, how, when, why, and
        with what evidence.</t>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- Section 8: Cascade Fallback Protocol                          -->
    <!-- ============================================================ -->
    <section anchor="cascade-fallback">
      <name>Cascade Fallback Protocol</name>

      <t>When a cascade layer fails (hardware unavailable, inconclusive
      result, or active contradiction), RVP defines a structured
      fallback protocol.</t>

      <section anchor="fallback-triggers">
        <name>Fallback Triggers</name>

        <t>A fallback is triggered when:</t>

        <ul>
          <li>Layer hardware is unavailable (camera broken, no NFC)</li>
          <li>Layer produces confidence = 0.0 (inconclusive)</li>
          <li>Layer produces negative confidence (contradiction)</li>
          <li>Layer times out (exceeds latency budget)</li>
        </ul>
      </section>

      <section anchor="fallback-flow">
        <name>Fallback Flow</name>

        <artwork type="ascii-art"><![CDATA[
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
        ]]></artwork>

        <t>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).</t>
      </section>

      <section anchor="flare-integration">
        <name>Flare Integration</name>

        <t>When a verification cascade cannot complete locally (all local
        methods exhausted, device degraded), RVP MAY use the Flare
        Rescue Protocol <xref target="FLARE"/> to request verification
        assistance from a nearby trusted node.</t>

        <artwork type="ascii-art"><![CDATA[
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)
        ]]></artwork>

        <t>Flare-assisted verification MUST be recorded in the
        Verification Token with the assisting node's identity and
        the specific methods used.</t>
      </section>

      <section anchor="hard-stop-conditions">
        <name>Hard Stop Conditions</name>

        <t>RVP defines conditions that trigger immediate HALT regardless
        of accumulated confidence:</t>

        <ol>
          <li>Any layer produces confidence &lt;= -0.5 (strong
          contradiction)</li>
          <li>Device fingerprint does not match any enrolled device</li>
          <li>NFC document signature verification fails</li>
          <li>Cascade chain shows gap (missing tokens in sequence)</li>
          <li>Concurrent sessions detected on different devices with
          conflicting identity claims</li>
        </ol>

        <t>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).</t>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- Section 9: Credential Binding                                 -->
    <!-- ============================================================ -->
    <section anchor="credential-binding">
      <name>Credential Binding</name>

      <t>RVP provides the evidence layer beneath W3C Verifiable
      Credentials <xref target="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.</t>

      <section anchor="vc-integration">
        <name>W3C Verifiable Credentials Integration</name>

        <t>A Verifiable Credential (VC) consists of:</t>

        <ul>
          <li>Claims (e.g., "age &gt;= 18", "name: ...",
          "nationality: ...")</li>
          <li>Issuer signature</li>
          <li>Credential metadata</li>
        </ul>

        <t>What a VC does NOT contain:</t>

        <ul>
          <li>HOW the issuer verified the claims</li>
          <li>WHEN the verification last occurred</li>
          <li>Whether the subject is still the person who was
          verified</li>
          <li>What evidence supports the claims right now</li>
        </ul>

        <t>RVP fills this gap by attaching an RVP Evidence Chain to
        any Verifiable Credential:</t>

        <sourcecode type="json"><![CDATA[
{
  "@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
  }
}
        ]]></sourcecode>
      </section>

      <section anchor="credential-issuance">
        <name>Credential Issuance from RVP Evidence</name>

        <t>A credential issuer can use an RVP evidence chain as the
        basis for issuing a Verifiable Credential:</t>

        <artwork type="ascii-art"><![CDATA[
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)               |
        ]]></artwork>
      </section>

      <section anchor="credential-presentation">
        <name>Credential Presentation with RVP Proof</name>

        <t>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:</t>

        <artwork type="ascii-art"><![CDATA[
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) -----------|
        ]]></artwork>

        <t>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.</t>
      </section>

      <section anchor="age-verification">
        <name>Age Verification Use Case</name>

        <t>A common W3C VC use case is age verification. RVP enables
        continuous age verification without revealing exact age:</t>

        <artwork type="ascii-art"><![CDATA[
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
        ]]></artwork>
      </section>

      <section anchor="digital-passport">
        <name>Digital Passport / Digital ID (eIDAS 2.0)</name>

        <t>The European Digital Identity Wallet (EUDIW), mandated by
        <xref target="EIDAS2"/> regulation, requires:</t>

        <ul>
          <li>High-assurance identity verification (Level of Assurance:
          High)</li>
          <li>Cross-border interoperability</li>
          <li>User control over shared attributes</li>
          <li>Offline capability</li>
        </ul>

        <t>RVP aligns with EUDIW by providing:</t>

        <ul>
          <li>LOA High verification through cascade (NFC document +
          biometric + device binding)</li>
          <li>Interoperable evidence tokens (<xref target="RFC8259">JSON</xref>, TIBET-signed)</li>
          <li>Selective disclosure: only confidence scores and method
          types are shared, never raw biometric data</li>
          <li>Offline: cascade operates locally, tokens stored on-device,
          evidence chain verifiable without network</li>
        </ul>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- Section 10: Local-First Architecture                          -->
    <!-- ============================================================ -->
    <section anchor="local-first">
      <name>Local-First Architecture</name>

      <section anchor="on-device">
        <name>On-Device Processing</name>

        <t>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.</t>

        <t>Implementations MUST:</t>

        <ul>
          <li>Process all biometric data on-device</li>
          <li>Store profiles only on-device (encrypted at rest)</li>
          <li>Generate verification tokens locally</li>
          <li>Operate without network connectivity (degraded but
          functional)</li>
        </ul>

        <t>Implementations MUST NOT:</t>

        <ul>
          <li>Transmit raw biometric data to any external service</li>
          <li>Require a centralized server for cascade evaluation</li>
          <li>Store profiles in cloud storage</li>
          <li>Depend on network connectivity for basic
          verification</li>
        </ul>
      </section>

      <section anchor="edge-verification">
        <name>Edge Verification</name>

        <t>For scenarios requiring cross-device verification (e.g., a
        terminal at an airport, a point-of-sale system), RVP supports
        edge verification:</t>

        <artwork type="ascii-art"><![CDATA[
User device                Edge node              Service
     |                         |                      |
     |-- RVP token + VC ------>|                      |
     |                         |                      |
     |   Edge verifies:        |                      |
     |   - Token signature     |                      |
     |   - Chain integrity     |                      |
     |   - Freshness (<10s)    |                      |
     |                         |                      |
     |                         |-- verified claim --->|
     |                         |                      |
        ]]></artwork>

        <t>The edge node NEVER receives raw biometric data. It receives
        only the Verification Token (confidence scores, method types,
        hashes) and the Verifiable Credential.</t>
      </section>

      <section anchor="network-independence">
        <name>Network Independence</name>

        <t>RVP defines three operation modes:</t>

        <dl>
          <dt>ONLINE:</dt>
          <dd>Full cascade, Flare backup available, token sync</dd>

          <dt>OFFLINE:</dt>
          <dd>Local cascade only, tokens stored for later sync</dd>

          <dt>DEGRADED:</dt>
          <dd>Partial cascade (some layers require network), reduced
          confidence thresholds accepted</dd>
        </dl>

        <t>The protocol MUST gracefully degrade:</t>

        <artwork type="ascii-art"><![CDATA[
Online:   L1 + L2 + L3 + L4 + L5 + L6 -> full confidence
Offline:  L1 + L2 + L6 -> reduced but functional
Degraded: L1 + L6 -> minimal but non-zero confidence
        ]]></artwork>
      </section>

      <section anchor="latency-requirements">
        <name>Latency Requirements</name>

        <t>RVP verification overhead MUST NOT degrade user experience.
        Target latency budgets:</t>

        <artwork type="ascii-art"><![CDATA[
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)
        ]]></artwork>

        <t>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.</t>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- Section 11: Transport Considerations                          -->
    <!-- ============================================================ -->
    <section anchor="transport">
      <name>Transport Considerations</name>

      <section anchor="five-g-integration">
        <name>5G Integration</name>

        <t>Current 5G networks provide:</t>

        <ul>
          <li>Sub-1ms radio latency (theoretical)</li>
          <li>1-10ms end-to-end latency (practical)</li>
          <li>100 Mbps - 1 Gbps throughput</li>
        </ul>

        <t>This is sufficient for RVP edge verification: a verification
        token (&lt; 2KB) can be transmitted to an edge node and verified
        within the 50ms interactive budget.</t>

        <t>5G network slicing can provide dedicated RVP verification
        channels with guaranteed latency for high-assurance scenarios
        (e.g., border control, financial transactions).</t>
      </section>

      <section anchor="six-g-preparedness">
        <name>6G Preparedness</name>

        <t>Projected 6G specifications
        (<xref target="ITU-IMT2030"/>):</t>

        <ul>
          <li>Sub-0.1ms latency</li>
          <li>50-200 Gbps throughput</li>
          <li>Native AI/ML integration</li>
          <li>Sensing capabilities (environment-aware network)</li>
        </ul>

        <t>6G enables RVP capabilities not feasible on 5G:</t>

        <ul>
          <li>Network-layer telemetry as a cascade layer (the network
          itself provides identity signals)</li>
          <li>Real-time biometric streaming for edge verification
          (with user consent) at zero perceptible latency</li>
          <li>Distributed cascade across device + network + edge in
          under 1ms total</li>
        </ul>

        <t>RVP is designed to be 6G-ready by:</t>

        <ul>
          <li>Defining cascade layers as pluggable (new layers for
          network-native sensing)</li>
          <li>Using I-Poll transport that adapts to available
          bandwidth</li>
          <li>Supporting sub-millisecond token generation</li>
        </ul>
      </section>

      <section anchor="offline-operation">
        <name>Offline Operation</name>

        <t>RVP MUST operate fully offline. In offline mode:</t>

        <ul>
          <li>Only on-device cascade layers are available</li>
          <li>Tokens are stored locally with monotonic sequence
          numbers</li>
          <li>When connectivity resumes, stored tokens MAY be synced
          to a verification log (if configured)</li>
          <li>Confidence thresholds MAY be adjusted for offline mode
          (implementation-specific policy)</li>
        </ul>
      </section>

      <section anchor="ipoll-transport">
        <name>I-Poll Transport</name>

        <t>For AI-to-AI verification and Flare rescue, RVP uses I-Poll
        <xref target="IPOLL"/> as its messaging transport. I-Poll
        provides:</t>

        <ul>
          <li>HTTP-based push/pull messaging</li>
          <li>Agent addressing via AINS (.aint domains)
          <xref target="AINS"/></li>
          <li>Message types: PUSH, PULL, SYNC, TASK, ACK</li>
          <li>Trust scoring per agent (FIR/A)</li>
        </ul>

        <t>RVP verification tokens are transported as I-Poll messages
        with metadata type "rvp_verification":</t>

        <sourcecode type="json"><![CDATA[
{
  "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
  }
}
        ]]></sourcecode>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- Section 12: Security Considerations                           -->
    <!-- ============================================================ -->
    <section anchor="security">
      <name>Security Considerations</name>

      <section anchor="evidence-vs-enforcement">
        <name>Evidence vs. Enforcement</name>

        <t>RVP follows the principle of EVIDENCE OVER ENFORCEMENT. The
        protocol produces cryptographic evidence of verification
        outcomes. It does NOT prescribe enforcement policy.</t>

        <t>An implementation MAY:</t>

        <ul>
          <li>Block actions when confidence is below threshold</li>
          <li>Allow actions with reduced privileges</li>
          <li>Require additional verification</li>
          <li>Log and alert without blocking</li>
        </ul>

        <t>The choice of enforcement is a POLICY decision, not a
        PROTOCOL decision. RVP provides the evidence; the deployment
        context determines the response.</t>

        <t>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.</t>
      </section>

      <section anchor="biometric-data-protection">
        <name>Biometric Data Protection</name>

        <t>RVP implementations MUST comply with biometric data
        protection requirements:</t>

        <ul>
          <li>Biometric templates MUST be stored only on-device</li>
          <li>Templates MUST be encrypted with device-bound keys</li>
          <li>Raw biometric data MUST be processed and immediately
          discarded (not stored, not transmitted)</li>
          <li>Verification Tokens MUST NOT contain biometric data
          (only method type, confidence score, template hash)</li>
          <li>Users MUST be able to delete all biometric data and
          profiles at any time</li>
        </ul>

        <t>These requirements align with <xref target="GDPR"/> Article 9
        (special categories of personal data),
        <xref target="EU-AI-ACT"/> requirements for biometric
        identification systems, and <xref target="EIDAS2"/> data
        minimization principles.</t>
      </section>

      <section anchor="replay-attacks">
        <name>Replay Attacks</name>

        <t>An attacker who captures a Verification Token cannot replay
        it because:</t>

        <ul>
          <li>Each token includes a millisecond-precision
          timestamp</li>
          <li>Each token references its predecessor (chain
          integrity)</li>
          <li>Each token includes a nonce derived from device
          state</li>
          <li>Verifiers SHOULD reject tokens older than a configurable
          freshness window (default: 10 seconds)</li>
        </ul>
      </section>

      <section anchor="adversarial-inputs">
        <name>Adversarial Inputs</name>

        <t>Adversarial attacks on cascade layers:</t>

        <ul>
          <li>FACE SPOOFING: Mitigated by liveness detection (L2a).
          RVP RECOMMENDS 3D liveness detection (depth sensing)
          over 2D photo-based detection.</li>
          <li>FINGERPRINT SPOOFING: Mitigated by sensor quality
          assessment and capacitive/ultrasonic sensing.</li>
          <li>KEYSTROKE MIMICRY: Difficult at scale; requires matching
          dozens of timing parameters simultaneously. Statistical
          detection of "too perfect" matches.</li>
          <li>BEHAVIORAL MIMICRY: Requires sustained matching of action
          patterns, timing, and sequences. Impractical for extended
          sessions.</li>
        </ul>

        <t>Multi-layer cascade is the primary defense: spoofing one
        layer is feasible; spoofing four or more simultaneously is
        exponentially harder.</t>
      </section>

      <section anchor="privacy-by-design">
        <name>Privacy by Design</name>

        <t>RVP incorporates privacy by design at every level:</t>

        <ul>
          <li>MINIMIZATION: Only confidence scores and method types
          leave the device, never raw data</li>
          <li>LOCAL PROCESSING: All biometric and behavioral analysis
          runs on-device</li>
          <li>SELECTIVE DISCLOSURE: User controls which verification
          evidence is shared with which verifier</li>
          <li>UNLINKABILITY: Verification Tokens use per-verifier
          pseudonymous identifiers to prevent cross-service
          tracking</li>
          <li>DELETION: Users can delete all profiles and tokens at
          any time with immediate effect</li>
        </ul>
      </section>

      <section anchor="telemetry-minimization">
        <name>Telemetry Minimization</name>

        <t>Each cascade layer MUST implement the principle of minimal
        telemetry:</t>

        <ul>
          <li>Collect only what is needed for confidence
          computation</li>
          <li>Process immediately, retain only statistical
          aggregates</li>
          <li>Discard raw signals after processing</li>
          <li>Store only hashes in verification tokens</li>
        </ul>

        <t>Implementations MUST provide a telemetry manifest listing
        every signal collected, its purpose, retention period, and
        deletion procedure.</t>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- Section 13: Regulatory Alignment                              -->
    <!-- ============================================================ -->
    <section anchor="regulatory">
      <name>Regulatory Alignment</name>

      <section anchor="eu-ai-act-alignment">
        <name>EU AI Act</name>

        <t>The <xref target="EU-AI-ACT"/> classifies real-time biometric
        identification as high-risk (Annex III, Category 1). RVP
        addresses AI Act requirements by:</t>

        <ul>
          <li>Providing full audit trails (Article 12 -
          Record-keeping)</li>
          <li>Enabling human oversight (Article 14 - via HALT
          mechanism)</li>
          <li>Ensuring transparency (Article 13 - cascade path
          recorded)</li>
          <li>Supporting risk management (Article 9 - confidence
          scoring)</li>
          <li>Operating locally (minimizing mass surveillance
          risk)</li>
        </ul>

        <t>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.</t>
      </section>

      <section anchor="eidas2-alignment">
        <name>eIDAS 2.0 / EUDIW</name>

        <t>The European Digital Identity Wallet regulation
        (<xref target="EIDAS2"/>) requires:</t>

        <ul>
          <li>Level of Assurance High for cross-border identity</li>
          <li>Qualified Electronic Signatures</li>
          <li>Selective attribute disclosure</li>
          <li>Offline operation capability</li>
        </ul>

        <t>RVP provides the verification evidence layer that supports
        LOA High through multi-factor cascade (biometric + document +
        device), with full audit trail and offline operation.</t>
      </section>

      <section anchor="nis2-alignment">
        <name>NIS2 Directive</name>

        <t><xref target="NIS2"/> requires essential and important entities
        to implement risk management measures including access control
        and incident evidence. RVP provides:</t>

        <ul>
          <li>Continuous access verification (not session-based)</li>
          <li>Incident evidence through verification chain
          anomalies</li>
          <li>Tamper-evident audit trail</li>
        </ul>
      </section>

      <section anchor="gdpr-alignment">
        <name>GDPR</name>

        <t>RVP is designed for <xref target="GDPR"/> compliance:</t>

        <ul>
          <li>Article 5(1)(c) - Data minimization: only hashes
          transmitted</li>
          <li>Article 9 - Biometric data: processed locally only</li>
          <li>Article 17 - Right to erasure: full deletion
          supported</li>
          <li>Article 25 - Data protection by design: privacy is
          architectural, not bolted on</li>
          <li>Article 35 - DPIA: cascade configuration enables
          proportionality assessment</li>
        </ul>
      </section>

      <section anchor="dora-alignment">
        <name>DORA</name>

        <t>The Digital Operational Resilience Act
        (<xref target="DORA"/>) requires financial entities to maintain
        ICT risk management frameworks. RVP supports DORA by:</t>

        <ul>
          <li>Providing continuous verification of operator
          identity</li>
          <li>Producing audit evidence for ICT incident reporting</li>
          <li>Supporting operational resilience through offline
          capability</li>
          <li>Enabling third-party risk assessment through verification
          chain analysis</li>
        </ul>
      </section>

      <section anchor="w3c-vc-alignment">
        <name>W3C Verified Credentials</name>

        <t>RVP is designed as a complementary protocol to W3C Verifiable
        Credentials <xref target="VC-DATA-MODEL"/>. It does not replace
        VCs; it provides the EVIDENCE LAYER that VCs currently lack.</t>

        <t>A Verifiable Credential answers: "What is claimed?"
        RVP answers: "How was it verified, and is it still true?"</t>

        <t>Together, they provide a complete identity verification
        stack: claims + evidence + continuous proof.</t>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- Section 14: IANA Considerations                               -->
    <!-- ============================================================ -->
    <section anchor="iana">
      <name>IANA Considerations</name>

      <t>This document defines the following protocol identifiers:</t>

      <dl>
        <dt>Protocol prefix:</dt>
        <dd>"rvp:" -- Identifies RVP verification tokens</dd>

        <dt>Hash format:</dt>
        <dd>"rvp:sha256:&lt;hex&gt;" -- SHA-256 hash of verification
        token</dd>

        <dt>Token ID format:</dt>
        <dd>"rvp-&lt;hex12&gt;" -- 12-character hexadecimal
        identifier</dd>

        <dt>MIME type (registration requested):</dt>
        <dd>"application/rvp+json" -- RVP verification token in
        JSON</dd>

        <dt>I-Poll metadata type:</dt>
        <dd>"rvp_verification" -- Identifies I-Poll messages carrying
        RVP verification tokens</dd>
      </dl>
    </section>
  </middle>

  <back>
    <!-- ============================================================ -->
    <!-- References                                                    -->
    <!-- ============================================================ -->
    <references>
      <name>References</name>

      <references>
        <name>Normative References</name>

        <reference anchor="RFC2119"
                   target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate
                   Requirement Levels</title>
            <author fullname="S. Bradner" initials="S."
                    surname="Bradner"/>
            <date month="March" year="1997"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
        </reference>

        <reference anchor="RFC8174"
                   target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in
                   RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B."
                    surname="Leiba"/>
            <date month="May" year="2017"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
        </reference>

        <reference anchor="RFC8259"
                   target="https://www.rfc-editor.org/info/rfc8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data
                   Interchange Format</title>
            <author fullname="T. Bray" initials="T." surname="Bray"/>
            <date month="December" year="2017"/>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
        </reference>
      </references>

      <references>
        <name>Informative References</name>

        <reference anchor="TIBET">
          <front>
            <title>TIBET: Transaction/Interaction-Based Evidence
                   Trail</title>
            <author fullname="J. van de Meent" initials="J."
                    surname="van de Meent"/>
            <author fullname="Root AI" surname="Root AI"/>
            <date month="January" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft"
                      value="draft-vandemeent-tibet-provenance-00"/>
        </reference>

        <reference anchor="UPIP">
          <front>
            <title>UPIP: Universal Process Integrity Protocol with
                   Fork Tokens for Multi-Actor Continuation</title>
            <author fullname="J. van de Meent" initials="J."
                    surname="van de Meent"/>
            <author fullname="Root AI" surname="Root AI"/>
            <date month="March" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft"
                      value="draft-vandemeent-upip-process-integrity-00"/>
        </reference>

        <reference anchor="JIS">
          <front>
            <title>JIS: JTel Identity Standard</title>
            <author fullname="J. van de Meent" initials="J."
                    surname="van de Meent"/>
            <author fullname="Root AI" surname="Root AI"/>
            <date month="January" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft"
                      value="draft-vandemeent-jis-identity-00"/>
        </reference>

        <reference anchor="FLARE">
          <front>
            <title>Flare Rescue Protocol for API Failover</title>
            <author fullname="Jasper van de Meent" initials="J."
                    surname="van de Meent"/>
            <author fullname="Root AI" surname="Root AI"/>
            <date month="March" year="2026"/>
          </front>
          <refcontent>tibet-triage v0.5.0,
          https://pypi.org/project/tibet-triage/</refcontent>
        </reference>

        <reference anchor="IPOLL">
          <front>
            <title>I-Poll: AI-to-AI Messaging Protocol</title>
            <author fullname="Jasper van de Meent" initials="J."
                    surname="van de Meent"/>
            <author fullname="Root AI" surname="Root AI"/>
            <date year="2025"/>
          </front>
          <refcontent>brain-api</refcontent>
        </reference>

        <reference anchor="AINS">
          <front>
            <title>AINS: AInternet Name Service</title>
            <author fullname="Jasper van de Meent" initials="J."
                    surname="van de Meent"/>
            <author fullname="Root AI" surname="Root AI"/>
            <date year="2025"/>
          </front>
          <refcontent>brain-api</refcontent>
        </reference>

        <reference anchor="VC-DATA-MODEL">
          <front>
            <title>Verifiable Credentials Data Model v2.0</title>
            <author fullname="M. Sporny" initials="M."
                    surname="Sporny"/>
            <author fullname="G. Noble" initials="G."
                    surname="Noble"/>
            <author fullname="D. Longley" initials="D."
                    surname="Longley"/>
            <author fullname="D. Burnett" initials="D."
                    surname="Burnett"/>
            <author fullname="B. Zundel" initials="B."
                    surname="Zundel"/>
            <author fullname="K. Den Hartog" initials="K."
                    surname="Den Hartog"/>
            <date month="March" year="2024"/>
          </front>
          <refcontent>W3C Recommendation</refcontent>
        </reference>

        <reference anchor="EIDAS2">
          <front>
            <title>Regulation (EU) 2024/1183 amending Regulation
                   (EU) No 910/2014 as regards establishing the
                   European Digital Identity Framework</title>
            <author>
              <organization>European Parliament</organization>
            </author>
            <date month="April" year="2024"/>
          </front>
        </reference>

        <reference anchor="EU-AI-ACT">
          <front>
            <title>Regulation (EU) 2024/1689 laying down harmonised
                   rules on artificial intelligence (Artificial
                   Intelligence Act)</title>
            <author>
              <organization>European Parliament</organization>
            </author>
            <date month="June" year="2024"/>
          </front>
        </reference>

        <reference anchor="NIS2">
          <front>
            <title>Directive (EU) 2022/2555 on measures for a high
                   common level of cybersecurity across the
                   Union</title>
            <author>
              <organization>European Parliament</organization>
            </author>
            <date month="December" year="2022"/>
          </front>
        </reference>

        <reference anchor="GDPR">
          <front>
            <title>Regulation (EU) 2016/679 on the protection of
                   natural persons with regard to the processing of
                   personal data (General Data Protection
                   Regulation)</title>
            <author>
              <organization>European Parliament</organization>
            </author>
            <date month="April" year="2016"/>
          </front>
          <seriesInfo name="Regulation (EU)" value="2016/679"/>
        </reference>

        <reference anchor="DORA">
          <front>
            <title>Regulation (EU) 2022/2554 on digital operational
                   resilience for the financial sector</title>
            <author>
              <organization>European Parliament</organization>
            </author>
            <date month="December" year="2022"/>
          </front>
        </reference>

        <reference anchor="FIDO2">
          <front>
            <title>FIDO2: Web Authentication (WebAuthn)</title>
            <author>
              <organization>FIDO Alliance</organization>
            </author>
            <date year="2019"/>
          </front>
          <refcontent>W3C Recommendation</refcontent>
        </reference>

        <reference anchor="ITU-IMT2030">
          <front>
            <title>Framework and overall objectives of the future
                   development of IMT for 2030 and beyond</title>
            <author>
              <organization>ITU-R</organization>
            </author>
            <date month="November" year="2023"/>
          </front>
          <seriesInfo name="Recommendation ITU-R" value="M.2160"/>
        </reference>
      </references>
    </references>

    <!-- ============================================================ -->
    <!-- Appendix A: Verification Token JSON Schema                    -->
    <!-- ============================================================ -->
    <section anchor="appendix-token-schema">
      <name>Verification Token JSON Schema</name>

      <sourcecode type="json"><![CDATA[
{
  "$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}$"
    }
  }
}
      ]]></sourcecode>
    </section>

    <!-- ============================================================ -->
    <!-- Appendix B: Cascade Configuration Schema                      -->
    <!-- ============================================================ -->
    <section anchor="appendix-cascade-config">
      <name>Cascade Configuration Schema</name>

      <sourcecode type="json"><![CDATA[
{
  "$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
    }
  }
}
      ]]></sourcecode>
    </section>

    <!-- ============================================================ -->
    <!-- Appendix C: Use Case Examples                                 -->
    <!-- ============================================================ -->
    <section anchor="appendix-use-cases">
      <name>Use Case Examples</name>

      <section anchor="use-case-pos">
        <name>Age Verification at Point of Sale</name>

        <t>A 19-year-old purchases alcohol at a self-checkout
        terminal.</t>

        <artwork type="ascii-art"><![CDATA[
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
        ]]></artwork>

        <t>At no point did the terminal receive: exact age, name, face
        image, fingerprint, or passport number. Only: "18+" claim
        + verification confidence.</t>
      </section>

      <section anchor="use-case-developer">
        <name>Continuous Developer Authentication</name>

        <t>A developer works on a production system for 4 hours.</t>

        <artwork type="ascii-art"><![CDATA[
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
        ]]></artwork>
      </section>

      <section anchor="use-case-child">
        <name>Child on Parent's Device</name>

        <t>Jasper's 7-year-old son Storm uses his laptop.</t>

        <artwork type="ascii-art"><![CDATA[
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."
        ]]></artwork>

        <t>No alarm. No block. Just: correct identification through
        evidence, appropriate permission adjustment, full audit
        trail.</t>
      </section>

      <section anchor="use-case-vpn">
        <name>VPN Anomaly Detection</name>

        <t>An attacker obtains Jasper's credentials and connects via
        VPN.</t>

        <artwork type="ascii-art"><![CDATA[
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.
        ]]></artwork>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- Appendix D: Comparison with Existing Standards                -->
    <!-- ============================================================ -->
    <section anchor="appendix-comparison">
      <name>Comparison with Existing Standards</name>

      <artwork type="ascii-art"><![CDATA[
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
      ]]></artwork>

      <t>RVP is NOT a replacement for these standards, including
      <xref target="FIDO2"/>. It is a COMPLEMENTARY LAYER that
      provides continuous verification evidence on top of existing
      identity and authentication frameworks.</t>
    </section>

    <!-- ============================================================ -->
    <!-- Acknowledgements                                              -->
    <!-- ============================================================ -->
    <section anchor="acknowledgements" numbered="false">
      <name>Acknowledgements</name>
      <t>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.</t>
      <t>The design principles of evidence-over-enforcement and
      local-first architecture reflect the belief that identity
      verification should serve the individual, not surveil them.</t>
    </section>
  </back>
</rfc>
