<?xml version="1.0" encoding="utf-8"?>
<?xml-model href="urn:ietf:params:xml:ns:rfc2629" type="application/xml"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="info"
     docName="draft-ayerbe-trip-protocol-03"
     ipr="trust200902"
     submissionType="independent"
     xml:lang="en"
     version="3">

  <front>
    <title abbrev="TRIP">TRIP: Trajectory-based Recognition of Identity Proof</title>

    <seriesInfo name="Internet-Draft" value="draft-ayerbe-trip-protocol-03"/>

    <author fullname="Camilo Ayerbe Posada" initials="C." surname="Ayerbe Posada">
      <organization>ULISSY s.r.l.</organization>
      <address>
        <postal>
          <street>Via Gaetano Sacchi 16</street>
          <city>Roma</city>
          <region>RM</region>
          <code>00153</code>
          <country>Italy</country>
        </postal>
        <email>cayerbe@gmail.com</email>
      </address>
    </author>

    <date year="2026" month="May" day="7"/>

    <area>Security</area>
    <workgroup>Independent Submission</workgroup>

    <keyword>trajectory</keyword>
    <keyword>identity</keyword>
    <keyword>proof-of-humanity</keyword>
    <keyword>breadcrumb</keyword>
    <keyword>attestation</keyword>
    <keyword>RATS</keyword>
    <keyword>criticality</keyword>

    <abstract>
      <t>
        This document specifies the Trajectory-based Recognition of
        Identity Proof (TRIP) protocol, a decentralized mechanism for
        establishing claims of physical-world presence through
        cryptographically signed, spatially quantized location
        attestations called "breadcrumbs." Breadcrumbs are chained into
        an append-only log, bundled into verifiable epochs, and
        distilled into a Trajectory Identity Token (TIT) that serves
        as a persistent pseudonymous identifier.
      </t>
      <t>
        The protocol employs a Criticality Engine grounded in
        statistical physics to distinguish biological movement from
        synthetic trajectories. Power Spectral Density (PSD) analysis
        detects the 1/f signature of Self-Organized Criticality in
        human mobility through the PSD scaling exponent alpha. A
        six-component Hamiltonian energy function scores each
        breadcrumb against the identity's learned behavioral profile
        in real time.
      </t>
      <t>
        This revision (-03) addresses three areas identified through
        expert review by researchers in the statistical physics
        community: it replaces informal terminology with standard
        spectral analysis nomenclature; it provides the analytical
        and numerical bridge between the Levy flight displacement
        exponent and the PSD scaling exponent; and it introduces a
        convergence analysis framework for quantifying the minimum
        trajectory length required for reliable single-trajectory
        classification. Additionally, this revision removes Passive
        Verification mode entirely, requiring all Attestation Results
        to be bound to Relying Party nonces via the Active
        Verification Protocol.
      </t>
      <t>
        TRIP is designed to be transport-agnostic and operates
        independently of any particular naming system, blockchain,
        or application layer.
      </t>
    </abstract>
  </front>

  <middle>

    <!-- ============================================================ -->
    <!-- SECTION 1: INTRODUCTION                                       -->
    <!-- ============================================================ -->

    <section anchor="introduction" numbered="true" toc="include">
      <name>Introduction</name>
      <t>
        Conventional approaches to proving that an online actor
        corresponds to a physical human being rely on biometric
        capture, government-issued documents, or knowledge-based
        challenges. Each technique introduces a centralized trust
        anchor, creates honeypots of personally identifiable
        information (PII), and is susceptible to replay or deepfake
        attacks.
      </t>
      <t>
        TRIP takes a fundamentally different approach: it treats
        sustained physical movement through the real world as evidence
        of embodied existence. A TRIP-enabled device periodically
        records its position as a "breadcrumb" -- a compact,
        privacy-preserving, cryptographically signed attestation that
        the holder of a specific Ed25519 key pair was present in a
        particular spatial cell at a particular time. An adversary who
        controls only digital infrastructure cannot fabricate a
        plausible trajectory because doing so requires controlling
        radio-frequency environments (GPS, Wi-Fi, cellular, IMU) at
        many geographic locations over extended periods.
      </t>
      <t>
        Version -01 introduced a Criticality Engine grounded in
        Giorgio Parisi's Nobel Prize-winning work on scale-free
        correlations <xref target="PARISI-NOBEL"/> and
        Albert-Laszlo Barabasi's research on the fundamental limits
        of human mobility <xref target="BARABASI-MOBILITY"/>.
      </t>
      <t>
        Version -02 formalized the mapping to the RATS Architecture
        <xref target="RFC9334"/>, introduced the Active Verification
        Protocol with cryptographic freshness guarantees, and corrected
        the privacy model.
      </t>
      <t>
        This revision (-03) addresses three substantive issues
        identified through expert review by researchers working in
        the statistical physics of complex systems:
      </t>
      <t>
        First, it replaces the informal term "Parisi Factor" with
        the standard spectral analysis term "PSD scaling exponent
        alpha," properly attributing the theoretical foundation to
        Parisi's work without conflating tribute with established
        nomenclature.
      </t>
      <t>
        Second, it provides the missing analytical and numerical
        bridge between the Levy flight displacement exponent beta
        (Section 7.1) and the PSD scaling exponent alpha
        (Section 6.1). Previous revisions asserted both as
        independent properties of human mobility without
        demonstrating their mathematical relationship.
      </t>
      <t>
        Third, it introduces a convergence analysis framework
        (Section 6.4) that addresses the fundamental question of
        applying ensemble statistical properties to single
        trajectories, including guidance on minimum trajectory
        length and error rate estimation.
      </t>
      <t>
        Additionally, this revision removes Passive Verification
        mode entirely. All Attestation Results MUST now be bound
        to Relying Party nonces via the Active Verification
        Protocol (Section 12), eliminating the replay vulnerability
        identified in -02 review.
      </t>
      <t>
        This document specifies the data structures, algorithms,
        and verification procedures that constitute the TRIP
        protocol. It intentionally omits transport bindings,
        naming-system integration, and blockchain anchoring, all
        of which are expected to be addressed in companion
        specifications.
      </t>

      <section anchor="requirements" numbered="true" toc="include">
        <name>Requirements Language</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>
      </section>

      <section anchor="terminology" numbered="true" toc="include">
        <name>Terminology</name>
        <t>
          Terms defined in the RATS Architecture <xref target="RFC9334"/>
          (Attester, Evidence, Verifier, Attestation Result, Relying
          Party) are used throughout this document with their RFC 9334
          meanings. Additional terms specific to TRIP:
        </t>
        <dl>
          <dt>Breadcrumb</dt>
          <dd>A single, signed attestation of spatiotemporal presence.
          The atomic unit of TRIP Evidence.</dd>

          <dt>Trajectory</dt>
          <dd>An ordered, append-only chain of breadcrumbs produced by
          a single identity key pair.</dd>

          <dt>Epoch</dt>
          <dd>A bundle of breadcrumbs (default 100) sealed with a
          Merkle root, forming a verifiable checkpoint.</dd>

          <dt>Trajectory Identity Token (TIT)</dt>
          <dd>A pseudonymous identifier derived from an Ed25519 public
          key paired with trajectory metadata.</dd>

          <dt>Criticality Engine</dt>
          <dd>The analytical subsystem that evaluates trajectory
          statistics for signs of biological Self-Organized Criticality
          (SOC). In RATS terms, the Criticality Engine is a component
          of the Verifier.</dd>

          <dt>PSD Scaling Exponent (alpha)</dt>
          <dd>The slope of the Power Spectral Density of the
          displacement time series in log-log space. This quantity is
          referred to in the spectral analysis literature as the
          "spectral exponent" or "scaling exponent." Human mobility
          produces alpha values in the range [0.30, 0.80],
          corresponding to 1/f pink noise -- the spectral signature
          of systems operating at criticality, as demonstrated by
          Parisi's work on scale-free correlations in biological
          systems <xref target="PARISI-NOBEL"/>.</dd>

          <dt>Hamiltonian (H)</dt>
          <dd>A weighted energy function that quantifies how much a
          new breadcrumb deviates from the identity's learned
          behavioral profile.</dd>

          <dt>Anchor Cell</dt>
          <dd>An H3 cell where an identity has historically spent
          significant time (e.g., home, workplace).</dd>

          <dt>Flock</dt>
          <dd>The set of co-located TRIP entities whose aggregate
          movement provides a reference signal for alignment
          verification.</dd>

          <dt>Proof-of-Humanity (PoH) Certificate</dt>
          <dd>A compact Attestation Result containing only statistical
          exponents derived from the trajectory, with no raw location
          data.</dd>
        </dl>
      </section>

      <section anchor="changes" numbered="true" toc="include">
        <name>Changes from -02</name>
        <t>
          This section summarizes the substantive changes from
          draft-ayerbe-trip-protocol-02:
        </t>
        <ul>
          <li>Replaced the term "Parisi Factor" with the standard
          spectral analysis term "PSD scaling exponent alpha"
          throughout the document. The theoretical contribution of
          Parisi's work is acknowledged in the motivation and
          terminology, not in the variable naming.</li>

          <li>Added Section 6.3 (Levy-PSD Bridge) providing the
          analytical relationship between the Levy flight displacement
          exponent beta and the PSD scaling exponent alpha, with
          supporting references to empirical studies
          <xref target="MACZAK-SPECTRAL"/>
          <xref target="VADAI-GPS"/>.</li>

          <li>Added Section 6.4 (Convergence Analysis) addressing the
          application of ensemble statistical properties to single
          trajectories, including minimum trajectory length guidance
          and error rate estimation framework.</li>

          <li>Removed Passive Verification mode entirely
          (Section 12). All Attestation Results MUST now be produced
          via the Active Verification Protocol with Relying
          Party-supplied nonces. The PoH Certificate fields for
          nonce (field 12) and chain head hash (field 13) are now
          REQUIRED, not optional.</li>

          <li>Updated the PoH Certificate (Section 9) to reflect
          mandatory Active Verification fields.</li>

          <li>Added references to recent empirical studies on spectral
          properties of human GPS trajectories.</li>
        </ul>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 2: BREADCRUMB DATA STRUCTURE                          -->
    <!-- ============================================================ -->

    <section anchor="breadcrumb" numbered="true" toc="include">
      <name>Breadcrumb Data Structure</name>
      <t>
        A breadcrumb is encoded as a CBOR map <xref target="RFC8949"/>
        with the following fields:
      </t>
      <table anchor="breadcrumb-fields">
        <name>Breadcrumb CBOR Fields</name>
        <thead>
          <tr><th>Key</th><th>CBOR Type</th><th>Description</th></tr>
        </thead>
        <tbody>
          <tr><td>0</td><td>uint</td><td>Index (sequence number)</td></tr>
          <tr><td>1</td><td>bstr (32)</td><td>Identity public key (Ed25519)</td></tr>
          <tr><td>2</td><td>uint</td><td>Timestamp (Unix seconds)</td></tr>
          <tr><td>3</td><td>uint</td><td>H3 cell index</td></tr>
          <tr><td>4</td><td>uint</td><td>H3 resolution (7-10)</td></tr>
          <tr><td>5</td><td>bstr (32)</td><td>Context digest (SHA-256)</td></tr>
          <tr><td>6</td><td>bstr (32) / null</td><td>Previous block hash</td></tr>
          <tr><td>7</td><td>map</td><td>Meta flags</td></tr>
          <tr><td>8</td><td>bstr (64)</td><td>Ed25519 signature</td></tr>
        </tbody>
      </table>

      <section anchor="spatial-quantization" numbered="true" toc="include">
        <name>Spatial Quantization</name>
        <t>
          The H3 geospatial indexing system <xref target="H3"/>
          partitions the Earth's surface into hexagonal cells at
          multiple resolutions. TRIP employs resolutions 7 through 10:
        </t>
        <table anchor="h3-resolutions">
          <name>H3 Resolution Parameters</name>
          <thead>
            <tr><th>Resolution</th><th>Avg. Area</th><th>Edge Length</th><th>Use Case</th></tr>
          </thead>
          <tbody>
            <tr><td>7</td><td>~5.16 km^2</td><td>~1.22 km</td><td>Rural / low-density</td></tr>
            <tr><td>8</td><td>~0.74 km^2</td><td>~0.46 km</td><td>Suburban / general</td></tr>
            <tr><td>9</td><td>~0.11 km^2</td><td>~0.17 km</td><td>Urban / high-density</td></tr>
            <tr><td>10</td><td>~0.015 km^2</td><td>~0.07 km</td><td>Default / standard verification</td></tr>
          </tbody>
        </table>
        <t>
          A conforming implementation MUST quantize raw GPS coordinates
          to an H3 cell before any signing or storage operation. Raw
          coordinates MUST NOT appear in breadcrumbs or in any protocol
          message transmitted between TRIP entities.
        </t>
        <t>
          H3 resolution is a configurable protocol parameter.
          Implementations SHOULD default to resolution 10. Deployments
          MAY select alternative resolutions based on jurisdictional
          requirements, population density, and use-case sensitivity.
          Lower resolutions (larger cells) provide stronger location
          privacy at the cost of reduced spatial discrimination for
          trust computation.
        </t>
      </section>

      <section anchor="context-digest" numbered="true" toc="include">
        <name>Context Digest Computation</name>
        <t>
          The context digest binds ambient environmental signals to
          the breadcrumb without revealing them. The digest is
          computed as follows:
        </t>
        <ol>
          <li>
            <t>Construct a pipe-delimited string of tagged components
            in the following order:</t>
            <ul>
              <li>"h3:" followed by the H3 cell hex string</li>
              <li>"ts:" followed by the timestamp bucketed to 5-minute
              intervals (floor(Unix_minutes / 5) * 5)</li>
              <li>"wifi:" followed by the first 16 hex characters of
              SHA-256(sorted comma-joined BSSIDs), if Wi-Fi scan data
              is available</li>
              <li>"cell:" followed by the first 16 hex characters of
              SHA-256(sorted comma-joined tower IDs), if cellular data
              is available</li>
              <li>"imu:" followed by the first 16 hex characters of
              SHA-256(IMU vector string), if inertial sensor data is
              available</li>
            </ul>
          </li>
          <li>Compute SHA-256 over the UTF-8 encoding of the resulting
          string.</li>
        </ol>
        <t>
          Absent components MUST be omitted entirely, not represented
          as empty strings.
        </t>
      </section>

      <section anchor="signature-production" numbered="true" toc="include">
        <name>Signature Production</name>
        <t>
          The signable payload is the deterministic CBOR encoding (per
          Section 4.2 of <xref target="RFC8949"/>) of a CBOR map
          containing fields 0 through 7, with map keys sorted in
          ascending integer order. The Ed25519 signature
          <xref target="RFC8032"/> is computed over the raw bytes of
          this CBOR encoding and stored at key 8.
        </t>
        <artwork type="ascii-art"><![CDATA[
   signable_payload = CBOR-Deterministic(fields[0..7])
   signature        = Ed25519-Sign(private_key, signable_payload)
]]></artwork>
        <t>
          Deterministic CBOR encoding ensures that any conforming
          implementation produces identical byte sequences for the same
          logical content, which is essential for reproducible signature
          verification across heterogeneous platforms.
        </t>
      </section>

      <section anchor="block-hash" numbered="true" toc="include">
        <name>Block Hash and Chaining</name>
        <t>
          The block hash is the SHA-256 digest of the complete
          deterministic CBOR encoding of the breadcrumb (fields 0
          through 8 inclusive, i.e., including the signature):
        </t>
        <artwork type="ascii-art"><![CDATA[
   BreadcrumbHash(B) = SHA-256(CBOR-Deterministic(B[0..8]))
   B[N+1].field[6]   = BreadcrumbHash(B[N])
   B[0].field[6]     = null
]]></artwork>
        <t>
          Each breadcrumb at index > 0 MUST carry the block hash of
          its immediate predecessor in field 6, forming an append-only
          hash chain. The genesis breadcrumb (index 0) MUST set
          field 6 to null (CBOR simple value 22).
        </t>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 3: CHAIN MANAGEMENT                                   -->
    <!-- ============================================================ -->

    <section anchor="chain-management" numbered="true" toc="include">
      <name>Chain Management</name>

      <section anchor="deduplication" numbered="true" toc="include">
        <name>Location Deduplication</name>
        <t>
          Proof-of-Trajectory requires demonstrated movement. A
          conforming implementation MUST reject a breadcrumb if the H3
          cell is identical to the immediately preceding breadcrumb.
          Implementations SHOULD also enforce a cap (default 10) on the
          number of breadcrumbs recordable at any single H3 cell to
          prevent stationary farming.
        </t>
      </section>

      <section anchor="min-interval" numbered="true" toc="include">
        <name>Minimum Collection Interval</name>
        <t>
          Breadcrumbs SHOULD be collected at intervals of no less than
          15 minutes. An implementation MAY allow shorter intervals
          during explicit "exploration" sessions but MUST NOT accept
          intervals shorter than 5 minutes.
        </t>
      </section>

      <section anchor="chain-verification" numbered="true" toc="include">
        <name>Chain Verification</name>
        <t>A Verifier MUST check:</t>
        <ol>
          <li>Index values form a contiguous sequence starting at 0.</li>
          <li>Timestamps are monotonically non-decreasing.</li>
          <li>Each previousHash matches the block hash of the prior
          breadcrumb.</li>
          <li>Each Ed25519 signature verifies against the identity
          public key and the canonical signed data.</li>
        </ol>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 4: EPOCHS                                             -->
    <!-- ============================================================ -->

    <section anchor="epochs" numbered="true" toc="include">
      <name>Epochs</name>
      <t>
        An epoch seals a batch of breadcrumbs (default 100) under a
        Merkle root. The epoch record is a CBOR map containing:
      </t>
      <table anchor="epoch-fields">
        <name>Epoch CBOR Fields</name>
        <thead>
          <tr><th>Key</th><th>Type</th><th>Description</th></tr>
        </thead>
        <tbody>
          <tr><td>0</td><td>uint</td><td>Epoch number</td></tr>
          <tr><td>1</td><td>bstr (32)</td><td>Identity public key</td></tr>
          <tr><td>2</td><td>uint</td><td>First breadcrumb index</td></tr>
          <tr><td>3</td><td>uint</td><td>Last breadcrumb index</td></tr>
          <tr><td>4</td><td>uint</td><td>Timestamp of first breadcrumb</td></tr>
          <tr><td>5</td><td>uint</td><td>Timestamp of last breadcrumb</td></tr>
          <tr><td>6</td><td>bstr (32)</td><td>Merkle root of breadcrumb hashes</td></tr>
          <tr><td>7</td><td>uint</td><td>Count of unique H3 cells</td></tr>
          <tr><td>8</td><td>bstr (64)</td><td>Ed25519 signature over fields 0-7</td></tr>
        </tbody>
      </table>
      <t>
        The Merkle tree MUST use SHA-256 and a canonical left-right
        ordering of breadcrumb block hashes. An epoch is sealed when
        the breadcrumb count reaches the epoch size threshold.
      </t>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 5: TIT                                                -->
    <!-- ============================================================ -->

    <section anchor="tit" numbered="true" toc="include">
      <name>Trajectory Identity Token (TIT)</name>
      <t>
        A TIT is the externally presentable identity derived from a
        TRIP trajectory. It consists of:
      </t>
      <ul>
        <li>The Ed25519 public key (32 bytes).</li>
        <li>The current epoch count.</li>
        <li>The total breadcrumb count.</li>
        <li>The count of unique H3 cells visited.</li>
        <li>A trust score (see Section 10).</li>
      </ul>
      <t>
        A TIT SHOULD be encoded as a CBOR map for machine consumption
        and MAY additionally be represented as a Base64url string for
        URI embedding.
      </t>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 6: CRITICALITY ENGINE                                 -->
    <!-- ============================================================ -->

    <section anchor="criticality-engine" numbered="true" toc="include">
      <name>The Criticality Engine</name>
      <t>
        The Criticality Engine is the core analytical component of the
        TRIP Verifier. It evaluates whether a trajectory exhibits the
        statistical signature of biological Self-Organized Criticality
        (SOC) -- the phenomenon where living systems operate at the
        boundary between order and chaos, producing scale-free
        correlations that are mathematically distinct from synthetic or
        automated movement.
      </t>
      <t>
        The theoretical foundation rests on three pillars:
      </t>
      <t>
        First, Parisi's demonstration <xref target="PARISI-NOBEL"/>
        that flocking organisms such as starling murmurations exhibit
        scale-free correlations <xref target="CAVAGNA-STARLINGS"/>
        where perturbations propagate across the entire group regardless
        of size. Crucially, Ballerini et al. showed that these
        interactions are topological (based on nearest k neighbors)
        rather than metric (based on distance)
        <xref target="BALLERINI-TOPOLOGICAL"/>. TRIP exploits this
        through Power Spectral Density analysis (Section 6.1): human
        movement produces characteristic 1/f pink noise that synthetic
        trajectories cannot replicate.
      </t>
      <t>
        Second, Barabasi et al.'s discovery
        <xref target="BARABASI-MOBILITY"/> that human displacement
        follows truncated Levy flights with approximately 93%
        predictability <xref target="SONG-LIMITS"/>. TRIP learns each
        identity's mobility profile -- displacement distribution,
        anchor transition patterns, and circadian rhythms -- and
        detects deviations from these learned baselines (Section 7).
      </t>
      <t>
        Third, a six-component Hamiltonian energy function (Section 8)
        that combines spatial, temporal, kinetic, flock-alignment,
        contextual, and structural analysis into a single anomaly score
        for each incoming breadcrumb. The Hamiltonian provides real-time
        detection while the PSD and mobility statistics provide
        aggregate trajectory assessment.
      </t>

      <section anchor="psd-analysis" numbered="true" toc="include">
        <name>Power Spectral Density Analysis</name>
        <t>
          The primary diagnostic is the Power Spectral Density (PSD) of
          the displacement time series. Given a trajectory of N
          breadcrumbs with displacements d(i) between consecutive
          breadcrumbs, the PSD is computed via the Discrete Fourier
          Transform:
        </t>
        <artwork type="ascii-art"><![CDATA[
   S(f) = |DFT(d)|^2

   where d = [d(0), d(1), ..., d(N-1)]
   and d(i) = haversine_distance(cell(i), cell(i-1))
]]></artwork>
        <t>
          The PSD is then fitted to a power-law model:
        </t>
        <artwork type="ascii-art"><![CDATA[
   S(f) ~ 1 / f^alpha
]]></artwork>
        <t>
          The exponent alpha is the PSD scaling exponent -- referred to
          in the spectral analysis literature as the "spectral exponent"
          or "scaling exponent." In the context of human mobility, this
          quantity captures the degree of long-range temporal correlation
          in movement patterns. The theoretical significance of this
          exponent derives from Parisi's work demonstrating that
          biological systems operating at criticality produce
          characteristic scale-free correlations
          <xref target="PARISI-NOBEL"/>. The PSD scaling exponent
          is the critical diagnostic:
        </t>
        <table anchor="alpha-ranges">
          <name>PSD Scaling Exponent Classification</name>
          <thead>
            <tr><th>Alpha Range</th><th>Noise Type</th><th>Classification</th></tr>
          </thead>
          <tbody>
            <tr>
              <td>0.00 - 0.15</td>
              <td>White noise</td>
              <td>Synthetic / automated script</td>
            </tr>
            <tr>
              <td>0.15 - 0.30</td>
              <td>Near-white</td>
              <td>Suspicious (possible sophisticated bot)</td>
            </tr>
            <tr>
              <td>0.30 - 0.80</td>
              <td>Pink noise (1/f)</td>
              <td>Biological / human</td>
            </tr>
            <tr>
              <td>0.80 - 1.20</td>
              <td>Near-brown</td>
              <td>Suspicious (possible replay with drift)</td>
            </tr>
            <tr>
              <td>1.20+</td>
              <td>Brown noise</td>
              <td>Drift anomaly / sensor failure</td>
            </tr>
          </tbody>
        </table>
        <t>
          A conforming implementation MUST compute the PSD scaling
          exponent over a sliding window of the most recent 64
          breadcrumbs (minimum) to 256 breadcrumbs (recommended).
          The alpha value MUST fall within [0.30, 0.80] for the
          trajectory to be classified as biological.
        </t>
        <t>
          The key insight is that automated movement generators lack
          the long-range temporal correlations ("memory") inherent in
          a system operating at criticality. A random walk produces
          white noise (alpha near 0). A deterministic replay produces
          brown noise (alpha near 2). Only a biological system
          operating at the critical point produces pink noise in the
          characteristic [0.30, 0.80] range.
        </t>
        <t>
          NOTE: The alpha range [0.30, 0.80] is a protocol-specified
          classification boundary constructed from combined literature.
          The boundaries are informed by empirical studies demonstrating
          1/f-like spectral properties in human GPS trajectories
          <xref target="VADAI-GPS"/> and general spectral
          characteristics of human physical activity
          <xref target="MACZAK-SPECTRAL"/>. Deployments MAY adjust
          these boundaries based on population-specific calibration
          data, provided that the biological range remains centered
          near alpha = 0.55 and excludes the white noise (alpha &lt;
          0.15) and brown noise (alpha > 1.20) regions.
        </t>
      </section>

      <section anchor="criticality-confidence" numbered="true" toc="include">
        <name>Criticality Confidence Score</name>
        <t>
          The Criticality Confidence is a value in [0, 1] computed
          from the PSD scaling exponent and the goodness-of-fit
          (R-squared) of the power-law regression:
        </t>
        <artwork type="ascii-art"><![CDATA[
   alpha_score = 1.0 - |alpha - 0.55| / 0.25

   criticality_confidence = alpha_score * R_squared

   where:
     0.55 is the center of the biological range
     0.25 is the half-width of the biological range
     R_squared is the coefficient of determination of the
       log-log linear regression
]]></artwork>
        <t>
          A criticality_confidence below 0.5 SHOULD trigger elevated
          monitoring. A value below 0.3 SHOULD flag the trajectory for
          manual review or additional verification challenges.
        </t>
      </section>

      <section anchor="levy-psd-bridge" numbered="true" toc="include">
        <name>Levy-PSD Bridge</name>
        <t>
          This section establishes the mathematical relationship
          between the truncated Levy flight displacement exponent beta
          (Section 7.1) and the PSD scaling exponent alpha
          (Section 6.1). Previous revisions of this specification
          asserted both as independent properties of human mobility.
          This section demonstrates that they are related through the
          spectral properties of heavy-tailed random processes.
        </t>

        <section anchor="analytical-relationship" numbered="true" toc="include">
          <name>Analytical Relationship</name>
          <t>
            For a stationary stochastic process with displacement
            increments drawn from a symmetric stable distribution with
            stability index mu (where mu = beta - 1 for the Levy
            flight exponent beta used in Section 7.1), the Power
            Spectral Density of the cumulative displacement series
            scales as:
          </t>
          <artwork type="ascii-art"><![CDATA[
   S(f) ~ f^{-alpha}

   where alpha = 2 - mu = 2 - (beta - 1) = 3 - beta

   For pure (non-truncated) Levy flights.
]]></artwork>
          <t>
            However, human displacement follows TRUNCATED Levy flights
            with an exponential cutoff at distance kappa
            (Section 7.1). The truncation modifies the spectral
            relationship: at low frequencies (long time scales), the
            exponential cutoff causes the process to resemble
            Brownian motion (alpha approaching 2), while at high
            frequencies (short time scales), the pure Levy scaling
            dominates. For the intermediate frequency range relevant
            to TRIP's sliding window (64-256 breadcrumbs collected
            at 15-minute intervals, spanning approximately 16-64
            hours of movement data), the effective PSD scaling
            exponent is:
          </t>
          <artwork type="ascii-art"><![CDATA[
   alpha_eff ~ (3 - beta) * g(N, kappa, delta_t)

   where:
     beta    = Levy flight exponent (typically 1.50 - 1.90)
     g(...)  = correction factor for truncation and finite window
     N       = number of breadcrumbs in the analysis window
     kappa   = truncation distance (km)
     delta_t = mean inter-breadcrumb interval

   For typical human values:
     beta  ~ 1.75  =>  3 - beta = 1.25
     g(...)  ~ 0.4 - 0.6  (empirically observed)
     alpha_eff ~ 0.50 - 0.75

   This falls squarely within the biological range [0.30, 0.80].
]]></artwork>
        </section>

        <section anchor="empirical-evidence" numbered="true" toc="include">
          <name>Empirical Evidence</name>
          <t>
            The analytical relationship above is supported by empirical
            studies:
          </t>
          <ul>
            <li>
              Vadai et al. <xref target="VADAI-GPS"/> analyzed GPS
              trajectory data and demonstrated 1/f-like spectral
              characteristics in human daily motion, with PSD scaling
              exponents consistent with the predicted range.
            </li>
            <li>
              Maczak et al. <xref target="MACZAK-SPECTRAL"/> studied
              42 human subjects and found spectral exponents close to
              1 in general physical activity data, confirming the
              presence of long-range temporal correlations consistent
              with Self-Organized Criticality.
            </li>
            <li>
              The original Levy flight analysis by Gonzalez, Hidalgo,
              and Barabasi <xref target="BARABASI-MOBILITY"/> reported
              beta values of approximately 1.75 +/- 0.15 across a
              population of 100,000 mobile phone users, which through
              the bridge equation predicts alpha_eff in [0.40, 0.70]
              -- consistent with the biological classification range.
            </li>
          </ul>
        </section>

        <section anchor="numerical-validation" numbered="true" toc="include">
          <name>Numerical Validation</name>
          <t>
            Implementers SHOULD validate the Levy-PSD bridge for their
            specific deployment by conducting Monte Carlo simulations:
          </t>
          <ol>
            <li>Generate 10,000 synthetic trajectories using truncated
            Levy flights with beta drawn uniformly from [1.50, 1.90]
            and kappa drawn from a log-normal distribution matching
            the target population.</li>
            <li>Quantize each trajectory to H3 resolution 10 and apply
            the deduplication rules of Section 3.1.</li>
            <li>Compute the PSD scaling exponent alpha for each
            synthetic trajectory.</li>
            <li>Verify that the (beta, alpha) pairs fall within the
            expected relationship with the correction factor g in the
            range [0.3, 0.7].</li>
          </ol>
          <t>
            Additionally, generate control trajectories from:
          </t>
          <ul>
            <li>Pure random walks (expected: alpha near 0)</li>
            <li>Deterministic replays of recorded trajectories
            (expected: alpha near 2)</li>
            <li>Correlated random walks with Gaussian increments
            (expected: alpha outside [0.30, 0.80])</li>
          </ul>
          <t>
            The Monte Carlo validation confirms that the [0.30, 0.80]
            classification boundary correctly separates biological
            from synthetic trajectories with quantifiable error rates
            (see Section 6.4).
          </t>
        </section>
      </section>

      <section anchor="convergence-analysis" numbered="true" toc="include">
        <name>Convergence Analysis</name>
        <t>
          The PSD scaling exponent, Levy flight parameters, and flock
          alignment metrics are fundamentally ensemble properties
          derived from statistical physics. Applying them to a single
          trajectory raises the question: how many breadcrumbs are
          required for these ensemble properties to converge on an
          individual trajectory with a given confidence level?
        </t>
        <t>
          This section provides guidance on convergence behavior.
          Definitive false positive and false negative rates require
          empirical validation against real-world datasets (e.g.,
          GeoLife, MDC), which is planned for a companion
          publication. The framework below describes the expected
          convergence properties and the protocol's mitigation
          strategies.
        </t>

        <section anchor="convergence-regimes" numbered="true" toc="include">
          <name>Convergence Regimes</name>
          <t>
            The reliability of TRIP's statistical classifiers depends
            on trajectory length. Three regimes are identified:
          </t>
          <table anchor="convergence-table">
            <name>Convergence Regimes</name>
            <thead>
              <tr>
                <th>Breadcrumbs</th>
                <th>Regime</th>
                <th>PSD Reliability</th>
                <th>Levy Fit Reliability</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>0 - 63</td>
                <td>Bootstrap</td>
                <td>Not computed (insufficient data for DFT)</td>
                <td>Not reliable</td>
              </tr>
              <tr>
                <td>64 - 199</td>
                <td>Provisional</td>
                <td>Computed but with wide confidence intervals;
                alpha estimate variance ~ 0.15</td>
                <td>Beta estimated but kappa poorly constrained</td>
              </tr>
              <tr>
                <td>200+</td>
                <td>Stable</td>
                <td>Alpha estimate variance &lt; 0.05; R-squared
                meaningful</td>
                <td>Both beta and kappa well-constrained</td>
              </tr>
            </tbody>
          </table>
          <t>
            The trust scoring formula (Section 10) incorporates
            profile maturity through the factor
            min(breadcrumb_count / 200, 1.0), which scales Hamiltonian
            weights during the bootstrap and provisional regimes.
          </t>
        </section>

        <section anchor="composition-defense" numbered="true" toc="include">
          <name>Composition of Independent Tests</name>
          <t>
            TRIP does not rely on any single statistical test. The
            six-component Hamiltonian (Section 8) combines independent
            classifiers: spatial Levy fit, temporal Markov properties,
            kinetic transition analysis, flock alignment, IMU
            cross-correlation, and chain structural integrity. Even if
            each individual test has a significant error rate on a
            short trajectory, the composition of independent tests
            reduces the combined error probability.
          </t>
          <t>
            For k independent tests each with false positive rate p_i,
            the probability that a synthetic trajectory passes ALL
            tests simultaneously is:
          </t>
          <artwork type="ascii-art"><![CDATA[
   P(false_positive_all) = product(p_i, i=1..k)

   For k = 6 tests each with p_i = 0.1 (conservative):
   P(false_positive_all) = 0.1^6 = 10^{-6}
]]></artwork>
          <t>
            In practice the tests are not perfectly independent
            (spatial and kinetic components share displacement data),
            so the actual combined false positive rate will be higher
            than the product bound. Empirical measurement is required.
          </t>
        </section>

        <section anchor="cost-asymmetry" numbered="true" toc="include">
          <name>Error Cost Asymmetry</name>
          <t>
            TRIP's classification errors have asymmetric costs:
          </t>
          <ul>
            <li>
              <strong>False negative</strong> (human classified as bot):
              Low cost. The identity accumulates more breadcrumbs and is
              reclassified correctly as the trajectory lengthens.
              No permanent damage occurs.
            </li>
            <li>
              <strong>False positive</strong> (bot classified as human):
              Higher cost, but requires simultaneous spoofing across
              all six Hamiltonian components -- spatial displacement
              statistics, temporal circadian patterns, Markov transition
              probabilities, flock alignment, IMU cross-correlation,
              and chain timing regularity. This represents a
              significantly harder adversarial problem than defeating
              any single test.
            </li>
          </ul>
        </section>

        <section anchor="minimum-breadcrumbs" numbered="true" toc="include">
          <name>Minimum Breadcrumbs for Classification</name>
          <t>
            Based on the convergence analysis above, the minimum
            trajectory lengths for classification decisions are:
          </t>
          <ul>
            <li>
              <strong>64 breadcrumbs</strong>: Minimum for PSD
              computation. Sufficient for preliminary screening
              (reject obvious bots) but not for positive human
              classification.
            </li>
            <li>
              <strong>100 breadcrumbs</strong>: Minimum for handle
              claiming (Section 10). The Levy fit becomes usable
              and the Markov transition matrix begins to stabilize.
            </li>
            <li>
              <strong>200 breadcrumbs</strong>: RECOMMENDED for
              reliable positive human classification. At this length,
              the PSD alpha estimate has variance below 0.05 and the
              Levy parameters are well-constrained.
            </li>
            <li>
              <strong>256+ breadcrumbs</strong>: Sufficient for
              high-confidence classification suitable for
              high-stakes Relying Party decisions.
            </li>
          </ul>
          <t>
            Determining precise false positive and false negative
            rates at each breadcrumb count requires empirical
            validation. Implementers SHOULD conduct the Monte Carlo
            simulations described in Section 6.3.3 and test against
            publicly available human mobility datasets to establish
            ROC curves and confidence intervals for their specific
            deployment parameters.
          </t>
        </section>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 7: MOBILITY STATISTICS                                -->
    <!-- ============================================================ -->

    <section anchor="mobility" numbered="true" toc="include">
      <name>Mobility Statistics</name>
      <t>
        This section defines the mobility model that enforces known
        constraints of human movement, as established by Barabasi et al.
        <xref target="BARABASI-MOBILITY"/>.
      </t>

      <section anchor="levy-flights" numbered="true" toc="include">
        <name>Truncated Levy Flights</name>
        <t>
          Human displacement between consecutive recorded locations
          follows a truncated power-law distribution:
        </t>
        <artwork type="ascii-art"><![CDATA[
   P(delta_r) ~ delta_r^(-beta) * exp(-delta_r / kappa)

   where:
     delta_r = displacement distance (km)
     beta    = power-law exponent (typically 1.50 - 1.90)
     kappa   = exponential cutoff distance (km)
]]></artwork>
        <t>
          The exponent beta captures the heavy-tailed nature of human
          movement: most displacements are short (home to office) but
          occasional long jumps (travel) follow a predictable
          distribution. The cutoff kappa is learned per identity and
          represents the characteristic maximum range.
        </t>
        <t>
          A conforming implementation MUST maintain a running estimate
          of beta and kappa for each identity by fitting the
          displacement histogram using maximum likelihood estimation
          over the most recent epoch (100 breadcrumbs).
        </t>
        <t>
          A new displacement that falls outside the 99.9th percentile
          of the fitted distribution MUST increment the spatial
          anomaly counter.
        </t>
        <t>
          The relationship between beta and the PSD scaling exponent
          alpha is established in Section 6.3. Implementations
          SHOULD verify internal consistency between the fitted beta
          value and the observed alpha value; a discrepancy exceeding
          the expected range of the correction factor g (Section 6.3.1)
          MAY indicate data quality issues or adversarial manipulation
          of one metric.
        </t>
      </section>

      <section anchor="predictability" numbered="true" toc="include">
        <name>Trajectory Predictability</name>
        <t>
          Research has demonstrated that approximately 93% of human
          movement is predictable based on historical patterns
          <xref target="SONG-LIMITS"/>. TRIP exploits this by
          maintaining a Markov Transition Matrix over anchor cells:
        </t>
        <artwork type="ascii-art"><![CDATA[
   T[a_i][a_j] = count(transitions from a_i to a_j)
                  / count(all departures from a_i)

   where a_i, a_j are anchor cells.
]]></artwork>
        <t>
          An anchor cell is defined as any H3 cell where the identity
          has recorded 5 or more breadcrumbs. The transition matrix is
          rebuilt at each epoch boundary.
        </t>
        <t>
          The predictability score Pi for an identity is the fraction
          of observed transitions that match the highest-probability
          successor in the Markov matrix. Human identities converge
          toward Pi values in the range [0.80, 0.95] after
          approximately 200 breadcrumbs. Deviations below 0.60 are
          anomalous.
        </t>
      </section>

      <section anchor="circadian" numbered="true" toc="include">
        <name>Circadian and Weekly Profiles</name>
        <t>
          The implementation SHOULD maintain two histogram profiles:
        </t>
        <ul>
          <li>A circadian profile C[hour] recording the probability of
          activity in each hour of the day (24 bins).</li>
          <li>A weekly profile W[day] recording the probability of
          activity on each day of the week (7 bins).</li>
        </ul>
        <t>
          These profiles provide the temporal baseline for the
          Hamiltonian temporal energy component (Section 8.2).
        </t>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 8: HAMILTONIAN                                        -->
    <!-- ============================================================ -->

    <section anchor="hamiltonian" numbered="true" toc="include">
      <name>The Six-Component Hamiltonian</name>
      <t>
        To assess each incoming breadcrumb, the Criticality Engine
        computes a weighted energy score H that quantifies how much
        the breadcrumb deviates from the identity's learned behavioral
        profile. High energy indicates anomalous behavior; low energy
        indicates normalcy.
      </t>
      <artwork type="ascii-art"><![CDATA[
   H = w_1 * H_spatial
     + w_2 * H_temporal
     + w_3 * H_kinetic
     + w_4 * H_flock
     + w_5 * H_contextual
     + w_6 * H_structure
]]></artwork>
      <t>Default weights:</t>
      <table anchor="hamiltonian-weights">
        <name>Hamiltonian Component Weights</name>
        <thead>
          <tr><th>Component</th><th>Weight</th><th>Diagnostic Target</th></tr>
        </thead>
        <tbody>
          <tr><td>H_spatial</td><td>0.25</td><td>Displacement anomalies (teleportation)</td></tr>
          <tr><td>H_temporal</td><td>0.20</td><td>Circadian rhythm violations</td></tr>
          <tr><td>H_kinetic</td><td>0.20</td><td>Anchor transition improbability</td></tr>
          <tr><td>H_flock</td><td>0.15</td><td>Misalignment with local human flow</td></tr>
          <tr><td>H_contextual</td><td>0.10</td><td>Sensor cross-correlation failure</td></tr>
          <tr><td>H_structure</td><td>0.10</td><td>Chain integrity and timing regularity</td></tr>
        </tbody>
      </table>
      <t>
        Weights are modulated by the profile maturity m, defined as
        min(breadcrumb_count / 200, 1.0). During the bootstrap phase
        (m &lt; 1.0), all weights are scaled by m, widening the
        acceptance threshold for new identities.
      </t>

      <section anchor="h-spatial" numbered="true" toc="include">
        <name>H_spatial: Displacement Anomaly</name>
        <t>
          Given the identity's fitted truncated Levy distribution
          P(delta_r), the spatial energy for a displacement delta_r
          is the negative log-likelihood (surprise):
        </t>
        <artwork type="ascii-art"><![CDATA[
   H_spatial = -log(P(delta_r))

   where P(delta_r) = C * delta_r^(-beta) * exp(-delta_r / kappa)
   and C is the normalization constant.
]]></artwork>
        <t>
          Typical displacements yield H_spatial near the identity's
          historical baseline. A displacement that exceeds the
          identity's learned kappa cutoff by more than a factor of 3
          produces an H_spatial value in the CRITICAL range.
        </t>
      </section>

      <section anchor="h-temporal" numbered="true" toc="include">
        <name>H_temporal: Rhythm Anomaly</name>
        <artwork type="ascii-art"><![CDATA[
   H_temporal = -log(C[current_hour]) - log(W[current_day])
]]></artwork>
        <t>
          Activity at 3:00 AM for an identity with a 9-to-5 circadian
          profile yields high H_temporal. Activity at 8:00 AM on a
          Tuesday for the same identity yields low H_temporal.
        </t>
      </section>

      <section anchor="h-kinetic" numbered="true" toc="include">
        <name>H_kinetic: Transition Anomaly</name>
        <artwork type="ascii-art"><![CDATA[
   from_anchor = nearest anchor to previous breadcrumb
   to_anchor   = nearest anchor to current breadcrumb
   H_kinetic   = -log(max(T[from_anchor][to_anchor], epsilon))

   where epsilon = 0.001 (floor to prevent log(0))
]]></artwork>
        <t>
          A home-to-office transition at 8:00 AM yields low H_kinetic.
          An office-to-unknown-city transition yields high H_kinetic.
        </t>
      </section>

      <section anchor="h-flock" numbered="true" toc="include">
        <name>H_flock: Topological Alignment</name>
        <t>
          Inspired by Parisi's finding that starlings track their k
          nearest topological neighbors (k approximately 6-7) rather
          than all birds within a metric radius
          <xref target="BALLERINI-TOPOLOGICAL"/>, the flock energy
          measures alignment between the identity's velocity vector
          and the aggregate velocity of co-located TRIP entities.
        </t>
        <artwork type="ascii-art"><![CDATA[
   v_self  = displacement vector of current identity
   v_flock = mean displacement vector of k nearest
             co-located identities (k = 7)

   alignment = dot(v_self, v_flock)
               / (|v_self| * |v_flock|)

   H_flock = 1.0 - max(alignment, 0)
]]></artwork>
        <t>
          When flock data is unavailable (sparse network or privacy
          constraints), the implementation SHOULD fall back to comparing
          the current velocity against the identity's own historical
          velocity distribution at the same location and time-of-day.
        </t>
        <t>
          H_flock defeats GPS replay attacks: an adversary replaying a
          previously recorded trajectory will find that the ambient
          flock has changed since the recording, producing a
          misalignment signal.
        </t>
      </section>

      <section anchor="h-contextual" numbered="true" toc="include">
        <name>H_contextual: Sensor Cross-Correlation</name>
        <artwork type="ascii-art"><![CDATA[
   H_contextual = divergence(
     observed_imu_magnitude,
     expected_imu_magnitude_for(gps_displacement)
   )
]]></artwork>
        <t>
          Implementations that lack IMU access MUST set H_contextual = 0
          and SHOULD increase the weights of other components
          proportionally.
        </t>
      </section>

      <section anchor="h-structure" numbered="true" toc="include">
        <name>H_structure: Chain Structural Integrity</name>
        <ul>
          <li>Inter-breadcrumb timing regularity: excessively uniform
          intervals suggest automation.</li>
          <li>Hash chain continuity: any break in the chain produces
          maximum H_structure.</li>
          <li>Phase-space smoothness: the velocity-acceleration phase
          portrait of a human trajectory traces smooth loops, while
          bots produce either chaotic blobs or tight limit cycles.</li>
        </ul>
      </section>

      <section anchor="alert-classification" numbered="true" toc="include">
        <name>Alert Classification</name>
        <t>
          The total Hamiltonian H maps to an alert level. The baseline
          H_baseline is the rolling median of the identity's own recent
          energy values, making the threshold self-calibrating per
          identity:
        </t>
        <table anchor="alert-levels">
          <name>Hamiltonian Alert Levels</name>
          <thead>
            <tr><th>H Range</th><th>Level</th><th>Action</th></tr>
          </thead>
          <tbody>
            <tr><td>[0, H_baseline * 1.5)</td><td>NOMINAL</td><td>Normal operation</td></tr>
            <tr><td>[H_baseline * 1.5, 3.0)</td><td>ELEVATED</td><td>Increase sampling frequency, log</td></tr>
            <tr><td>[3.0, 5.0)</td><td>SUSPICIOUS</td><td>Flag for review, require reconfirmation</td></tr>
            <tr><td>[5.0, infinity)</td><td>CRITICAL</td><td>Freeze trust score, trigger challenge</td></tr>
          </tbody>
        </table>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 9: PoH CERTIFICATE                                    -->
    <!-- ============================================================ -->

    <section anchor="poh-certificate" numbered="true" toc="include">
      <name>Proof-of-Humanity Certificate</name>
      <t>
        A PoH Certificate is a compact, privacy-preserving Attestation
        Result (in the RATS sense) asserting that an identity has
        demonstrated biological movement characteristics. It contains
        ONLY statistical exponents derived from the trajectory -- no
        raw location data, no GPS coordinates, no cell identifiers.
      </t>
      <t>
        The certificate is encoded as a CBOR map:
      </t>
      <table anchor="poh-fields">
        <name>PoH Certificate CBOR Fields</name>
        <thead>
          <tr><th>Key</th><th>Type</th><th>Description</th></tr>
        </thead>
        <tbody>
          <tr><td>0</td><td>bstr (32)</td><td>Identity public key</td></tr>
          <tr><td>1</td><td>uint</td><td>Issuance timestamp</td></tr>
          <tr><td>2</td><td>uint</td><td>Epoch count at issuance</td></tr>
          <tr><td>3</td><td>float</td><td>PSD scaling exponent alpha</td></tr>
          <tr><td>4</td><td>float</td><td>Levy beta exponent</td></tr>
          <tr><td>5</td><td>float</td><td>Levy kappa cutoff (km)</td></tr>
          <tr><td>6</td><td>float</td><td>Predictability score Pi</td></tr>
          <tr><td>7</td><td>float</td><td>Criticality confidence</td></tr>
          <tr><td>8</td><td>float</td><td>Trust score T</td></tr>
          <tr><td>9</td><td>uint</td><td>Unique cell count</td></tr>
          <tr><td>10</td><td>uint</td><td>Total breadcrumb count</td></tr>
          <tr><td>11</td><td>uint</td><td>Validity duration (seconds)</td></tr>
          <tr><td>12</td><td>bstr (16)</td><td>Relying Party nonce (REQUIRED)</td></tr>
          <tr><td>13</td><td>bstr (32)</td><td>Chain head hash at issuance (REQUIRED)</td></tr>
          <tr><td>14</td><td>bstr (64)</td><td>Verifier Ed25519 signature</td></tr>
        </tbody>
      </table>
      <t>
        Fields 12 and 13 are REQUIRED in all PoH Certificates. Every
        certificate MUST be issued in response to an Active
        Verification request (Section 12). There is no passive issuance
        mode.
      </t>
      <t>
        A Relying Party receiving a PoH Certificate can verify:
      </t>
      <ol>
        <li>The Verifier signature (field 14) is valid against a trusted
        Verifier public key.</li>
        <li>The PSD scaling exponent alpha (field 3) falls within
        [0.30, 0.80].</li>
        <li>The criticality confidence (field 7) exceeds the Relying
        Party's policy threshold.</li>
        <li>The trust score (field 8) meets application
        requirements.</li>
        <li>The certificate has not expired (field 1 + field 11 >
        current time).</li>
        <li>The nonce (field 12) matches the Relying Party's original
        challenge.</li>
        <li>The chain head hash (field 13) provides freshness
        binding.</li>
      </ol>
      <t>
        The certificate reveals NOTHING about where the identity has
        been -- only that it has moved through the world in a manner
        statistically consistent with a biological organism.
      </t>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 10: TRUST SCORING                                     -->
    <!-- ============================================================ -->

    <section anchor="trust-scoring" numbered="true" toc="include">
      <name>Trust Scoring</name>
      <artwork type="ascii-art"><![CDATA[
   T = 0.40 * min(breadcrumb_count / 200, 1.0)
     + 0.30 * min(unique_cells / 50, 1.0)
     + 0.20 * min(days_since_first / 365, 1.0)
     + 0.10 * chain_integrity

   chain_integrity = 1.0 if chain verification passes, else 0.0
   T is expressed as a percentage in [0, 100].
]]></artwork>
      <t>
        The threshold for claiming a handle (binding a human-readable
        name to a TIT) requires breadcrumb_count >= 100 and T >= 20.
      </t>
      <t>
        A trajectory that fails the criticality test (alpha outside
        [0.30, 0.80]) MUST have its trust score capped at 50,
        regardless of other factors.
      </t>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 11: RATS MAPPING                                      -->
    <!-- ============================================================ -->

    <section anchor="rats-mapping" numbered="true" toc="include">
      <name>RATS Architecture Mapping</name>
      <t>
        TRIP implements the Remote ATtestation procedureS (RATS)
        architecture defined in <xref target="RFC9334"/>. This section
        provides the normative mapping between TRIP components and
        RATS roles.
      </t>

      <section anchor="role-mapping" numbered="true" toc="include">
        <name>Role Mapping</name>
        <table anchor="rats-roles">
          <name>TRIP-to-RATS Role Mapping</name>
          <thead>
            <tr><th>RATS Role</th><th>TRIP Component</th><th>Description</th></tr>
          </thead>
          <tbody>
            <tr><td>Attester</td><td>TRIP-enabled mobile device</td>
            <td>Collects breadcrumbs, signs them with the identity
            Ed25519 private key, chains them into the append-only
            trajectory log, and transmits H3-quantized Evidence to the
            Verifier.</td></tr>
            <tr><td>Evidence</td><td>Breadcrumbs and epoch records</td>
            <td>H3-quantized spatiotemporal claims including cell
            identifiers, timestamps, context digests, chain hashes, and
            Ed25519 signatures. Evidence is transmitted from Attester to
            Verifier.</td></tr>
            <tr><td>Verifier</td><td>Criticality Engine</td>
            <td>Receives Evidence, performs chain verification, computes
            PSD scaling exponents, fits Levy flight parameters, evaluates
            the six-component Hamiltonian, and produces Attestation
            Results.</td></tr>
            <tr><td>Attestation Result</td><td>PoH Certificate and trust score</td>
            <td>Contains only statistical exponents (alpha, beta, kappa)
            and aggregate scores. No raw Evidence (cell IDs, timestamps,
            chain hashes) is included in the Attestation Result.</td></tr>
            <tr><td>Relying Party</td><td>Any service consuming PoH Certificates</td>
            <td>Evaluates the Attestation Result against its own policy.
            Does not receive or process raw Evidence.</td></tr>
          </tbody>
        </table>
      </section>

      <section anchor="evidence-flow" numbered="true" toc="include">
        <name>Evidence Flow</name>
        <t>
          H3-quantized Evidence is transmitted from the Attester to
          the Verifier. This is an explicit design choice: the Verifier
          requires access to the full breadcrumb chain to compute PSD
          scaling exponents, fit Levy flight parameters, and evaluate
          the Hamiltonian.
        </t>
        <t>
          Privacy preservation derives from the H3 quantization
          transform applied by the Attester before any data leaves the
          device, NOT from data locality. Raw GPS coordinates MUST NOT
          be transmitted. The quantization transform is lossy and
          irreversible.
        </t>
        <t>
          The Verifier MUST NOT forward raw Evidence to Relying
          Parties. Only the Attestation Result (PoH Certificate) is
          disclosed to Relying Parties.
        </t>
      </section>

      <section anchor="verifier-trust" numbered="true" toc="include">
        <name>Verifier Trust Model</name>
        <t>
          The Relying Party MUST trust the Verifier that produced the
          Attestation Result. The TRIP protocol supports multiple
          independent Verifiers. An Attester MAY submit Evidence to
          more than one Verifier. A Relying Party MAY accept
          Attestation Results from any Verifier it trusts.
        </t>
        <t>
          Each Verifier MUST have its own Ed25519 key pair. The
          Verifier signs PoH Certificates with its private key
          (field 14). Relying Parties verify this signature against
          the Verifier's published public key.
        </t>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 12: REPLAY PROTECTION (ACTIVE ONLY)                   -->
    <!-- ============================================================ -->

    <section anchor="replay-protection" numbered="true" toc="include">
      <name>Replay Protection and Active Verification</name>
      <t>
        TRIP provides replay protection at two distinct layers:
        protection of the Evidence chain against tampering, and
        protection of Attestation Results against replay to Relying
        Parties. All Attestation Results MUST be issued via the Active
        Verification Protocol described in this section.
      </t>

      <section anchor="chain-replay" numbered="true" toc="include">
        <name>Chain-Level Replay Protection</name>
        <t>
          The monotonically increasing index and the chaining via the
          previous block hash field provide replay protection within a
          single trajectory. A replayed breadcrumb will fail the chain
          integrity check. Cross-trajectory replay will fail Ed25519
          signature verification.
        </t>
      </section>

      <section anchor="active-verification" numbered="true" toc="include">
        <name>Active Verification Protocol</name>
        <t>
          The Active Verification Protocol provides cryptographic
          freshness guarantees by binding the Attestation Result to a
          Relying Party-supplied nonce, the current chain head, and the
          current time. This is the ONLY verification mode supported
          by TRIP. There is no passive verification mode.
        </t>
        <t>The protocol proceeds as follows:</t>
        <ol>
          <li>
            <t>The Relying Party generates an unpredictable nonce
            (RECOMMENDED: 16 bytes from a cryptographically secure
            random number generator) and sends a Verification Request
            to the Verifier:</t>
            <artwork type="ascii-art"><![CDATA[
   VerificationRequest = {
     0 => bstr .size 32,   ; identity public key
     1 => bstr .size 16,   ; nonce
     2 => uint,            ; request timestamp
     3 => uint,            ; requested freshness window (seconds)
   }
]]></artwork>
          </li>
          <li>
            <t>The Verifier delivers a Liveness Challenge to the
            Attester via a real-time channel (e.g., WebSocket push,
            push notification):</t>
            <artwork type="ascii-art"><![CDATA[
   LivenessChallenge = {
     0 => bstr .size 16,   ; nonce (from Relying Party)
     1 => bstr .size 32,   ; verifier identity (public key)
     2 => uint,            ; challenge timestamp
     3 => uint,            ; response deadline (seconds)
   }
]]></artwork>
          </li>
          <li>
            <t>The Attester constructs and signs a Liveness Response
            binding the nonce to the current chain state:</t>
            <artwork type="ascii-art"><![CDATA[
   LivenessResponse = {
     0 => bstr .size 16,   ; nonce echo
     1 => bstr .size 32,   ; chain_head_hash
     2 => uint,            ; response timestamp
     3 => uint,            ; current breadcrumb index
     4 => bstr .size 64,   ; Ed25519 signature over fields 0-3
   }
]]></artwork>
          </li>
          <li>
            <t>The Verifier validates the Liveness Response by
            checking:</t>
            <ul>
              <li>The Ed25519 signature (field 4) is valid against the
              identity's public key over fields 0-3.</li>
              <li>The nonce echo (field 0) matches the original
              Verification Request.</li>
              <li>The chain_head_hash (field 1) is consistent with the
              Verifier's stored trajectory state.</li>
              <li>The response timestamp (field 2) is within the
              deadline.</li>
              <li>The breadcrumb index (field 3) matches or exceeds
              the Verifier's last known index.</li>
            </ul>
          </li>
          <li>Upon successful validation, the Verifier produces a fresh
          PoH Certificate with field 12 set to the nonce and field 13
          set to the chain_head_hash, signs it, and returns it to the
          Relying Party.</li>
          <li>The Relying Party verifies the PoH Certificate per
          Section 9, confirming that field 12 matches its original
          nonce.</li>
        </ol>
        <t>
          If the Attester does not respond within the deadline, the
          Verifier MUST return an error. The Verifier MUST NOT issue a
          PoH Certificate without a valid Liveness Response.
        </t>
      </section>

      <section anchor="active-cddl" numbered="true" toc="include">
        <name>Active Verification CDDL</name>
        <t>
          The following CDDL <xref target="RFC8610"/> schema defines
          the Active Verification messages:
        </t>
        <artwork type="ascii-art"><![CDATA[
   ; Active Verification Protocol CDDL Schema

   verification-request = {
     0 => bstr .size 32,        ; identity_key
     1 => bstr .size 16,        ; nonce
     2 => uint,                 ; request_timestamp
     3 => uint,                 ; freshness_window_seconds
   }

   liveness-challenge = {
     0 => bstr .size 16,        ; nonce
     1 => bstr .size 32,        ; verifier_key
     2 => uint,                 ; challenge_timestamp
     3 => uint,                 ; response_deadline_seconds
   }

   liveness-response = {
     0 => bstr .size 16,        ; nonce_echo
     1 => bstr .size 32,        ; chain_head_hash
     2 => uint,                 ; response_timestamp
     3 => uint,                 ; current_breadcrumb_index
     4 => bstr .size 64,        ; ed25519_signature
   }
]]></artwork>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 13: SECURITY CONSIDERATIONS                           -->
    <!-- ============================================================ -->

    <section anchor="security" numbered="true" toc="include">
      <name>Security Considerations</name>

      <section anchor="gps-replay" numbered="true" toc="include">
        <name>GPS Replay Attacks</name>
        <t>
          An adversary records a legitimate trajectory and replays the
          GPS coordinates on a different device. TRIP detects this
          through multiple channels:
        </t>
        <ul>
          <li>H_flock: the ambient flock has changed since the
          recording.</li>
          <li>H_contextual: unless the adversary also replays Wi-Fi
          BSSIDs, cellular tower IDs, and IMU data, the context digest
          will not match.</li>
          <li>H_structure: the timing regularity of a replay is
          typically either too perfect or shifted in a detectable
          pattern.</li>
        </ul>
      </section>

      <section anchor="synthetic-walk" numbered="true" toc="include">
        <name>Synthetic Walk Generators</name>
        <ul>
          <li>PSD scaling exponent test: random walk generators produce
          white noise (alpha approximately 0). Brownian motion
          generators produce alpha approximately 2. Neither falls in
          the biological [0.30, 0.80] range.</li>
          <li>Levy flight fitting: synthetic displacements rarely match
          the truncated power-law distribution with biologically
          plausible beta and kappa values.</li>
          <li>Predictability test: synthetic trajectories either show
          near-zero predictability (random) or near-perfect
          predictability (scripted), both outside the human [0.80,
          0.95] range.</li>
        </ul>
      </section>

      <section anchor="emulator" numbered="true" toc="include">
        <name>Emulator Injection</name>
        <t>
          An adversary runs the TRIP client on an Android/iOS emulator
          with spoofed GPS. Detection relies on H_contextual (emulators
          lack real IMU data) and context digest (emulators lack real
          Wi-Fi and cellular data).
        </t>
      </section>

      <section anchor="robot-dog" numbered="true" toc="include">
        <name>Device Strapping (Robot Dog Attack)</name>
        <t>
          An adversary straps a phone to a mobile robot or drone. This
          is the most sophisticated attack because it produces real GPS,
          Wi-Fi, cellular, and IMU data from actual physical movement.
          Mitigation relies on PSD analysis (robotic movement lacks 1/f
          noise), phase-space smoothness (H_structure), and circadian
          profiles. This attack remains an active area of research.
        </t>
      </section>

      <section anchor="verifier-compromise" numbered="true" toc="include">
        <name>Verifier Compromise</name>
        <t>
          A compromised Verifier could issue fraudulent PoH
          Certificates. Mitigations: Relying Parties SHOULD accept
          certificates from multiple independent Verifiers; key
          rotation and revocation procedures SHOULD be established;
          the Active Verification Protocol ensures even a compromised
          Verifier cannot produce a valid certificate without the
          Attester's cooperation.
        </t>
      </section>

      <section anchor="dos" numbered="true" toc="include">
        <name>Denial of Service</name>
        <t>
          Verifiers SHOULD rate-limit requests per identity and per
          Relying Party. The Active Verification Protocol's real-time
          requirement provides an inherent rate limit on valid
          completions.
        </t>
      </section>

      <section anchor="statistical-classifier-limits" numbered="true" toc="include">
        <name>Statistical Classifier Limitations</name>
        <t>
          The Criticality Engine applies ensemble statistical properties
          (PSD scaling exponent, Levy flight parameters, flock
          alignment) to individual trajectories. As discussed in
          Section 6.4, the reliability of these classifiers depends on
          trajectory length. Implementers MUST be aware that:
        </t>
        <ul>
          <li>Classification confidence is low during the bootstrap
          regime (fewer than 64 breadcrumbs) and moderate during the
          provisional regime (64-199 breadcrumbs).</li>
          <li>The alpha range [0.30, 0.80] is a protocol-specified
          boundary informed by, but not directly taken from, a single
          peer-reviewed source. Deployments SHOULD calibrate this range
          against population-specific data.</li>
          <li>The composition of six independent Hamiltonian components
          provides defense in depth, but the actual combined error rate
          depends on the degree of independence between components,
          which requires empirical measurement.</li>
          <li>Definitive ROC curves and confidence intervals require
          validation against real-world human mobility datasets. This
          validation is planned for a companion publication and is
          outside the scope of this protocol specification.</li>
        </ul>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 14: PRIVACY CONSIDERATIONS                            -->
    <!-- ============================================================ -->

    <section anchor="privacy" numbered="true" toc="include">
      <name>Privacy Considerations</name>

      <section anchor="quantization-privacy" numbered="true" toc="include">
        <name>Quantization-Based Privacy</name>
        <t>
          TRIP's privacy model is based on lossy spatial quantization,
          not on data locality. H3-quantized Evidence is transmitted
          from the Attester to the Verifier. Raw GPS coordinates MUST
          NOT be transmitted. At the default resolution 10, each cell
          covers approximately 15,000 m^2, providing meaningful
          ambiguity in populated areas.
        </t>
      </section>

      <section anchor="verifier-data" numbered="true" toc="include">
        <name>Verifier Data Handling</name>
        <t>
          The Verifier MUST NOT forward raw Evidence to Relying Parties.
          The Verifier MUST disclose its data retention policy. The
          Verifier SHOULD retain only statistical aggregates and MAY
          discard individual breadcrumbs after incorporation. The
          Verifier MUST support data deletion where required by law.
        </t>
      </section>

      <section anchor="rp-minimization" numbered="true" toc="include">
        <name>Relying Party Data Minimization</name>
        <t>
          The PoH Certificate reveals statistical exponents and
          aggregate counts. A Relying Party does NOT learn which
          cities or specific locations the identity has visited, the
          identity's home or workplace, the identity's daily schedule,
          or any raw trajectory data.
        </t>
      </section>

      <section anchor="sybil" numbered="true" toc="include">
        <name>Trajectory Correlation and Sybil Resistance</name>
        <t>
          A single physical entity operating multiple TRIP identities
          simultaneously constitutes a Sybil attack. TRIP raises the
          cost: each identity requires a separate physical device,
          weeks of sustained movement, and independent trajectory
          accumulation. The H_flock component provides detection of
          co-located trajectories with identical displacement vectors.
        </t>
      </section>

      <section anchor="population-density" numbered="true" toc="include">
        <name>Population Density Considerations</name>
        <t>
          In sparsely populated areas, even cell-level granularity may
          narrow identification. Implementations SHOULD use lower
          resolution in rural areas and MAY allow users to override to
          a lower resolution at any time.
        </t>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 15: DEPLOYMENT CONSIDERATIONS                         -->
    <!-- ============================================================ -->

    <section anchor="deployment" numbered="true" toc="include">
      <name>Deployment Considerations</name>

      <section anchor="multi-verifier" numbered="true" toc="include">
        <name>Multiple Verifier Deployments</name>
        <t>
          Any entity that implements the verification procedures defined
          in this specification MAY operate as a TRIP Verifier. An
          Attester MAY submit Evidence to more than one Verifier.
        </t>
      </section>

      <section anchor="verifier-interop" numbered="true" toc="include">
        <name>Verifier Interoperability</name>
        <t>
          All conforming Verifiers MUST implement chain integrity
          verification, PSD scaling exponent classification, and the
          PoH Certificate format. Two Verifiers processing the same
          Evidence SHOULD produce consistent alpha, beta, and kappa
          values within numerical precision bounds.
        </t>
      </section>

      <section anchor="transport-binding" numbered="true" toc="include">
        <name>Transport Binding</name>
        <t>
          This specification does not mandate a specific transport.
          Implementations MAY use HTTPS, WebSocket, CoAP, or any
          transport providing confidentiality and integrity protection.
          The Active Verification Protocol requires a real-time channel.
        </t>
      </section>

      <section anchor="naming" numbered="true" toc="include">
        <name>Naming System Integration</name>
        <t>
          The binding of human-readable names to TRIP identities is
          outside the scope of this specification and is expected to
          be addressed in a companion document.
        </t>
      </section>

      <section anchor="accessibility" numbered="true" toc="include">
        <name>Accessibility and Low-Mobility Users</name>
        <t>
          TRIP does not require geographic travel. It requires sustained
          physical existence over time. This section addresses concerns
          raised during review <xref target="ZHANG-REVIEW"/>. A person
          who remains in a single H3 cell generates a valid trajectory;
          the trust scoring formula assigns 20% weight to temporal
          continuity and 40% to breadcrumb count, both accumulating
          regardless of spatial diversity. The context digest provides
          environmental diversity even without movement. The
          Hamiltonian is self-calibrating per identity. For stationary
          users, implementations SHOULD supplement spatial PSD with
          temporal PSD (analyzing inter-breadcrumb timing patterns).
          Deployments MUST NOT impose minimum spatial diversity
          requirements that would exclude users with mobility
          limitations.
        </t>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- SECTION 16: IANA                                              -->
    <!-- ============================================================ -->

    <section anchor="iana" numbered="true" toc="include">
      <name>IANA Considerations</name>
      <t>
        This document has no IANA actions at this time. Future
        revisions may request CBOR tag assignments and a media type
        registration for application/trip+cbor.
      </t>
    </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"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </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"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>

        <reference anchor="RFC8032" target="https://www.rfc-editor.org/info/rfc8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>

        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>

        <reference anchor="RFC9334" target="https://www.rfc-editor.org/info/rfc9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>

      </references>

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

        <reference anchor="H3" target="https://h3geo.org/">
          <front>
            <title>H3: Uber's Hexagonal Hierarchical Spatial Index</title>
            <author><organization>Uber Technologies</organization></author>
            <date year="2023"/>
          </front>
        </reference>

        <reference anchor="PARISI-NOBEL" target="https://www.nobelprize.org/prizes/physics/2021/parisi/facts/">
          <front>
            <title>Nobel Prize in Physics 2021: Giorgio Parisi</title>
            <author><organization>The Nobel Foundation</organization></author>
            <date year="2021"/>
          </front>
        </reference>

        <reference anchor="CAVAGNA-STARLINGS" target="https://doi.org/10.1073/pnas.1005766107">
          <front>
            <title>Scale-free correlations in starling flocks</title>
            <author fullname="A. Cavagna" initials="A." surname="Cavagna"/>
            <author fullname="A. Cimarelli" initials="A." surname="Cimarelli"/>
            <author fullname="I. Giardina" initials="I." surname="Giardina"/>
            <author fullname="G. Parisi" initials="G." surname="Parisi"/>
            <author fullname="R. Santagati" initials="R." surname="Santagati"/>
            <author fullname="F. Stefanini" initials="F." surname="Stefanini"/>
            <author fullname="M. Viale" initials="M." surname="Viale"/>
            <date year="2010"/>
          </front>
          <seriesInfo name="DOI" value="10.1073/pnas.1005766107"/>
        </reference>

        <reference anchor="BALLERINI-TOPOLOGICAL" target="https://doi.org/10.1073/pnas.0711437105">
          <front>
            <title>Interaction ruling animal collective behavior depends on topological rather than metric distance</title>
            <author fullname="M. Ballerini" initials="M." surname="Ballerini"/>
            <author fullname="N. Cabibbo" initials="N." surname="Cabibbo"/>
            <author fullname="R. Candelier" initials="R." surname="Candelier"/>
            <author fullname="A. Cavagna" initials="A." surname="Cavagna"/>
            <author fullname="E. Cisbani" initials="E." surname="Cisbani"/>
            <author fullname="I. Giardina" initials="I." surname="Giardina"/>
            <author fullname="V. Lecomte" initials="V." surname="Lecomte"/>
            <author fullname="A. Orlandi" initials="A." surname="Orlandi"/>
            <author fullname="G. Parisi" initials="G." surname="Parisi"/>
            <author fullname="A. Procaccini" initials="A." surname="Procaccini"/>
            <author fullname="M. Viale" initials="M." surname="Viale"/>
            <author fullname="V. Zdravkovic" initials="V." surname="Zdravkovic"/>
            <date year="2008"/>
          </front>
          <seriesInfo name="DOI" value="10.1073/pnas.0711437105"/>
        </reference>

        <reference anchor="BARABASI-MOBILITY" target="https://doi.org/10.1038/nature06958">
          <front>
            <title>Understanding individual human mobility patterns</title>
            <author fullname="M.C. Gonzalez" initials="M.C." surname="Gonzalez"/>
            <author fullname="C.A. Hidalgo" initials="C.A." surname="Hidalgo"/>
            <author fullname="A.-L. Barabasi" initials="A.-L." surname="Barabasi"/>
            <date year="2008"/>
          </front>
          <seriesInfo name="DOI" value="10.1038/nature06958"/>
        </reference>

        <reference anchor="SONG-LIMITS" target="https://doi.org/10.1126/science.1177170">
          <front>
            <title>Limits of Predictability in Human Mobility</title>
            <author fullname="C. Song" initials="C." surname="Song"/>
            <author fullname="Z. Qu" initials="Z." surname="Qu"/>
            <author fullname="N. Blumm" initials="N." surname="Blumm"/>
            <author fullname="A.-L. Barabasi" initials="A.-L." surname="Barabasi"/>
            <date year="2010"/>
          </front>
          <seriesInfo name="DOI" value="10.1126/science.1177170"/>
        </reference>

        <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8610">
          <front>
            <title>Concise Data Definition Language (CDDL)</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>

        <reference anchor="VADAI-GPS" target="https://doi.org/10.1142/S0219477519500287">
          <front>
            <title>Spectral Analysis of Fluctuations in Humans' Daily Motion</title>
            <author fullname="G. Vadai" initials="G." surname="Vadai"/>
            <author fullname="A. Antal" initials="A." surname="Antal"/>
            <author fullname="Z. Gingl" initials="Z." surname="Gingl"/>
            <date year="2019"/>
          </front>
          <seriesInfo name="DOI" value="10.1142/S0219477519500287"/>
        </reference>

        <reference anchor="MACZAK-SPECTRAL" target="https://doi.org/10.1038/s41598-024-54165-4">
          <front>
            <title>General spectral characteristics of human activity</title>
            <author fullname="B. Maczak" initials="B." surname="Maczak"/>
            <date year="2024"/>
          </front>
          <seriesInfo name="DOI" value="10.1038/s41598-024-54165-4"/>
        </reference>

        <reference anchor="I-D.ietf-rats-eat" target="https://datatracker.ietf.org/doc/draft-ietf-rats-eat/">
          <front>
            <title>The Entity Attestation Token (EAT)</title>
            <author fullname="L. Lundblade" initials="L." surname="Lundblade"/>
            <author fullname="G. Mandyam" initials="G." surname="Mandyam"/>
            <author fullname="J. O'Donoghue" initials="J." surname="O'Donoghue"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="September" year="2024"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-eat-31"/>
          <annotation>Work in Progress.</annotation>
        </reference>

        <reference anchor="I-D.mandyam-rats-proxlocclaim" target="https://datatracker.ietf.org/doc/draft-mandyam-rats-proxlocclaim/">
          <front>
            <title>The Proximate Location Claim</title>
            <author fullname="G. Mandyam" initials="G." surname="Mandyam"/>
            <date month="January" year="2024"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mandyam-rats-proxlocclaim-01"/>
          <annotation>Work in Progress.</annotation>
        </reference>

        <reference anchor="I-D.lkspa-wimse-verifiable-geo-fence" target="https://datatracker.ietf.org/doc/draft-lkspa-wimse-verifiable-geo-fence/">
          <front>
            <title>Modernizing Workload Security: Verifiable Geofencing, Proof-of-Possession, and Protocol-Aware Residency Enforcement</title>
            <author fullname="R. Krishnan" initials="R." surname="Krishnan"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <date year="2025"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lkspa-wimse-verifiable-geo-fence-01"/>
          <annotation>Work in Progress.</annotation>
        </reference>

        <reference anchor="I-D.richardson-rats-pop-endorsement" target="https://datatracker.ietf.org/doc/draft-richardson-rats-pop-endorsement/">
          <front>
            <title>Proof of Position for Auditor managed Endorsements</title>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="P. Liu" initials="P." surname="Liu"/>
            <date month="April" year="2025"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-richardson-rats-pop-endorsement-00"/>
          <annotation>Work in Progress.</annotation>
        </reference>

        <reference anchor="ZHANG-REVIEW">
          <front>
            <title>Review comments on draft-ayerbe-trip-protocol-01</title>
            <author fullname="J. Zhang" initials="J." surname="Zhang"/>
            <date month="February" year="2026"/>
          </front>
          <annotation>IETF mailing list post.</annotation>
        </reference>

        <reference anchor="SARDAR-REVIEW">
          <front>
            <title>Review comments on draft-ayerbe-trip-protocol-01 and -02</title>
            <author fullname="M.U. Sardar" initials="M.U." surname="Sardar"/>
            <date month="February" year="2026"/>
          </front>
          <annotation>IETF mailing list post and private correspondence. Sardar's review identified the need for removing Passive Verification mode, which is implemented in this revision.</annotation>
        </reference>

      </references>
    </references>

    <!-- ============================================================ -->
    <!-- APPENDIX A: RELATIONSHIP TO OTHER GEO-LOCATION PROPOSALS      -->
    <!-- ============================================================ -->

    <section anchor="related-work" numbered="true" toc="include">
      <name>Relationship to Other Geo-Location Proposals</name>
      <t>
        Several Internet-Drafts in the RATS and WIMSE working groups
        address aspects of location attestation. This appendix
        positions TRIP relative to four such proposals, identifying
        which problems each addresses and how TRIP differs in
        approach. TRIP is complementary to all four; none of them
        provides the longitudinal behavioral evidence that TRIP
        supplies.
      </t>

      <section anchor="related-eat" numbered="true" toc="include">
        <name>EAT Location Claim</name>
        <t>
          The Entity Attestation Token <xref target="I-D.ietf-rats-eat"/>
          defines a location claim that conveys a single point-in-time
          geographic position, expressed in WGS-84 coordinates. The
          claim provides no temporal depth, no privacy quantization,
          and no behavioral context: it is an instantaneous geographic
          assertion, signed at the moment of attestation.
        </t>
        <t>
          TRIP and EAT operate at different layers and serve different
          purposes. TRIP could emit its Trajectory Identity Token or
          Proof-of-Humanity Certificate as an EAT claim, providing
          longitudinal behavioral evidence within an EAT-formatted
          Attestation Result. The two are complementary rather than
          competing.
        </t>
      </section>

      <section anchor="related-proxloc" numbered="true" toc="include">
        <name>Proximate Location Claim</name>
        <t>
          The Proximate Location Claim
          <xref target="I-D.mandyam-rats-proxlocclaim"/> defines
          evidence of relative position derived from secure ranging
          between two devices, typically using ultra-wideband (UWB)
          radio per the FiRa Consortium specifications. The resulting
          claim asserts that "device X is within distance d of device
          Y at time t," and depends on a hardware-rooted trust
          relationship between the ranging reader and the target.
        </t>
        <t>
          Proximate Location is instantaneous and pairwise; TRIP is
          longitudinal and self-attested. The two address different
          questions: Proximate Location asks "where is this device
          right now relative to that one?", while TRIP asks "has this
          identity moved through the world over time in a manner
          consistent with a biological organism?". Proximate Location
          requires dedicated radio hardware in both endpoints; TRIP
          uses commodity GNSS and ambient signals already present on
          consumer mobile devices.
        </t>
      </section>

      <section anchor="related-geofence" numbered="true" toc="include">
        <name>Verifiable Geofencing for Workloads</name>
        <t>
          The Verifiable Geofencing draft
          <xref target="I-D.lkspa-wimse-verifiable-geo-fence"/>
          targets confidential computing workloads, providing
          cryptographically verifiable proof-of-residency that binds a
          workload identity to a host platform and a geographic
          boundary. The approach combines TPM-backed platform
          attestation with attested geolocation from trusted sensors,
          enabling enforcement of data residency and jurisdictional
          policies for server-side compute.
        </t>
        <t>
          Verifiable Geofencing answers "where is this workload
          executing?". TRIP answers "who is the human or autonomous
          entity behind this identity, and how has that entity moved
          over time?". The two address orthogonal concerns: residency
          versus operator integrity. A complete deployment for
          regulated AI workloads could combine both, using
          Verifiable Geofencing to constrain workload location and
          TRIP to attest the human operator or agent issuing
          high-stakes requests.
        </t>
      </section>

      <section anchor="related-pop-endorse" numbered="true" toc="include">
        <name>Proof of Position for Auditor Endorsements</name>
        <t>
          The Proof of Position draft
          <xref target="I-D.richardson-rats-pop-endorsement"/>
          defines a mechanism by which a human auditor establishes
          physical contact with a device, typically via USB or serial
          console, and produces an endorsement asserting properties
          that the device cannot self-claim, including its physical
          location. The endorsement is a one-time event, performed by
          a trusted human acting as a side-channel.
        </t>
        <t>
          Proof of Position is a one-time, human-mediated, locally
          delivered endorsement. TRIP is a continuous, self-attested,
          remotely verifiable evidence stream. Proof of Position is
          well-suited to fixed infrastructure such as routers and
          rack-mounted equipment that rarely move. TRIP is
          well-suited to mobile entities -- humans and autonomous
          devices -- that move through the world routinely and need
          ongoing proof of physical existence rather than a single
          static endorsement.
        </t>
      </section>

      <section anchor="related-summary" numbered="true" toc="include">
        <name>Comparison Summary</name>
        <table anchor="related-table">
          <name>TRIP and Related Geo-Location Proposals</name>
          <thead>
            <tr>
              <th>Proposal</th>
              <th>Temporal Model</th>
              <th>Evidence Source</th>
              <th>Primary Question</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>EAT Location</td>
              <td>Instantaneous</td>
              <td>Self-reported coordinate</td>
              <td>Where is this device right now?</td>
            </tr>
            <tr>
              <td>Proximate Location</td>
              <td>Instantaneous</td>
              <td>Secure ranging hardware</td>
              <td>Is device X near device Y?</td>
            </tr>
            <tr>
              <td>Verifiable Geofence</td>
              <td>Continuous (workload lifetime)</td>
              <td>TPM + sensor attestation</td>
              <td>Is this workload inside the boundary?</td>
            </tr>
            <tr>
              <td>PoP Endorsement</td>
              <td>One-time</td>
              <td>Human auditor, side-channel</td>
              <td>Did a trusted human visit this device?</td>
            </tr>
            <tr>
              <td>TRIP</td>
              <td>Longitudinal</td>
              <td>Self-attested behavioral trajectory</td>
              <td>Has this identity moved like a biological entity over time?</td>
            </tr>
          </tbody>
        </table>
        <t>
          TRIP is the only proposal in this set that uses behavioral
          trajectory over time as its source of evidence. The other
          proposals provide instantaneous location claims, jurisdictional
          residency proofs, or one-time endorsements. TRIP is intended
          to coexist with these specifications, supplying a distinct
          dimension of evidence -- continuity of physical existence --
          that none of them addresses.
        </t>
      </section>
    </section>

    <!-- ============================================================ -->
    <!-- ACKNOWLEDGEMENTS                                              -->
    <!-- ============================================================ -->

    <section anchor="acknowledgements" numbered="false" toc="include">
      <name>Acknowledgements</name>
      <t>
        The TRIP protocol builds upon foundational work in cryptographic
        identity systems, geospatial indexing, statistical physics, and
        network science. The author thanks the contributors to the H3
        geospatial system, the Ed25519 specification authors, and the
        broader IETF community for establishing the standards that TRIP
        builds upon. The Criticality Engine framework is inspired by the
        work of Giorgio Parisi on scale-free correlations in biological
        systems and Albert-Laszlo Barabasi on the fundamental limits of
        human mobility.
      </t>
      <t>
        The author thanks Muhammad Usama Sardar (TU Dresden) for
        detailed review of -01 and -02
        <xref target="SARDAR-REVIEW"/> that identified the need for
        explicit RATS role mapping, attestation-result replay
        protection, privacy model corrections, and the removal of
        Passive Verification mode. Sardar's contributions substantially
        improved the rigor of this specification.
      </t>
      <t>
        The author thanks Jun Zhang for raising critical questions about
        accessibility and the applicability of mobility models to users
        with limited physical mobility, leading to the Accessibility and
        Low-Mobility Users section.
      </t>
      <t>
        The author thanks an anonymous reviewer from the statistical
        physics community for identifying three critical issues addressed
        in this revision: the need for standard spectral analysis
        terminology, the missing analytical bridge between Levy flight
        parameters and PSD scaling exponents, and the fundamental
        question of applying ensemble properties to single trajectories.
        These contributions led to Sections 6.3 and 6.4 and the new
        Section 13.7 on statistical classifier limitations.
      </t>
    </section>

    <!-- ============================================================ -->
    <!-- AUTHOR'S ADDRESS                                              -->
    <!-- ============================================================ -->

  </back>
</rfc>
