<?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="info"
     docName="draft-vandemeent-rvp-continuous-verification-01"
     ipr="trust200902"
     submissionType="IETF"
     consensus="true"
     version="3">

  <front>
    <title abbrev="RVP">RVP: Real-time Verification Protocol - Continuous Identity and Process Verification</title>

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

    <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="29"/>

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

    <keyword>verification</keyword>
    <keyword>continuous authentication</keyword>
    <keyword>identity</keyword>
    <keyword>biometrics</keyword>
    <keyword>cascade</keyword>

    <abstract>
      <t>This document defines RVP (Real-time Verification Protocol),
      a protocol for continuous identity verification through
      ordered cascades of verification methods. Unlike traditional
      authentication models that verify once and trust until session
      expiry, RVP treats every interaction as a verification
      moment. Each moment produces a Verification Token: a
      cryptographic evidence record capturing which methods were
      used, what confidence each produced, and whether the
      accumulated confidence meets the required threshold.</t>

      <t>RVP defines a Verification Cascade: an ordered chain of
      verification methods (behavioral biometrics, physical
      identity, device context) where each layer activates only
      when preceding layers produce insufficient confidence. The
      cascade produces evidence at every step; enforcement is a
      local policy decision.</t>

      <t>RVP integrates with TIBET <xref target="TIBET"/> for provenance tokens and
      JIS <xref target="JIS"/> for identity semantics. The protocol is designed
      for local-first operation with no dependency on centralized
      identity providers.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Modern identity verification operates on a fundamental
      assumption: verify once, trust until the session expires. A
      user authenticates at login and the system grants a session
      token valid for minutes, hours, or days. During that period,
      the system has no evidence that the same person is still
      present, that the device has not been compromised, or that
      the user's intent aligns with their actions.</t>

      <t>RVP replaces this "verify-then-trust" model with continuous
      evidence-based verification. Every interaction is a
      verification moment that produces a cryptographic evidence
      token recording identity confidence at that point.</t>

      <section anchor="problem-statement">
        <name>Problem Statement</name>
        <t>Current verification systems suffer from:</t>

        <ol>
          <li>TEMPORAL GAP: Verification at login proves nothing about
          identity minutes later.</li>
          <li>SINGLE MODALITY: Systems rely on one method. When it
          fails, no fallback with evidence exists.</li>
          <li>CENTRALIZED TRUST: Identity providers are single points
          of failure and surveillance.</li>
          <li>ENFORCEMENT WITHOUT EVIDENCE: Systems block actions but
          do not record WHY the request was suspicious or WHAT
          signals contributed.</li>
        </ol>
      </section>

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

        <dl>
          <dt>EVIDENCE OVER ENFORCEMENT:</dt>
          <dd>RVP produces evidence. Whether to block, allow, or
          escalate is a local policy decision.</dd>

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

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

          <dt>MINIMAL OVER MAXIMAL:</dt>
          <dd>Each moment collects only the telemetry needed for the
          current confidence level. Raw biometric data never leaves
          the device.</dd>
        </dl>
      </section>

      <section anchor="scope">
        <name>Scope</name>
        <t>This document defines:</t>
        <ul>
          <li>The verification cascade model</li>
          <li>Five standard telemetry layers</li>
          <li>The verification token format</li>
          <li>Cascade fallback and hard stop conditions</li>
          <li>Integration with W3C Verifiable Credentials</li>
        </ul>

        <t>This document does NOT define:</t>
        <ul>
          <li>Specific biometric algorithms</li>
          <li>Scoring formulas (local policy)</li>
          <li>Transport-layer security (use TLS)</li>
          <li>The Predictive Airlock mechanism (deferred to future work,
          see <xref target="predictive-airlock"/>)</li>
        </ul>

        <t>Note: The -00 version included the Predictive Airlock as a
        core protocol component. It has been moved to an informative
        appendix because it represents a substantial subsystem that
        warrants separate specification. Implementations MAY
        implement the Predictive Airlock as described in
        <xref target="predictive-airlock"/>.</t>
      </section>
    </section>

    <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"/> when, and only when, they appear in
      all capitals, as shown here.</t>

      <dl>
        <dt>Verification Moment</dt>
        <dd>A single point where identity confidence is evaluated.
        Produces exactly one Verification Token.</dd>

        <dt>Verification Cascade</dt>
        <dd>An ordered sequence of verification methods. Each layer
        activates when preceding layers produce insufficient
        confidence. Terminates at GO, SOFT VERIFY, or HALT.</dd>

        <dt>Verification Token</dt>
        <dd>A cryptographic evidence record of a verification moment.
        Contains: methods used, confidence scores, hashes (not raw
        data), timestamp, and TIBET provenance fields.</dd>

        <dt>Confidence Score</dt>
        <dd>A value between -1.0 and 1.0. Positive values indicate
        identity match. Negative values indicate contradiction.
        0.0 indicates inconclusive.</dd>

        <dt>Cascade Layer</dt>
        <dd>A single verification method (e.g., keystroke dynamics,
        facial recognition). Each layer produces an independent
        confidence output.</dd>

        <dt>GO</dt>
        <dd>Cascade resolution where accumulated confidence meets or
        exceeds the threshold. Action permitted with evidence.</dd>

        <dt>SOFT VERIFY</dt>
        <dd>Cascade resolution where confidence is positive but below
        threshold. Additional explicit verification requested.</dd>

        <dt>HALT</dt>
        <dd>Cascade resolution where confidence is zero or negative.
        Action blocked with full evidence record.</dd>

        <dt>Profile</dt>
        <dd>A locally-stored behavioral model. Contains statistical
        baselines for telemetry signals. Never transmitted; only
        profile hashes are included in tokens.</dd>
      </dl>
    </section>

    <section anchor="protocol-overview">
      <name>Protocol Overview</name>

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

        <artwork type="ascii-art"><![CDATA[
T=0    Login          -> Session token issued
T=1    Action         -> Token valid? -> Permit
T=3600 Token expires  -> Re-login
        ]]></artwork>

        <t>No evidence about identity between T=0 and T=3600.</t>

        <t>RVP:</t>

        <artwork type="ascii-art"><![CDATA[
T=0.000  Action requested
T=0.002  Cascade: keystroke + device -> confidence 0.94 -> GO
T=0.003  Evidence token produced

T=1.000  Action requested
T=1.002  Cascade: keystroke deviates -> confidence 0.61
T=1.003  Face check added -> confidence 0.89 -> GO

T=2.000  Action requested
T=2.002  Cascade: all layers -> confidence 0.12 -> HALT
T=2.003  Evidence token with full cascade path
        ]]></artwork>
      </section>

      <section anchor="verification-moment">
        <name>The Verification Moment</name>
        <t>A Verification Moment consists of:</t>

        <ol>
          <li>TRIGGER: An action is requested</li>
          <li>CASCADE: Telemetry layers evaluate confidence</li>
          <li>DECISION: GO, SOFT VERIFY, or HALT</li>
          <li>TOKEN: Verification Token produced with all evidence</li>
        </ol>

        <t>The moment SHOULD complete within the deployment latency
        budget. For interactive systems: 50-200ms. For API calls:
        1-10ms overhead.</t>
      </section>
    </section>

    <section anchor="verification-cascade">
      <name>Verification Cascade</name>

      <section anchor="cascade-layers">
        <name>Cascade Layers</name>
        <t>RVP defines five standard cascade layers. Implementations
        MUST support at least two layers.</t>

        <artwork type="ascii-art"><![CDATA[
Priority  Layer        Signal Type        Passive
--------  -----------  -----------------  -------
L1        KEYSTROKE    Behavioral biom.   Yes
L2        BIOMETRIC    Physical identity  Mixed
L3        DEVICE       Hardware/network   Yes
L4        VOCAL        Acoustic           Yes
L5        BEHAVIORAL   Intent analysis    Yes
        ]]></artwork>

        <t>"Passive" indicates the layer can operate without explicit
        user action. Passive layers enable continuous verification
        without interruption.</t>

        <t>Implementations MAY support additional layers using the
        "Lx-" prefix for custom layers (e.g., "Lx-nfc").</t>
      </section>

      <section anchor="layer-activation">
        <name>Layer Activation</name>
        <t>Layers activate based on the confidence deficit: the
        difference between the threshold and accumulated confidence.</t>

        <artwork type="ascii-art"><![CDATA[
Required threshold: 0.85

L1 KEYSTROKE:   0.40  ->  deficit: 0.45  ->  continue
L1 + L3 DEVICE: 0.65  ->  deficit: 0.20  ->  continue
L1 + L3 + L5:   0.87  ->  deficit: 0.00  ->  GO
        ]]></artwork>

        <t>Layers activate in priority order. The cascade terminates
        when:</t>
        <ul>
          <li>Accumulated confidence >= threshold: GO</li>
          <li>All layers exhausted, confidence > 0: SOFT VERIFY</li>
          <li>All layers exhausted, confidence &lt;= 0: HALT</li>
          <li>Any single layer produces active contradiction: HALT</li>
        </ul>
      </section>

      <section anchor="confidence-scoring">
        <name>Confidence Scoring</name>
        <t>Each layer produces a confidence value between -1.0 and 1.0:</t>

        <dl>
          <dt>1.0</dt>
          <dd>Perfect profile match</dd>
          <dt>0.0</dt>
          <dd>No signal (unavailable or inconclusive)</dd>
          <dt>-1.0</dt>
          <dd>Active contradiction (definite mismatch)</dd>
        </dl>

        <t>Accumulated confidence:</t>

        <artwork type="ascii-art"><![CDATA[
C_total = SUM (w_i * c_i)  for i in activated layers

where w_i = weight, c_i = layer confidence
Weights MUST sum to 1.0
        ]]></artwork>

        <t>Weights are configurable per deployment. Default: equal
        weight across activated layers.</t>

        <t>The exact scoring formula within each layer is a local
        policy decision. This document defines the score range,
        inputs, and accumulation, not the formulas.</t>
      </section>

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

        <dl>
          <dt>GO</dt>
          <dd>C_total >= threshold. Evidence token records all layers.</dd>

          <dt>SOFT VERIFY</dt>
          <dd>0.0 &lt; C_total &lt; threshold. System requests explicit
          verification (fingerprint, face). Not a block; a request
          for more evidence.</dd>

          <dt>HALT</dt>
          <dd>C_total &lt;= 0.0, or any layer &lt;= -0.5, or all layers
          exhausted below minimum. Full evidence token produced.
          System MUST NOT disclose which layer triggered the halt.</dd>
        </dl>
      </section>
    </section>

    <section anchor="telemetry-layers">
      <name>Telemetry Layers</name>

      <section anchor="l1-keystroke">
        <name>L1 KEYSTROKE - Behavioral Biometrics</name>
        <t>Signals: typing speed, key press duration, inter-key
        intervals, error patterns, command vocabulary.</t>

        <t>Privacy: Raw keystrokes NEVER stored or transmitted. Only
        statistical aggregates retained in profile. Profile stored
        locally, encrypted at rest. Token contains only: confidence
        score + profile_hash + deviation_category.</t>
      </section>

      <section anchor="l2-biometric">
        <name>L2 BIOMETRIC - Physical Identity</name>
        <t>Sub-layers (activated in order):</t>
        <ul>
          <li>L2a FACE: Facial geometry hash, liveness detection</li>
          <li>L2b FINGERPRINT: Minutiae hash, sensor quality</li>
          <li>L2c IRIS: Iris code hash (if available)</li>
        </ul>

        <t>Privacy: Templates stored ONLY on-device. Templates MUST be
        encrypted with device-bound key. Templates MUST NOT be
        transmittable. Token contains only: confidence + method_used
        + template_hash. Implementations MAY use <xref target="FIDO2"/>
        for hardware-backed biometric authentication.</t>
      </section>

      <section anchor="l3-device">
        <name>L3 DEVICE - Hardware and Network Context</name>
        <t>Signals: device fingerprint, network type, geolocation, NFC
        responses, software state.</t>

        <t>NFC document binding (passport, ID card): read signed data
        from chip, verify document signature, compare to profile.
        Relevant for eIDAS 2.0 high-assurance verification.</t>
      </section>

      <section anchor="l4-vocal">
        <name>L4 VOCAL - Acoustic Telemetry</name>
        <t>Signals: voice frequency profile, speech cadence, sub-verbal
        patterns.</t>

        <t>Privacy: Audio processed in real-time and immediately
        discarded. Only statistical features retained. User MUST
        explicitly consent to vocal telemetry.</t>
      </section>

      <section anchor="l5-behavioral">
        <name>L5 BEHAVIORAL - Intent Analysis</name>
        <t>Signals: action sequence probability, time-of-day patterns,
        task context, command sophistication level.</t>

        <t>Detects: developer running unfamiliar admin commands, actions
        at unusual hours, rapid sequences from normally deliberate
        user.</t>
      </section>
    </section>

    <section anchor="verification-token">
      <name>Verification Token</name>

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

        <figure anchor="token-schema">
          <name>Verification Token Schema</name>
          <sourcecode type="json"><![CDATA[
{
  "protocol": "RVP",
  "version": "1.1",
  "token_id": "rvp-a7b3c9d2e4f1",
  "timestamp": "2026-03-29T14:30:00.003Z",
  "subject": {
    "profile_hash": "sha256:4f2e8a...",
    "device_hash": "sha256:7c9d1b..."
  },
  "cascade": {
    "layers_activated": ["L1", "L3", "L5"],
    "layers_skipped": ["L2", "L4"],
    "layer_results": {
      "L1": {"confidence": 0.42, "category": "nominal"},
      "L3": {"confidence": 0.31, "category": "nominal"},
      "L5": {"confidence": 0.18, "category": "nominal"}
    },
    "accumulated_confidence": 0.91,
    "threshold": 0.85,
    "resolution": "GO"
  },
  "evidence": {
    "telemetry_hash": "sha256:9c1a...",
    "cascade_path": "L1->L3->L5->GO",
    "time_elapsed_ms": 3
  },
  "tibet": {
    "erin": "verification_moment",
    "eraan": ["profile_hash", "device_hash"],
    "eromheen": {"location": "local", "network": "wifi"},
    "erachter": "continuous identity verification"
  },
  "previous_token": "rvp-b8c4d0e3f2a5",
  "chain_length": 47,
  "token_hash": "rvp:sha256:7d3f..."
}
          ]]></sourcecode>
        </figure>
      </section>

      <section anchor="token-chain">
        <name>Token Chain</name>
        <t>Consecutive tokens form a chain. Each references its
        predecessor via "previous_token". The chain provides:</t>

        <ul>
          <li>Continuity proof: identity verified for N moments</li>
          <li>Trend analysis: confidence stable, rising, or falling</li>
          <li>Anomaly detection: chain gaps are verification signals</li>
        </ul>
      </section>

      <section anchor="tibet-integration">
        <name>TIBET Integration</name>
        <t>Every token includes TIBET provenance fields:</t>
        <ul>
          <li>ERIN: verification result and method</li>
          <li>ERAAN: profile hash, device hash, action hash</li>
          <li>EROMHEEN: location, network, device state</li>
          <li>ERACHTER: why verification was triggered</li>
        </ul>
      </section>
    </section>

    <section anchor="cascade-fallback">
      <name>Cascade Fallback Protocol</name>

      <section anchor="fallback-triggers">
        <name>Fallback Triggers</name>
        <t>A fallback is triggered when:</t>
        <ul>
          <li>Layer hardware unavailable</li>
          <li>Layer produces confidence = 0.0</li>
          <li>Layer produces negative confidence</li>
          <li>Layer exceeds latency budget</li>
        </ul>

        <t>The cascade continues to the next layer. The Verification
        Token records all attempts and failures.</t>
      </section>

      <section anchor="hard-stop">
        <name>Hard Stop Conditions</name>
        <t>Immediate HALT regardless of accumulated confidence:</t>

        <ol>
          <li>Any layer produces confidence &lt;= -0.5</li>
          <li>Device fingerprint matches no enrolled device</li>
          <li>NFC document signature verification fails</li>
          <li>Chain gap detected (missing tokens in sequence)</li>
          <li>Concurrent sessions on different devices with conflicting
          identity claims</li>
        </ol>

        <t>Hard stops are FINAL for the current action. Re-establishment
        requires high-assurance verification.</t>
      </section>
    </section>

    <section anchor="credential-binding">
      <name>Credential Binding</name>

      <section anchor="vc-integration">
        <name>W3C Verifiable Credentials Integration</name>
        <t>RVP provides the evidence layer beneath Verifiable
        Credentials <xref target="VC-DATA-MODEL"/>. A VC says "this person is 18+";
        RVP provides evidence of HOW that was determined, WHEN, by
        WHAT method, and with WHAT confidence.</t>

        <figure anchor="vc-rvp-example">
          <name>Verifiable Credential with RVP Evidence</name>
          <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:..."],
    "chain_confidence_min": 0.87,
    "methods_used": ["L2a_face", "L3_device_nfc"],
    "last_verified": "2026-03-29T14:30:00Z",
    "continuous": true
  }
}
          ]]></sourcecode>
        </figure>
      </section>

      <section anchor="credential-presentation">
        <name>Credential Presentation with RVP Proof</name>
        <t>When presenting a credential, the holder attaches a CURRENT
        RVP token proving they are still the person the credential
        was issued to. This solves the "stolen credential" problem:
        even with a copied VC, the attacker cannot produce a matching
        RVP chain.</t>
      </section>
    </section>

    <section anchor="local-first">
      <name>Local-First Architecture</name>

      <section anchor="on-device">
        <name>On-Device Processing</name>
        <t>Implementations MUST:</t>
        <ul>
          <li>Process all biometric data on-device</li>
          <li>Store profiles only on-device (encrypted)</li>
          <li>Generate verification tokens locally</li>
          <li>Operate without network connectivity (degraded)</li>
        </ul>

        <t>Implementations MUST NOT:</t>
        <ul>
          <li>Transmit raw biometric data</li>
          <li>Require a centralized server for cascade evaluation</li>
          <li>Store profiles in cloud storage</li>
        </ul>
      </section>

      <section anchor="network-independence">
        <name>Network Independence</name>
        <t>Three modes:</t>
        <dl>
          <dt>ONLINE</dt>
          <dd>Full cascade, all layers available</dd>
          <dt>OFFLINE</dt>
          <dd>Local cascade only, tokens stored for later sync</dd>
          <dt>DEGRADED</dt>
          <dd>Partial cascade, reduced thresholds</dd>
        </dl>
      </section>
    </section>

    <section anchor="transport">
      <name>Transport Considerations</name>
      <t>RVP verification tokens are JSON <xref target="RFC8259"/> objects
      transportable over any mechanism. Content-Type:
      application/rvp+json.</t>

      <t>For AI-to-AI verification, tokens MAY be transported via
      I-Poll messages with metadata type "rvp_verification".</t>
    </section>

    <section anchor="privacy">
      <name>Privacy Considerations</name>

      <section anchor="biometric-protection">
        <name>Biometric Data Protection</name>
        <ul>
          <li>Templates stored ONLY on-device, encrypted with device-bound
          keys</li>
          <li>Raw data processed and immediately discarded</li>
          <li>Tokens MUST NOT contain biometric data</li>
          <li>Users MUST be able to delete all data at any time</li>
        </ul>

        <t>These requirements align with GDPR Article 9, EU AI Act
        biometric identification requirements, and eIDAS 2.0 data
        minimization.</t>
      </section>

      <section anchor="telemetry-minimization">
        <name>Telemetry Minimization</name>
        <t>Each layer MUST implement minimal telemetry: collect only
        what is needed, process immediately, retain only aggregates,
        store only hashes in tokens.</t>
      </section>

      <section anchor="selective-disclosure">
        <name>Selective Disclosure</name>
        <t>Users control which verification evidence is shared. Tokens
        use per-verifier pseudonymous identifiers to prevent cross-service
        tracking.</t>
      </section>
    </section>

    <section anchor="security">
      <name>Security Considerations</name>

      <section anchor="evidence-vs-enforcement">
        <name>Evidence vs. Enforcement</name>
        <t>RVP produces evidence, not policy. An implementation MAY
        block, allow with reduced privileges, require additional
        verification, or log and alert. The choice is a POLICY
        decision, not a PROTOCOL decision.</t>
      </section>

      <section anchor="replay-attacks">
        <name>Replay Attacks</name>
        <t>Tokens include millisecond timestamps, predecessor references,
        and device-state nonces. Verifiers SHOULD reject tokens older
        than a configurable window (default: 10 seconds).</t>
      </section>

      <section anchor="adversarial-inputs">
        <name>Adversarial Inputs</name>
        <t>Attacks on cascade layers:</t>
        <ul>
          <li>Face spoofing: Mitigated by liveness detection</li>
          <li>Fingerprint spoofing: Mitigated by sensor quality assessment</li>
          <li>Keystroke mimicry: Difficult at scale, requires matching
          dozens of parameters simultaneously</li>
          <li>Behavioral mimicry: Impractical for extended sessions</li>
        </ul>

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

      <section anchor="cascade-limitations">
        <name>Cascade Limitations</name>
        <t>RVP is not infallible. Known limitations:</t>

        <ul>
          <li>A sufficiently motivated adversary with physical access to
          the device and biometric samples can potentially defeat
          individual layers</li>
          <li>Profile cold-start: new users have no behavioral baseline,
          reducing L1 and L5 effectiveness</li>
          <li>Environmental factors (lighting, noise) affect biometric
          layer reliability</li>
        </ul>

        <t>These limitations are recorded as evidence (reduced
        confidence scores), not hidden.</t>
      </section>
    </section>

    <section anchor="regulatory">
      <name>Regulatory Considerations</name>
      <t>RVP is designed to support compliance with:</t>

      <ul>
        <li><xref target="EU-AI-ACT"/>: Audit trails (Art. 12), human oversight
        (Art. 14), transparency (Art. 13)</li>
        <li><xref target="EIDAS2"/>: LOA High verification, selective disclosure,
        offline capability</li>
        <li>NIS2: Continuous access verification, incident evidence</li>
        <li><xref target="GDPR"/>: Data minimization, biometric protection, right to
        erasure</li>
        <li>DORA: Continuous operator verification, ICT incident
        evidence</li>
      </ul>

      <t>RVP is NOT a remote biometric identification system. It
      operates on-device for the device holder's own verification.</t>

      <t>Detailed regulatory mapping is available in the -00 version
      of this document, Section 13.</t>
    </section>

    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document requests registration of:</t>

      <t>Media Type: application/rvp+json</t>

      <t>Note: The -00 version defined protocol prefixes and token ID
      formats. These are maintained as conventions but do not
      require IANA registration at this stage.</t>
    </section>
  </middle>

  <back>
    <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="March" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft"
                      value="draft-vandemeent-tibet-provenance-01"/>
        </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="March" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft"
                      value="draft-vandemeent-jis-identity-01"/>
        </reference>

        <reference anchor="UPIP">
          <front>
            <title>UPIP: Universal Process Integrity Protocol</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-01"/>
        </reference>

        <reference anchor="AINS">
          <front>
            <title>AINS: AInternet Name Service</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-ains-discovery-01"/>
        </reference>

        <reference anchor="VC-DATA-MODEL"
                   target="https://www.w3.org/TR/vc-data-model-2.0/">
          <front>
            <title>Verifiable Credentials Data Model v2.0</title>
            <author fullname="M. Sporny" initials="M." surname="Sporny"/>
            <author fullname="D. Longley" initials="D." surname="Longley"/>
            <author fullname="D. Chadwick" initials="D." surname="Chadwick"/>
            <date month="March" year="2024"/>
          </front>
          <seriesInfo name="W3C" value="Recommendation"/>
        </reference>

        <reference anchor="EIDAS2">
          <front>
            <title>Regulation (EU) 2024/1183 (European Digital Identity
                   Framework)</title>
            <author>
              <organization>European Parliament</organization>
            </author>
            <date month="April" year="2024"/>
          </front>
          <seriesInfo name="Regulation (EU)" value="2024/1183"/>
        </reference>

        <reference anchor="EU-AI-ACT">
          <front>
            <title>Regulation (EU) 2024/1689 (Artificial Intelligence
                   Act)</title>
            <author>
              <organization>European Parliament</organization>
            </author>
            <date month="June" year="2024"/>
          </front>
          <seriesInfo name="Regulation (EU)" value="2024/1689"/>
        </reference>

        <reference anchor="GDPR">
          <front>
            <title>Regulation (EU) 2016/679 (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="FIDO2"
                   target="https://fidoalliance.org/fido2/">
          <front>
            <title>FIDO2: Web Authentication (WebAuthn)</title>
            <author>
              <organization>FIDO Alliance</organization>
            </author>
            <date year="2019"/>
          </front>
          <seriesInfo name="W3C" value="Recommendation"/>
        </reference>
      </references>
    </references>

    <section anchor="token-json-schema">
      <name>Verification Token JSON Schema</name>
      <t>(Preserved from -00 with minor updates: version field added,
      "Lx-" prefix support for custom layers.)</t>
    </section>

    <section anchor="cascade-config-schema">
      <name>Cascade Configuration Schema</name>
      <t>(Preserved from -00.)</t>
    </section>

    <section anchor="use-cases">
      <name>Use Case Examples</name>

      <section anchor="age-verification">
        <name>Age Verification at Point of Sale</name>
        <t>(Preserved from -00.)</t>
      </section>

      <section anchor="developer-auth">
        <name>Continuous Developer Authentication</name>
        <t>(Preserved from -00.)</t>
      </section>

      <section anchor="child-device">
        <name>Child on Parent's Device</name>
        <t>(Preserved from -00. This example demonstrates passive
        identity switching through cascade evidence, not blocking.)</t>
      </section>
    </section>

    <section anchor="predictive-airlock">
      <name>Predictive Airlock (Future Extension)</name>
      <t>The Predictive Airlock is a mechanism that pre-renders the
      expected outcome of an action before execution and measures
      the delta between prediction and reality as a verification
      signal.</t>

      <t>The -00 version included this as Section 5 and L6 AIRLOCK
      cascade layer. It has been moved to this appendix because:</t>

      <ol>
        <li>It represents a substantial subsystem with its own state
        management, prediction models, and delta classification.</li>
        <li>It warrants separate specification for proper review.</li>
        <li>The core RVP cascade model is complete without it.</li>
      </ol>

      <t>Implementations MAY implement the Predictive Airlock as
      described in -00 Section 5 and integrate it as an additional
      cascade layer (L6 AIRLOCK). The airlock's confidence output
      is derived from the prediction delta: c_airlock = 1.0 - delta.</t>

      <t>A future document may specify the Predictive Airlock as a
      standalone extension to RVP.</t>
    </section>

    <section anchor="changes">
      <name>Changes from -00</name>

      <ol>
        <li>Added RFC 8174 alongside RFC 2119.</li>

        <li>Changed intended status from Standards Track to
        Informational.</li>

        <li>Moved Predictive Airlock from core protocol to informative
        appendix (<xref target="predictive-airlock"/>). L6 AIRLOCK removed from standard
        cascade layers.</li>

        <li>Reduced cascade from 6 layers to 5 standard layers.
        Custom layers supported via "Lx-" prefix.</li>

        <li>Compressed regulatory alignment from 6 detailed
        subsections to one concise section (<xref target="regulatory"/>) with
        reference to -00 for details.</li>

        <li>Compressed transport considerations (removed 5G/6G
        subsections -- these are deployment context, not protocol).</li>

        <li>Added Cascade Limitations to Security Considerations
        (<xref target="cascade-limitations"/>).</li>

        <li>Added Scope section (<xref target="scope"/>) clarifying what RVP does and
        does not define.</li>

        <li>Confidence scoring formula kept as informative guidance,
        not normative. Exact formulas are local policy.</li>

        <li>Normalized companion protocol references to
        <xref target="TIBET"/>, <xref target="JIS"/>,
        <xref target="UPIP"/>, <xref target="AINS"/>.</li>

        <li>IANA reduced to media type registration only.</li>
      </ol>
    </section>

    <section anchor="acknowledgements" numbered="false">
      <name>Acknowledgements</name>
      <t>The author thanks Codex (codex.aint) for the suite-wide
      cleanup analysis that informed this revision, particularly
      the recommendation to narrow RVP's scope and defer the
      Predictive Airlock to a separate specification.</t>
    </section>
  </back>
</rfc>
