<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     version="3"
     docName="draft-condrey-rats-pop-protocol-06"
     ipr="trust200902"
     category="exp"
     submissionType="independent"
     sortRefs="true"
     symRefs="true"
     tocInclude="true"
     tocDepth="4">

  <front>
    <title abbrev="PoP Protocol">Proof of Process (PoP): Architecture and Evidence Format</title>
    <seriesInfo name="Internet-Draft" value="draft-condrey-rats-pop-protocol-06"/>
    <author fullname="David Condrey" initials="D." surname="Condrey">
      <organization abbrev="WritersLogic">WritersLogic Inc</organization>
      <address>
        <postal>
          <city>San Diego</city>
          <region>California</region>
          <country>United States</country>
        </postal>
        <email>david@writerslogic.com</email>
      </address>
    </author>
    <date year="2026" month="February" day="18"/>

    <area>Security</area>
    <workgroup>Individual Submission</workgroup>

    <keyword>attestation</keyword>
    <keyword>RATS</keyword>
    <keyword>provenance</keyword>
    <keyword>authorship</keyword>
    <keyword>SEAT</keyword>

    <abstract>
      <t>
        This document specifies the Proof of Process (PoP) Evidence Framework, a specialized profile of Remote Attestation Procedures (RATS) designed to validate the provenance of effort in digital authorship. Unlike traditional provenance, which tracks file custody, PoP attests to the continuous physical process of creation.
      </t>
      <t>
        The protocol defines a cryptographic mechanism for generating Evidence Packets utilizing a composite Sequential Work Function (SWF) based on Proof of Biological Space-Time (PoBST) to enforce temporal monotonicity and Cross-Domain Constraint Entanglement (CDCE) to bind behavioral entropy (human jitter) and physical state to the document. Technical specifications for wire formats, sequential work functions, and hardware-anchored trust are provided.
      </t>
    </abstract>

    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/writerslogic/draft-condrey-rats-pop"/>.</t>
    </note>
  </front>

  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>
        The rapid proliferation of generative artificial intelligence has created an authenticity crisis in digital discourse. While traditional provenance tracks the "custody of pixels," it fails to attest to the human-driven process of creation. This document specifies the Proof of Process (PoP) protocol, which extends the RATS architecture <xref target="RFC9334"/> to validate the "provenance of effort."
      </t>
      <t>
        Unlike traditional attestation which captures static system state, PoP attests to a continuous physical process. It introduces Proof of Biological Space-Time (PoBST) to enforce temporal monotonicity and Cross-Domain Constraint Entanglement (CDCE) to bind behavioral entropy (human jitter) and physical state (thermodynamics) to the document's evolution.
      </t>
      <t>
        By entangling content hashes with these physical constraints, this protocol enables an Attester to generate an Evidence Packet (.pop) that imposes quantifiable cost on forgery of authorship claims, preserving privacy by design without disclosing document content.
      </t>
    </section>

    <section anchor="requirements-language">
      <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="system-model">
      <name>System Model</name>
      <t>
        This section defines the PoP system model in terms of the RATS architecture <xref target="RFC9334"/> and identifies where PoP diverges from standard remote attestation assumptions.
      </t>

      <section anchor="rats-entity-roles">
        <name>RATS Entity Roles</name>
        <t>
          PoP maps to RATS entity roles as follows:
        </t>
        <dl>
          <dt>Attester:</dt>
          <dd>The authoring application and its host platform. The Attester generates Evidence Packets (.pop) containing behavioral entropy, physical state markers, and SWF proofs. Unlike traditional RATS deployments, the Attester in PoP is operated by the entity whose claims are being verified (the author).</dd>
          <dt>Attesting Environment (AE):</dt>
          <dd>The software and hardware components that collect telemetry and generate cryptographic bindings. This includes the authoring application, operating system interfaces for entropy collection, and hardware Secure Elements (TPM/SE) when available.</dd>
          <dt>Verifier:</dt>
          <dd>An entity that appraises Evidence Packets and produces Attestation Results. Verifiers may be operated by publishers, platforms, or independent third parties. Verifier logic is specified in <xref target="PoP-Appraisal"/>.</dd>
          <dt>Relying Party:</dt>
          <dd>Consumers of Attestation Results who make trust decisions based on the appraisal. This includes publishers, readers, or automated systems that need authenticity assurance.</dd>
          <dt>Endorser:</dt>
          <dd>Entities that vouch for the Attesting Environment's integrity by issuing Endorsements. In PoP, Endorsers include hardware manufacturers that issue TPM endorsement certificates and platform attestation credentials for T3/T4 tiers.</dd>
          <dt>Reference Value Provider:</dt>
          <dd>Entities that supply Reference Values for appraisal. In PoP, this includes the PoP specification itself (defining expected behavioral patterns and SWF parameters) and calibration services that provide updated forensic baselines.</dd>
        </dl>
      </section>

      <section anchor="rats-compatibility">
        <name>Compatibility with RATS Architecture</name>
        <t>
          PoP implements a specialized RATS profile with a critical trust inversion: in traditional remote attestation, the Attester is a device whose owner (Relying Party) wants assurance about its state. The adversary is typically external -- malware, network attackers, or supply chain threats.
        </t>
        <t>
          In PoP, the Attester is operated by the author, and the Relying Party (publisher, reader) has no privileged access to the authoring environment. The primary adversary is the Attester operator themselves. This fundamental inversion shapes the entire security model:
        </t>
        <ul>
          <li>Evidence must be unforgeable by the entity generating it</li>
          <li>Temporal claims must be bound to physical constraints the Attester cannot circumvent</li>
          <li>Behavioral entropy must be computationally expensive to simulate</li>
          <li>Hardware attestation provides value only when the hardware root of trust is genuinely inaccessible to the Attester operator</li>
        </ul>
        <t>
          Despite this inversion, PoP maintains compatibility with RATS message flows and data formats, enabling integration with existing RATS infrastructure where appropriate.
        </t>
      </section>

      <section anchor="rats-applicability">
        <name>Applicability to RATS Architecture</name>
        <t>
          PoP extends the RATS framework beyond traditional device state attestation
          to process attestation — verifying that a physical process (human authorship)
          occurred as claimed. This extension is justified because the fundamental
          problem structure is identical: an Attester generates Evidence, conveys it
          to a Verifier, and the Verifier produces Attestation Results for Relying
          Parties. The RATS entity roles, message flows, and data format conventions
          apply directly.
        </t>
        <t>
          The adversarial Attester model (see <xref target="adversarial-attester"/>)
          inverts the standard RATS trust assumption. The RATS architecture
          accommodates this through its layered trust model and configurable
          Appraisal Policies (<xref target="RFC9334"/>, Section 8). The Experimental
          category is appropriate for exploring this novel application of RATS.
        </t>
      </section>
    </section>

    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>
        This section provides an end-to-end overview of the PoP protocol, mapping the message flow to the RATS passport model and illustrating the lifecycle of an Evidence Packet from creation through appraisal.
      </t>

      <section anchor="passport-model">
        <name>Passport Model Message Flow</name>
        <t>
          PoP follows the RATS passport model (<xref target="RFC9334"/>, Section 8.1; <xref target="RATS-Models"/>) in which Evidence flows directly from the Attester to the Verifier, and Attestation Results flow from the Verifier to the Relying Party:
        </t>
        <figure anchor="fig-passport-model">
          <name>PoP Passport Model Message Flow</name>
          <artwork type="ascii-art"><![CDATA[
                            +------------+
                            |  Endorser  |
                            |  (HW Mfg)  |
                            +------+-----+
                                   |
                                   | Endorsements
                                   | (TPM/SE certs,
                                   |  T3/T4 only)
                                   v
 +----------+  .pop file  +-------+-------+  .war file  +-----------+
 |          |  Evidence   |               |  Attestation|           |
 | Attester +------------>+   Verifier    +------------>+  Relying  |
 | (Author  |             |               |  Results    |   Party   |
 |  App/AE) |             |               |  (WAR)      |(Publisher,|
 +----------+             +-------+-------+             |  Reader)  |
                                  ^                     +-----------+
                                  |
                                  | Reference Values
                                  | (behavioral patterns,
                                  |  SWF parameters)
                          +-------+-------+
                          |   Reference   |
                          |     Value     |
                          |   Provider    |
                          +---------------+
]]></artwork>
        </figure>
        <t>
          In this model:
        </t>
        <ol>
          <li>The Attester (authoring application running in the Attesting Environment) collects behavioral telemetry during content creation and generates an Evidence Packet (.pop) containing SWF proofs, jitter bindings, and physical state markers.</li>
          <li>The Evidence Packet is conveyed to a Verifier, which appraises chain integrity, temporal ordering, behavioral entropy, and content binding per the procedures defined in <xref target="PoP-Appraisal"/>.</li>
          <li>The Verifier produces a Writers Authenticity Report (.war) containing EAT claims, forensic assessment scores, and forgery cost estimates.</li>
          <li>The Relying Party (publisher, reader, or automated platform) consumes the WAR to make trust decisions about the claimed authorship provenance.</li>
        </ol>
        <t>
          Endorsers (hardware manufacturers) supply TPM endorsement certificates and Secure Element attestations that Verifiers use to validate hardware-bound claims in T3/T4 Evidence. Reference Value Providers supply the expected behavioral patterns, SWF difficulty parameters, and profile specifications that Verifiers use as appraisal baselines.
        </t>
      </section>

      <section anchor="evidence-lifecycle">
        <name>Evidence Lifecycle</name>
        <t>
          The following sequence illustrates the end-to-end lifecycle of a PoP attestation session:
        </t>
        <figure anchor="fig-evidence-lifecycle">
          <name>Evidence Packet Lifecycle</name>
          <artwork type="ascii-art"><![CDATA[
  Author        Attester (AE)          Verifier         Relying Party
    |                |                     |                  |
    | begin session  |                     |                  |
    +--------------->|                     |                  |
    |                |--+ sample physical  |                  |
    |                |  | freshness anchor |                  |
    |                |<-+ (entropy, thermal)|                 |
    |                |                     |                  |
    |                |--+ collect initial  |                  |
    |                |  | jitter sample    |                  |
    |                |<-+ (32+ bytes)      |                  |
    |                |                     |                  |
    | keystrokes,    |                     |                  |
    | edits, pauses  |                     |                  |
    +--------------->| capture jitter,     |                  |
    |                | semantic events     |                  |
    |                |                     |                  |
    |                |--+ CHECKPOINT:      |                  |
    |                |  | compute SWF,     |                  |
    |                |  | bind jitter +    |                  |
    |                |  | physical state,  |                  |
    |                |  | extend hash chain|                  |
    |                |<-+                  |                  |
    |                |                     |                  |
    |   ... (repeat per checkpoint interval) ...             |
    |                |                     |                  |
    | end session    |                     |                  |
    +--------------->| SEAL: sign chain,   |                  |
    |                | emit .pop file      |                  |
    |                |                     |                  |
    |                | .pop (Evidence)     |                  |
    |                +-------------------->|                  |
    |                |                     | appraise:        |
    |                |                     | chain, SWF,      |
    |                |                     | entropy, CDCE    |
    |                |                     |                  |
    |                |                     | .war (Result)    |
    |                |                     +----------------->|
    |                |                     |                  | trust
    |                |                     |                  | decision
    |                |                     |                  |
]]></artwork>
        </figure>
        <t>
          Each checkpoint interval (default 30 seconds, MUST be between 10 and 120 seconds) produces one link in the hash chain. The SWF computation runs continuously during the interval, binding the author's behavioral entropy and the platform's physical state to the elapsed wall-clock time. At session end, the Attester seals the complete chain into a .pop Evidence Packet for conveyance to the Verifier.
        </t>
      </section>
    </section>

    <section anchor="threat-model">
      <name>Threat Model</name>
      <t>
        This section defines the adversary model following the methodology of <xref target="RFC3552"/> and incorporating insights from RATS security analysis <xref target="Sardar-RATS"/>. The threat model assumes a Dolev-Yao style adversary <xref target="Dolev-Yao"/> with domain-specific constraints.
      </t>

      <section anchor="adversarial-attester">
        <name>Adversarial Attester Model</name>
        <t>
          The PRIMARY threat in PoP is an adversarial Attester -- an author who controls the Attesting Environment and seeks to generate Evidence for content they did not authentically author. This inverts the standard RATS trust assumption where the Attester is trusted to report honestly.
        </t>
        <t>
          The adversarial Attester has the following capabilities:
        </t>
        <ul>
          <li><em>Full software control:</em> Can modify, instrument, or replace any software component including the authoring application and operating system</li>
          <li><em>Timing manipulation:</em> Can adjust system clocks, virtualize execution environments, and attempt to compress or expand apparent time</li>
          <li><em>Entropy injection:</em> Can inject synthetic behavioral data (keystroke timing, jitter sequences) from pre-recorded or generated sources</li>
          <li><em>Content pre-generation:</em> Can generate document content using AI tools or other assistance before initiating the attestation session</li>
          <li><em>Parallel execution:</em> Can run multiple attestation sessions simultaneously or use distributed resources</li>
        </ul>
        <t>
          The adversary is constrained by:
        </t>
        <ul>
          <li><em>Physics:</em> Cannot violate thermodynamic laws or accelerate hardware beyond physical limits</li>
          <li><em>Memory bandwidth:</em> MHSF computations are bounded by available memory bandwidth</li>
          <li><em>Hardware isolation:</em> In T3/T4 tiers, cannot extract keys from Secure Elements without physical tampering</li>
          <li><em>Economic rationality:</em> Will not expend resources exceeding the value of successful forgery</li>
        </ul>
      </section>

      <section anchor="security-goals">
        <name>Security Goals</name>
        <t>
          PoP provides the following authentication properties, defined in terms of adversary advantage:
        </t>
        <dl>
          <dt>Temporal Authenticity:</dt>
          <dd>Given Evidence claiming authorship duration D, an adversary cannot produce valid Evidence in time significantly less than D. Formally: Adv_temporal = Pr[Verify(E) = accept AND Time(Generate(E)) &lt; D - epsilon] is negligible for meaningful epsilon.</dd>
          <dt>Behavioral Authenticity:</dt>
          <dd>Given Evidence containing behavioral entropy B, an adversary cannot efficiently generate synthetic entropy that is indistinguishable from biological origin. The cost of generating synthetic behavioral data satisfying all forensic constraints MUST exceed a defined threshold.</dd>
          <dt>Content Binding:</dt>
          <dd>Evidence E is cryptographically bound to document D such that E cannot be repurposed to attest a different document D'. This property is unconditional given collision resistance of SHA-256.</dd>
          <dt>Non-repudiation (T3/T4):</dt>
          <dd>In hardware-bound tiers, Evidence is signed with keys that the Attester cannot extract or duplicate, providing non-repudiation of the attestation act.</dd>
        </dl>
      </section>

      <section anchor="attack-taxonomy">
        <name>Attack Taxonomy</name>
        <t>
          The following attacks are in scope for PoP defenses:
        </t>

        <section anchor="retype-attack">
          <name>Retype Attack</name>
          <t>
            The canonical forgery attack against PoP: an adversary generates content using AI or other assistance, then retypes the pre-existing content while collecting "authentic" behavioral telemetry. This attack exploits the gap between typing existing text and composing original text.
          </t>
          <t>
            PoP defends against retype attacks through:
          </t>
          <ul>
            <li><em>Cognitive Load Correlation:</em> Authentic composition exhibits increased inter-keystroke intervals during high-complexity passages. Retyping known text shows uniform timing regardless of content complexity. Evidence with semantic-timing correlation r &lt; 0.2 is flagged for additional scrutiny (see <xref target="sec-retype-defense"/>).</li>
            <li><em>Error Topology:</em> Authentic authoring exhibits characteristic error patterns (hesitations, deletions near recent insertions, self-corrections). Retyping from reference exhibits either unnaturally low error rates or artificially injected errors lacking positional correlation.</li>
            <li><em>Semantic-Temporal Binding:</em> The SWF proof binds the document's semantic evolution to wall-clock time. Retyping requires real-time effort proportional to document length, even if content was pre-generated.</li>
          </ul>
          <t>
            Retype attacks remain economically viable for short documents. The forgery cost scales with document length and checkpoint frequency, providing graduated assurance rather than binary security.
          </t>
        </section>

        <section anchor="replay-attack">
          <name>Replay Attack</name>
          <t>
            Attempting to reuse previously valid Evidence for new claims. Defeated by Physical Freshness anchors that bind Evidence to non-reproducible physical state (thermal trajectories, kernel entropy samples).
          </t>
        </section>

        <section anchor="relay-attack">
          <name>Relay Attack</name>
          <t>
            Forwarding challenges or Evidence between a legitimate author and an adversary's session. In PoP, this manifests as claiming credit for another author's work. Defeated by hardware-bound signing (T3/T4) and out-of-band presence challenges that verify physical proximity.
          </t>
        </section>

        <section anchor="swf-acceleration">
          <name>SWF Acceleration Attack</name>
          <t>
            Using specialized hardware to compute SWF proofs faster than consumer hardware. Mitigated by Argon2id's memory-hardness (computation bounded by memory bandwidth, not ALU throughput) and Hardware-Anchored Time in T3/T4 tiers.
          </t>
        </section>

        <section anchor="ae-spoofing">
          <name>AE Spoofing</name>
          <t>
            Presenting a virtualized or modified Attesting Environment as genuine. In T1/T2 tiers, this is possible and Evidence should be weighted accordingly. T3/T4 tiers require hardware attestation that is difficult to spoof without physical access to the Secure Element.
          </t>
        </section>

        <section anchor="diversion-attack">
          <name>Diversion Attack</name>
          <t>
            An adversary redirects Evidence intended for one Verifier to a different Verifier or Relying Party context. PoP Evidence Packets do not inherently bind to a specific Verifier identity. To mitigate this, implementations SHOULD use the TLS Exported Keying Material (EKM) mechanism defined in <xref target="RFC9266"/> to bind Evidence to the transport session.
          </t>
          <t>
            When the Attester conveys Evidence over TLS, it SHOULD populate the optional channel-binding field (key 11) in the evidence-packet structure as follows:
          </t>
          <ol>
            <li>The Attester calls the TLS exporter function with label "EXPORTER-PoP-channel-binding" and an empty context value, requesting 32 bytes of output.</li>
            <li>The Attester sets binding-type to 1 (tls-exporter) and binding-value to the 32-byte EKM output.</li>
            <li>The Verifier, upon receiving the Evidence Packet, calls the same TLS exporter function on its side of the connection and compares the result to the binding-value in the channel-binding field.</li>
            <li>If the values do not match, the Verifier MUST reject the Evidence Packet as potentially diverted.</li>
          </ol>
          <t>
            The EKM label "EXPORTER-PoP-channel-binding" is specific to this protocol. The empty context ensures the binding depends solely on the TLS session keys, which are unique per connection.
          </t>
          <t>
            For offline verification (where no TLS session exists between Attester and Verifier), the channel-binding field is absent and Relying Parties MUST evaluate Evidence provenance through out-of-band channels.
          </t>
          <t>
            When PoP Evidence is conveyed over an attested TLS channel, implementations MAY leverage the SEAT exported authenticator mechanism <xref target="SEAT-EXPAT"/> to combine platform attestation (proving the Attesting Environment's integrity) with PoP process attestation (proving the authorship process). The TLS channel binding described above is compatible with the SEAT evidence binding approach, which derives binding values from TLS exporters. At T3/T4 tiers, SEAT platform attestation provides the hardware trust anchor that corroborates PoP's Attesting Environment claims.
          </t>
        </section>
      </section>

      <section anchor="out-of-scope-threats">
        <name>Out-of-Scope Threats</name>
        <t>
          The following threats are explicitly out of scope:
        </t>
        <ul>
          <li><em>Nation-state HSM compromise:</em> Adversaries capable of extracting keys from certified HSMs via invasive physical attacks</li>
          <li><em>Physics-level laboratory spoofing:</em> Adversaries capable of simulating thermal trajectories and entropy sources at sub-microsecond precision</li>
          <li><em>Quantum computation:</em> Attacks requiring large-scale quantum computers (SHA-256 collision, Argon2id inversion)</li>
        </ul>
      </section>
    </section>

    <section anchor="core-principles">
      <name>Core Principles and Claims</name>
      <t>Building on the threat model defined above, PoP operates on five primary constraints:</t>
      <ul>
        <li>Physics-based Cost: Memory-Hard Sequential Functions (MHSF) establish an economic lower bound on forgery, ensuring consumer hardware remains competitive with specialized ASICs.</li>
        <li>Physical Freshness: Replay and simulation attacks are defeated by anchoring sessions to irreversible physical markers (Thermal Trajectories and Kernel Entropy pools). Every session incorporates Non-deterministic Physical Freshness sampled within the AE at the start of the sequential work function execution.</li>
        <li>Biological Binding: Captured human motor-signal randomness (jitter) serves as the non-deterministic seed for the spacetime proof.</li>
        <li>Out-of-Band Presence: Utilizing secondary physical devices (e.g., smartphone QR scans) to bridge the digital-physical gap and ensure a human is in the loop.</li>
        <li>Asymmetric Verification: The sequential work function allows proofs to be verified probabilistically via Merkle-sampled audit proofs, ensuring scalability and DoS resistance.</li>
      </ul>
    </section>

    <section anchor="rationale-and-terminology">
      <name>Protocol Rationale and Terminology</name>
      <t>
        The Proof of Process (PoP) framework follows the RATS architecture while introducing domain-specific extensions for physical process attestation.
      </t>
      <dl>
        <dt>PoP Evidence Packet (.pop):</dt>
        <dd>An Attester artifact containing Merkle trees, PoBST traces, and physical liveness markers (CBOR tag 1347571280, encoding ASCII "POP ").</dd>
        <dt>WAR Result (.war):</dt>
        <dd>A Verifier Attestation Result containing signed EAT claims and forensic assessments (CBOR tag 1463894560). The WAR format is specified in <xref target="PoP-Appraisal"/>.</dd>
        <dt>PoBST:</dt>
        <dd>Proof of Biological Space-Time. A memory-hard sequential function with probabilistic verification, entangled with human jitter.</dd>
        <dt>CDCE:</dt>
        <dd>Cross-Domain Constraint Entanglement. The method of weaving jitter and thermodynamics into the cryptographic chain.</dd>
        <dt>SWF:</dt>
        <dd>Sequential Work Function. The composite construction combining Argon2id and iterated SHA-256 (see <xref target="swf-construction"/>).</dd>
      </dl>
    </section>

    <section anchor="attester-state-machine">
      <name>Attester State Machine</name>
      <t>
        The Attesting Environment (AE) MUST implement the following formal state machine:
      </t>
      <ul>
        <li>RECORDING: AE captures semantic events and physical telemetry into a hash-linked buffer. Events are appended and the block hash is updated.</li>
        <li>PENDING_CHECK: The current event block is frozen to prepare for a checkpoint. No new events are accepted into this block.</li>
        <li>CHECKPOINT: AE computes the SWF over the entangled seed (previous hash + current jitter + physical markers).</li>
        <li>SEALING: The Attester generates a final snapshot, signs the transcript root with the Attester's signing key (hardware-bound for T3/T4; software-managed for T1/T2), and prepares the transport container (.pop).</li>
      </ul>
    </section>

    <section anchor="evidence-tiers">
    <name>Evidence Content Tiers</name>
    <t>
      PoP Evidence Packets are classified by the depth of behavioral and forensic data collected:
    </t>
    <dl>
      <dt>CORE (Tier Value 1):</dt>
      <dd>Checkpoint chain with PoBST proofs, SHA-256 content binding, and physical freshness anchors. Proves temporal ordering and content integrity.</dd>
      <dt>ENHANCED (Tier Value 2):</dt>
      <dd>All CORE components plus behavioral entropy capture (Jitter Seals) and intra-checkpoint correlation. Adds evidence of interactive authoring behavior.</dd>
      <dt>MAXIMUM (Tier Value 3):</dt>
      <dd>All ENHANCED components plus CDCE, error topology analysis, and forgery cost bounds. Provides the strongest available evidence.</dd>
    </dl>
    <t>
      PoP Evidence is classified along two orthogonal axes. Evidence Content
      Tier (CORE/ENHANCED/MAXIMUM) determines the depth of behavioral and
      forensic data collected. Attestation Assurance Level (T1-T4) determines
      the strength of hardware trust anchoring. These axes are independent:
      a T3 CORE packet provides hardware-bound signing with minimal behavioral
      data, while a T1 MAXIMUM packet provides rich behavioral data with
      software-only signing.
    </t>
    </section>

    <section anchor="attestation-assurance-levels">
    <name>Attestation Assurance Levels</name>
    <t>
      The attestation tier system maps to established assurance frameworks
      including NIST SP 800-63B Authenticator Assurance Levels (AAL),
      ISO/IEC 29115 Levels of Assurance (LoA), and Entity Attestation Token
      (EAT) security levels as defined in <xref target="RFC9711"/>.
    </t>
    <table>
      <thead>
        <tr><th>PoP Tier</th><th>NIST AAL</th><th>EAT Security Level (RFC 9711)</th></tr>
      </thead>
      <tbody>
        <tr><td>T1: Software-Only</td><td>AAL1</td><td>unrestricted (1)</td></tr>
        <tr><td>T2: Attested Software</td><td>AAL2</td><td>restricted (2)</td></tr>
        <tr><td>T3: Hardware-Bound</td><td>AAL3</td><td>hardware (4)</td></tr>
        <tr><td>T4: Hardware-Hardened</td><td>LoA4</td><td>hardware (4)</td></tr>
      </tbody>
    </table>
    <t>
      T3 and T4 both map to EAT security level "hardware" (4) because the EAT
      specification does not distinguish PUF-level binding from standard
      TPM key binding.
    </t>

    <section anchor="tier-t1-software">
      <name>Tier T1: Software-Only</name>
      <dl>
        <dt>Binding Strength:</dt><dd>none or hmac_local</dd>
        <dt>NIST AAL Mapping:</dt><dd>AAL1</dd>
        <dt>Security Properties:</dt>
        <dd>
          <ul>
            <li>SWF timing provides temporal ordering</li>
            <li>Hash chains provide tamper evidence</li>
            <li>Jitter entropy provides behavioral binding</li>
            <li>No hardware root of trust; keys stored in software</li>
          </ul>
        </dd>
      </dl>
    </section>

    <section anchor="tier-t2-attested">
      <name>Tier T2: Attested Software</name>
      <t>T2 extends T1 with optional hardware attestation hooks. The AE attempts to use platform security features (Keychain, DeviceCheck) but degrades gracefully. Maps to AAL2.</t>
    </section>

    <section anchor="tier-t3-hardware-bound">
      <name>Tier T3: Hardware-Bound</name>
      <t>Requires TPM 2.0 or platform Secure Enclave key binding. Evidence generation MUST fail if hardware is unavailable. Maps to AAL3.</t>
    </section>

    <section anchor="tier-t4-hardware-hardened">
      <name>Tier T4: Hardware-Hardened</name>
      <t>Discrete TPM + PUF binding + Enclave execution. Anti-tamper evidence required. Exceeds AAL3 requirements; maps to ISO/IEC 29115 LoA4.</t>
    </section>
    </section>

    <section anchor="profile-architecture">
    <name>Profile Architecture</name>
    <t>
      The PoP specification defines three implementation profiles that establish Mandatory-to-Implement (MTI) requirements for interoperability.
    </t>
    <table>
      <thead>
        <tr><th>Feature ID</th><th>Feature Name</th><th>CORE</th><th>ENHANCED</th><th>MAXIMUM</th></tr>
      </thead>
      <tbody>
        <tr><td>1</td><td>swf-argon2id-sha256</td><td>M</td><td>M</td><td>M</td></tr>
        <tr><td>2</td><td>content-binding</td><td>M</td><td>M</td><td>M</td></tr>
        <tr><td>4</td><td>checkpoint-chain</td><td>M</td><td>M</td><td>M</td></tr>
        <tr><td>50</td><td>behavioral-entropy</td><td>O</td><td>M</td><td>M</td></tr>
        <tr><td>60</td><td>assistive-mode</td><td>O</td><td>O</td><td>O</td></tr>
        <tr><td>105</td><td>hardware-attestation</td><td>O</td><td>O</td><td>M</td></tr>
      </tbody>
    </table>
    <t>Feature IDs 1-9 are reserved for core protocol features. IDs 50-99 are reserved for behavioral features. IDs 100-199 are reserved for hardware features. Future revisions may define additional features within these ranges.</t>

    <section anchor="conformance">
      <name>Conformance Requirements</name>
      <t>
        A conforming Attester MUST implement at least the CORE profile. A conforming Verifier MUST be capable of validating all three profiles. Verifiers encountering unknown fields MUST ignore them and proceed with validation of known fields. Verifiers receiving an Evidence Packet with version greater than 1 MUST reject the packet unless they implement the corresponding protocol version.
      </t>
      <t>The profile-uri field in an Evidence Packet MUST be set to "urn:ietf:params:rats:eat:profile:pop:1.0" for Evidence conforming to this specification.</t>
      <t>In the document-ref structure, byte-length is the length in bytes of the UTF-8 encoded document, and char-count is the number of Unicode scalar values (code points).</t>
      <t>
        If the Evidence Packet omits the attestation-tier field, the Verifier
        MUST assess the tier from the evidence content: T1 if no hardware
        attestation is present, T2 if platform attestation hooks are
        detected, T3 if TPM key binding is verified, T4 if anti-tamper
        evidence and PUF binding are confirmed.
      </t>
    </section>
    </section>

    <section anchor="wire-format">
      <name>Evidence Format and CDDL</name>
      <t>
        Evidence Packets are CBOR-encoded <xref target="RFC8949"/> and identified by semantic tag 1347571280. The CDDL notation <xref target="RFC8610"/> is used to define the wire format.
      </t>
      <artwork type="cddl"><![CDATA[
; CBOR tag wrappers
pop-evidence = #6.1347571280(evidence-packet)
pop-war = #6.1463894560(attestation-result)

; Primary structures
evidence-packet = {
    1 => uint,                    ; version (MUST be 1)
    2 => tstr,                    ; profile-uri
    3 => uuid,                    ; packet-id
    4 => pop-timestamp,           ; created
    5 => document-ref,            ; document
    6 => [3* checkpoint],          ; checkpoints (min 3)
    ? 7 => attestation-tier,      ; T1-T4
    ? 8 => [* tstr],              ; limitations
    ? 9 => profile-declaration,   ; profile
    ? 10 => [+ presence-challenge], ; QR/OOB proofs
    ? 11 => channel-binding,      ; TLS EKM binding
    ; keys 14-17 reserved for future use
    ? 13 => content-tier,          ; Evidence Content Tier
    ? 18 => physical-liveness,    ; physical-liveness markers
    * int => any,                  ; extension fields
}

checkpoint = {
    1 => uint,                    ; sequence (monotonic)
    2 => uuid,                    ; checkpoint-id
    3 => pop-timestamp,           ; timestamp (local)
    4 => hash-value,              ; content-hash
    5 => uint,                    ; char-count
    6 => edit-delta,              ; delta
    7 => hash-value,              ; prev-hash
    8 => hash-value,              ; checkpoint-hash
    9 => process-proof,           ; SWF proof
    ? 10 => jitter-binding,         ; behavioral-entropy (ENHANCED+)
    ? 11 => physical-state,         ; CDCE Weave (ENHANCED+)
    ? 12 => bstr .size 32,          ; entangled-mac (ENHANCED+)
    * int => any,                    ; extension fields
}

document-ref = {
    1 => hash-value,              ; content-hash
    ? 2 => tstr,                  ; filename
    3 => uint,                    ; byte-length
    4 => uint,                    ; char-count
    ? 5 => hash-salt-mode,        ; salting mode
    ? 6 => bstr .size 32,          ; salt-commitment
}

process-proof = {
    1 => proof-algorithm,         ; algorithm id
    2 => proof-params,            ; SWF params
    3 => bstr .size 32,            ; input (seed)
    4 => bstr .size 32,            ; merkle-root
    5 => [+ merkle-proof],        ; sampled proofs
    6 => float32,                 ; claimed-duration (seconds)
}

; Subsidiary type definitions
attestation-tier = &(
    software-only: 1,             ; T1: AAL1
    attested-software: 2,         ; T2: AAL2
    hardware-bound: 3,            ; T3: AAL3
    hardware-hardened: 4,         ; T4: LoA4
)

content-tier = &(
    core: 1,
    enhanced: 2,
    maximum: 3,
)

proof-algorithm = &(
    ; 1 is reserved for future use
    pobst-argon2id: 20,
)

hash-salt-mode = &(
    unsalted: 0,
    author-salted: 1,
)

proof-params = {
    1 => uint,                    ; time-cost (t)
    2 => uint,                    ; memory-cost (m, KiB)
    3 => uint,                    ; parallelism (p)
    4 => uint,                    ; iterations
}

jitter-binding = {
    1 => [+ float32],             ; intervals (ms)
    2 => float32,                 ; entropy-estimate (bits)
    3 => bstr .size 32,           ; jitter-seal (HMAC)
}

merkle-proof = {
    1 => uint,                    ; leaf-index
    2 => [+ bstr .size 32],       ; sibling-path
    3 => bstr .size 32,           ; leaf-value
}

edit-delta = {
    1 => uint,                    ; chars-added
    2 => uint,                    ; chars-deleted
    3 => uint,                    ; op-count
    ? 4 => [* edit-position],     ; positions
}

edit-position = [
    uint,                         ; offset
    int,                          ; change (+/-), MUST be non-zero
]

physical-state = {
    1 => [+ float32],             ; thermal (relative)
    2 => int,                     ; entropy-delta (signed)
    ? 3 => bstr .size 32,         ; kernel-commitment
}

physical-liveness = {
    1 => [+ thermal-sample],      ; thermal trajectory
    2 => bstr .size 32,           ; entropy-anchor
}

thermal-sample = [
    pop-timestamp,                ; sample time
    float32,                      ; temperature delta
]

presence-challenge = {
    1 => bstr .size (16..256),    ; challenge-nonce (128+ bits)
    2 => bstr,                    ; device-signature (MUST be COSE_Sign1)
    3 => pop-timestamp,           ; response-time
}

profile-declaration = {
    1 => tstr,                    ; profile-id
    2 => [+ uint],                ; feature-flags
}

binding-type = &(
    tls-exporter: 1,
)

channel-binding = {
    1 => binding-type,            ; binding-type
    2 => bstr .size 32,           ; binding-value (EKM output)
}

; Base types
uuid = bstr .size 16
pop-timestamp = #6.1(float32)      ; CBOR tag 1 (epoch-based, float32)
hash-value = {
    1 => hash-algorithm,
    2 => bstr,
}
hash-algorithm = &(
    sha256: 1,
    sha384: 2,
    sha512: 3,
)
      ]]></artwork>
      <t>
        The attestation-result type used in the pop-war tag wrapper is
        defined in <xref target="PoP-Appraisal"/>.
      </t>
      <t>All floating-point fields in this specification MUST be encoded using 32-bit IEEE 754 binary32 format, regardless of whether a smaller encoding would suffice. This ensures deterministic encoding.</t>
      <t>pop-timestamp values MUST use floating-point encoding with at least millisecond precision. Integer encoding (second granularity) MUST NOT be used. pop-timestamp values MUST be positive (greater than zero). Verifiers MUST reject Evidence containing negative or zero timestamps.</t>
      <t>
        When hash-salt-mode is author-salted (1), the author generates a
        random salt of at least 16 bytes. The salt-commitment field MUST
        contain SHA-256(salt). To verify content binding, the author discloses
        the salt to the Verifier, which checks that SHA-256(disclosed_salt)
        matches the salt-commitment. The salt-commitment field MUST be
        constrained to 32 bytes (.size 32).
      </t>
      <t>SHA-256 (value 1) is mandatory-to-implement. Conforming Attesters and Verifiers MUST support SHA-256. Support for SHA-384 and SHA-512 is OPTIONAL.</t>
      <t>The hash digest length MUST match the algorithm output length: 32 bytes for SHA-256, 48 bytes for SHA-384, and 64 bytes for SHA-512.</t>
      <t>
        All hash-value fields within a single Evidence Packet MUST use the
        same hash algorithm. Verifiers MUST reject Evidence Packets
        containing mixed hash algorithms.
      </t>
      <t>
        Encoders MUST NOT use CBOR preferred float serialization (which may
        encode values like 0.0 as float16) for PoP fields. All floating-point
        values MUST be encoded as 4-byte IEEE 754 binary32 (CBOR major type 7,
        additional info 26) regardless of the value.
      </t>
      <t>
        Extension keys in evidence-packet and checkpoint structures MUST
        use integer values 100 or greater. Keys 0-99 are reserved for use
        by this specification and future revisions.
      </t>
      <t>
        The op-count field in edit-delta counts the number of discrete
        editing operations (insertions, deletions, and replacements)
        during the checkpoint interval. A single paste operation counts
        as one operation regardless of character count.
      </t>
      <t>
        In edit-position entries, the change value MUST be non-zero.
        Positive values indicate insertion of characters at the offset;
        negative values indicate deletion. A zero change value is
        semantically meaningless and MUST NOT appear.
      </t>
      <t>
        The device-signature in a presence-challenge MUST be a COSE_Sign1
        structure <xref target="RFC9052"/> covering the challenge-nonce.
        The signing key MUST be hardware-bound on the secondary device.
        The Verifier obtains the corresponding public key through prior
        device registration (the registration mechanism is out of scope
        for this document).
      </t>
      <t>
        Per-checkpoint physical-state (checkpoint key 11) captures instantaneous
        thermal and entropy measurements. Packet-level physical-liveness
        (evidence-packet key 18) provides a session-wide thermal trajectory
        for replay detection. physical-liveness SHOULD be included in ENHANCED
        and MAXIMUM profiles. When both are present, Verifiers MUST verify
        that per-checkpoint thermal values are consistent with the session-wide
        trajectory.
      </t>

      <section anchor="checkpoint-hash-computation">
        <name>Checkpoint Hash Computation</name>
        <t>
          The checkpoint-hash field MUST be computed as follows:
        </t>
        <artwork><![CDATA[
checkpoint-hash = SHA-256(
    prev-hash ||
    content-hash ||
    CBOR-encode(edit-delta) ||
    CBOR-encode(jitter-binding) ||
    CBOR-encode(physical-state) ||
    process-proof.merkle-root
)
        ]]></artwork>
        <t>
          Where || denotes concatenation and CBOR-encode produces deterministic CBOR per Section 4.2.1 of <xref target="RFC8949"/>.
        </t>
        <t>For the first checkpoint in a chain (sequence = 1), prev-hash MUST be set to SHA-256(CBOR-encode(document-ref)). This anchors the chain to the document identity.</t>
        <t>When jitter-binding and physical-state fields are absent (CORE profile), the checkpoint-hash MUST be computed without those terms: checkpoint-hash = SHA-256(prev-hash || content-hash || CBOR-encode(edit-delta) || process-proof.merkle-root).</t>
        <t>
          All components except process-proof.merkle-root are either
          fixed-length hashes (32/48/64 bytes per algorithm) or
          CBOR-encoded (self-delimiting). The merkle-root (32 bytes,
          fixed length) is appended last. This concatenation is
          unambiguous and does not require additional domain separation.
        </t>
      </section>

      <section anchor="checkpoint-computation-order">
        <name>Checkpoint Computation Order</name>
        <t>
          The fields within a checkpoint MUST be computed in the following order:
        </t>
        <ol>
          <li>Compute the SWF: run Argon2id with the derived seed, then iterate SHA-256 to produce all intermediate states. Construct the Merkle tree to obtain the merkle-root (process-proof key 4).</li>
          <li>Compute the jitter-seal using the merkle-root as HKDF-Expand PRK input and jitter-binding.intervals as HMAC input.</li>
          <li>Assemble the jitter-binding structure (intervals, entropy-estimate, jitter-seal).</li>
          <li>Compute the entangled-mac using the merkle-root as HKDF-Expand PRK input and prev-hash, content-hash, jitter-binding, and physical-state as HMAC input.</li>
          <li>Compute the checkpoint-hash over prev-hash, content-hash, edit-delta, jitter-binding, physical-state, and merkle-root.</li>
        </ol>
        <t>
          This ordering ensures that each subsequent computation can reference the outputs of prior steps. Implementations MUST follow this order to produce interoperable checkpoints.
        </t>
      </section>

      <section anchor="evidence-protection">
        <name>Evidence Protection</name>
        <t>
          For T3 and T4 Attestation Tiers, Evidence Packets MUST be wrapped
          in a COSE_Sign1 envelope. For T1 and T2 tiers, COSE_Sign1 wrapping
          is RECOMMENDED. The COSE_Sign1 envelope
          <xref target="RFC9052"/> provides cryptographic protection during
          transport. The COSE_Sign1 structure provides:
        </t>
        <ul>
          <li>Payload: the CBOR-encoded evidence-packet (including CBOR tag
            1347571280)</li>
          <li>Protected headers: algorithm identifier (ES256 or EdDSA
            RECOMMENDED)</li>
          <li>Signature: computed using the Attester's signing key</li>
        </ul>
        <t>
          For T3/T4 tiers, the signing key MUST be bound to a hardware
          Secure Element (TPM or platform SE). For T1/T2 tiers, a
          software-managed key is acceptable.
        </t>
        <t>
          When COSE_Sign1 wrapping is not used (e.g., offline file-based
          conveyance), the Evidence Packet's integrity relies solely on
          the internal hash chain. Relying Parties MUST evaluate the
          trust implications of unwrapped Evidence.
        </t>
        <t>
          For online conveyance, COSE_Sign1-wrapped Evidence Packets can be encapsulated within a Conceptual Message Wrapper (CMW) for transport via the SEAT cmw_attestation TLS extension <xref target="SEAT-EXPAT"/>. This enables PoP Evidence to be delivered alongside platform attestation evidence in a single post-handshake authentication exchange, which is the preferred attestation timing model <xref target="SEAT-Timing"/>. The SEAT use cases <xref target="SEAT-UseCases"/> identify runtime attestation and operation-triggered re-attestation as key requirements, both of which PoP's continuous checkpoint model satisfies.
        </t>
      </section>
    </section>

    <section anchor="swf-construction">
      <name>Sequential Work Function</name>
      <t>
        PoP uses a composite Sequential Work Function (SWF) combining Argon2id <xref target="RFC9106"/> for memory-hardness with iterated SHA-256 for sequential ordering. This construction is NOT a Verifiable Delay Function in the formal sense <xref target="Boneh2018"/>; it does not provide efficient public verification of the delay claim from the output alone.
      </t>
      <t>
        Instead, verification relies on Merkle-sampled audit proofs: the Attester commits to a Merkle tree over intermediate states, and the Verifier checks a random subset of state transitions. This provides probabilistic verification in O(k * log n) time where k is the sample count and n is the iteration count.
      </t>

      <section anchor="swf-algorithm">
        <name>Construction</name>
        <t>The SWF is computed as follows:</t>
        <artwork><![CDATA[
state_0 = Argon2id(seed, salt=SHA-256("PoP-salt" || seed), t=1, m=65536, p=1, len=32)
for i in 1..iterations:
    state_i = SHA-256(state_{i-1})
merkle_root = MerkleTree(state_0, state_1, ..., state_iterations).root
        ]]></artwork>
        <t>
          The salt for Argon2id MUST be derived from the seed: salt = SHA-256("PoP-salt" || seed). This ensures domain separation between the password and salt inputs per RFC 9106 best practices.
        </t>
        <t>The merkle-root field (process-proof key 4) MUST contain the Merkle tree root computed over all intermediate states. The final iteration state (state_iterations) is verified as the leaf at index "iterations" in the Merkle tree.</t>
      </section>

      <section anchor="swf-verification">
        <name>Verification Protocol</name>
        <t>The Verifier MUST:</t>
        <ol>
          <li>Recompute Argon2id from the declared seed to obtain state_0</li>
          <li>For each sampled proof in the Merkle tree, verify the sibling path against the committed root and recompute SHA-256(state_i) to compare against state_{i+1}</li>
          <li>Verify the final iteration state (state_iterations) by checking its Merkle proof against the committed root (process-proof key 4, merkle-root). If the final-leaf index is not included in the Fiat-Shamir sample set, the Verifier SHOULD additionally derive or request a proof for it.</li>
        </ol>
        <t>
          A minimum of 20 sampled proofs is REQUIRED for CORE profile. ENHANCED profile requires 50 proofs. MAXIMUM profile requires 100 proofs.
        </t>
      </section>

      <section anchor="fiat-shamir-sampling">
        <name>Fiat-Shamir Sample Derivation</name>
        <t>
          Merkle proof sample positions MUST be derived deterministically
          using a Fiat-Shamir transform to prevent the Attester from
          selectively including only honestly-computed leaves:
        </t>
        <artwork><![CDATA[
sample_seed = SHA-256(merkle_root || process-proof.input)
for j in 0..k-1:
    okm_j   = HKDF-Expand(sample_seed, I2OSP(j, 4), 4)
    index_j = OS2IP(okm_j) mod (iterations + 1)
        ]]></artwork>
        <t>
          Where k is the number of required samples (20 for CORE, 50 for
          ENHANCED, 100 for MAXIMUM). HKDF-Expand is used with SHA-256 as
          the underlying hash function per <xref target="RFC5869"/>. I2OSP
          and OS2IP are the Integer-to-Octet-String and Octet-String-to-Integer
          primitives as defined in <xref target="RFC8017"/>. The Attester
          MUST include Merkle proofs for exactly these indices. The Verifier
          recomputes the sample positions from the committed root and seed,
          then verifies only those proofs.
        </t>
        <t>
          If the derivation produces duplicate indices (index_j equal to a
          previously derived index), the Attester MUST continue generating
          additional indices by incrementing j beyond k-1 until k distinct
          indices are obtained. The Verifier MUST verify that all k sample
          indices are distinct.
        </t>
        <t>
          Sample indices are in the range [0, iterations] inclusive.
          Padded Merkle tree leaves (indices greater than iterations)
          are never sampled by this derivation.
        </t>
      </section>

      <section anchor="swf-seed-derivation">
        <name>SWF Seed Derivation</name>
        <t>
          The SWF seed for each checkpoint MUST be derived as:
        </t>
        <artwork><![CDATA[
seed = SHA-256(
    prev-hash ||
    CBOR-encode(jitter-binding.intervals) ||
    CBOR-encode(physical-state)
)
        ]]></artwork>
        <t>
          For the first checkpoint (sequence = 1):
        </t>
        <artwork><![CDATA[
seed = SHA-256(
    CBOR-encode(document-ref) ||
    initial-jitter-sample
)
        ]]></artwork>
        <t>
          Where initial-jitter-sample is a minimum 32-byte sample of
          behavioral entropy collected before the first checkpoint.
          When jitter-binding and physical-state are absent (CORE profile
          without behavioral data), the seed MUST incorporate at least
          the prev-hash and a locally-generated 32-byte random nonce:
          seed = SHA-256(prev-hash || local-nonce). For the first
          checkpoint, the nonce provides non-determinism when
          initial-jitter-sample is unavailable. Implementations MUST
          NOT use a fully deterministic seed derivation.
        </t>
        <t>
          NOTE: The test vectors in <xref target="test-vectors"/> use a
          simplified fixed seed for implementation validation. Production
          implementations MUST use the derivation specified above.
        </t>
      </section>

      <section anchor="merkle-tree-construction">
        <name>Merkle Tree Construction</name>
        <t>
          The SWF Merkle tree is constructed over all intermediate states
          as follows:
        </t>
        <ul>
          <li>Leaves: state_i for i in 0..iterations, where leaf-index = i
            and leaf-value = state_i. The total number of leaves is
            (iterations + 1).</li>
          <li>Internal nodes: SHA-256(left_child || right_child)</li>
          <li>Tree structure: binary Merkle tree. If the number of leaves
            is not a power of 2, the tree is padded by duplicating the
            last leaf until the count reaches the next power of 2.</li>
          <li>The Merkle root is stored in process-proof.merkle-root (key 4).</li>
        </ul>
        <t>
          The final iteration state (state_iterations) is the leaf at
          index "iterations" and is verified by checking its Merkle proof
          against the committed root.
        </t>
      </section>

      <section anchor="mandatory-swf-params">
        <name>Mandatory SWF Parameters</name>
        <t>
          Conforming Attesters MUST use the following minimum SWF parameters
          for each Evidence Content Tier:
        </t>
        <table>
          <thead>
            <tr><th>Parameter</th><th>CORE</th><th>ENHANCED</th><th>MAXIMUM</th></tr>
          </thead>
          <tbody>
            <tr><td>time-cost (t)</td><td>1</td><td>1</td><td>1</td></tr>
            <tr><td>memory-cost (m, KiB)</td><td>65536</td><td>65536</td><td>131072</td></tr>
            <tr><td>parallelism (p)</td><td>1</td><td>1</td><td>1</td></tr>
            <tr><td>iterations</td><td>10000</td><td>50000</td><td>100000</td></tr>
            <tr><td>Merkle samples (k)</td><td>20</td><td>50</td><td>100</td></tr>
          </tbody>
        </table>
        <t>
          Verifiers MUST reject Evidence where declared proof-params are
          below the mandatory minimums for the claimed content tier.
          Expected wall-clock times for the Argon2id phase on reference
          hardware (DDR4, approximately 25 GB/s memory bandwidth):
          CORE approximately 50-100ms, ENHANCED approximately 50-100ms,
          MAXIMUM approximately 100-200ms. The subsequent SHA-256 iterations
          add approximately 0.1ms per 1000 iterations.
        </t>
      </section>

      <section anchor="entangled-mac-computation">
        <name>Entangled MAC Computation</name>
        <t>
          When present, the entangled-mac field (checkpoint key 12) MUST be
          computed as HMAC-SHA-256 <xref target="RFC2104"/> with the following
          inputs:
        </t>
        <artwork><![CDATA[
mac-key  = HKDF-Expand(process-proof.merkle-root,
                       "PoP-entangled-mac", 32)
mac-input = prev-hash || content-hash ||
            CBOR-encode(jitter-binding) ||
            CBOR-encode(physical-state)
entangled-mac = HMAC-SHA-256(mac-key, mac-input)
        ]]></artwork>
        <t>
          Where HKDF-Expand is defined in <xref target="RFC5869"/>,
          || denotes concatenation, and CBOR-encode produces deterministic
          CBOR per Section 4.2.1 of <xref target="RFC8949"/>.
        </t>
        <t>
          NOTE: In the adversarial Attester model, the Attester generates
          the SWF output and therefore knows the MAC key. The entangled-mac
          provides internal consistency binding but does NOT prevent forgery
          by a malicious Attester (see <xref target="sec-mac-limitations"/>).
        </t>
      </section>

      <section anchor="jitter-seal-computation">
        <name>Jitter Seal Computation</name>
        <t>
          When present, the jitter-seal field (jitter-binding key 3) MUST be
          computed as HMAC-SHA-256 with the following inputs:
        </t>
        <artwork><![CDATA[
seal-key   = HKDF-Expand(process-proof.merkle-root,
                         "PoP-jitter-seal", 32)
seal-input = CBOR-encode(jitter-binding.intervals)
jitter-seal = HMAC-SHA-256(seal-key, seal-input)
        ]]></artwork>
        <t>
          The jitter-seal binds the timing measurements to the checkpoint's
          SWF computation, preventing transplantation of jitter data from a
          different session. It is subject to the same adversarial Attester
          limitation as the entangled-mac (<xref target="sec-mac-limitations"/>).
        </t>
        <t>
          NOTE: In the adversarial Attester model, the Attester generates both the SWF
          output (from which the MAC key is derived) and the MAC input data. The
          entangled-mac and jitter-seal therefore provide data integrity binding but
          do not prevent an adversarial Attester from computing MACs over fabricated
          data. Their security value is limited to ensuring internal consistency
          within an honestly-generated checkpoint. See <xref target="security-considerations"/>.
        </t>
      </section>

      <section anchor="swf-security">
        <name>Security Bound</name>
        <t>
          An adversary who skips fraction f of iterations will be detected with probability 1-(1-f)^k where k is the number of sampled proofs. With k=20 and f=0.1, detection probability exceeds 0.878. With k=100 and f=0.05, detection probability exceeds 0.994.
        </t>
        <t>
          This bound holds under the random oracle model for SHA-256. The
          Attester commits to the Merkle root before sample positions are
          derived via the Fiat-Shamir transform. Finding a root that biases
          all k samples away from skipped iterations requires inverting
          SHA-256, which is computationally infeasible under standard
          assumptions.
        </t>
      </section>

      <section anchor="hat">
        <name>Hardware-Anchored Time (HAT)</name>
        <t>
          In T3/T4 tiers, the AE MUST anchor the SWF seed to the TPM Monotonic Counter. This prevents "SWF Speed-up" attacks by ensuring that the temporal proof is bound to the hardware's internal perception of time.
        </t>
      </section>
    </section>

    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>
        This document requests the following IANA registrations:
      </t>
      <section anchor="iana-cbor-tags">
        <name>CBOR Tags</name>
        <t>
          This document requests registration of two CBOR tags in the
          "CBOR Tags" registry per RFC 8949, Section 9.2:
        </t>
        <t>
          Tag 1347571280:
        </t>
        <dl>
          <dt>Tag:</dt><dd>1347571280</dd>
          <dt>Data Item:</dt><dd>map</dd>
          <dt>Semantics:</dt><dd>PoP Evidence Packet (see <xref target="wire-format"/> of this document)</dd>
          <dt>Point of Contact:</dt><dd>David Condrey (david@writerslogic.com)</dd>
          <dt>Description of Semantics:</dt><dd>[this document]</dd>
        </dl>
        <t>
          Tag 1463894560:
        </t>
        <dl>
          <dt>Tag:</dt><dd>1463894560</dd>
          <dt>Data Item:</dt><dd>map</dd>
          <dt>Semantics:</dt><dd>PoP Attestation Result (see <xref target="PoP-Appraisal"/>)</dd>
          <dt>Point of Contact:</dt><dd>David Condrey (david@writerslogic.com)</dd>
          <dt>Description of Semantics:</dt><dd>[this document], <xref target="PoP-Appraisal"/></dd>
        </dl>
      </section>
      <section anchor="iana-smi-pen">
        <name>SMI Private Enterprise Number</name>
        <t>
          No SMI Private Enterprise Number is required by this specification's
          wire format. WritersLogic Inc has requested PEN 65074 for
          organizational identification purposes only.
        </t>
      </section>
      <section anchor="iana-eat-profile">
        <name>EAT Profile</name>
        <t>
          Registration of the EAT profile URI: urn:ietf:params:rats:eat:profile:pop:1.0
        </t>
      </section>
      <section anchor="iana-media-types">
        <name>Media Types</name>
        <t>
          This document requests registration of the following media
          types per RFC 6838:
        </t>
        <t>
          application/vnd.writerslogic-pop+cbor:
        </t>
        <dl>
          <dt>Type name:</dt><dd>application</dd>
          <dt>Subtype name:</dt><dd>vnd.writerslogic-pop+cbor</dd>
          <dt>Required parameters:</dt><dd>none</dd>
          <dt>Optional parameters:</dt><dd>none</dd>
          <dt>Encoding considerations:</dt><dd>binary (CBOR)</dd>
          <dt>Security considerations:</dt><dd>See <xref target="security-considerations"/> of this document</dd>
          <dt>Interoperability considerations:</dt><dd>See <xref target="wire-format"/> of this document</dd>
          <dt>Published specification:</dt><dd>[this document]</dd>
          <dt>Person and email address to contact:</dt><dd>David Condrey (david@writerslogic.com)</dd>
        </dl>
        <t>
          application/vnd.writerslogic-war+cbor:
        </t>
        <dl>
          <dt>Type name:</dt><dd>application</dd>
          <dt>Subtype name:</dt><dd>vnd.writerslogic-war+cbor</dd>
          <dt>Required parameters:</dt><dd>none</dd>
          <dt>Optional parameters:</dt><dd>none</dd>
          <dt>Encoding considerations:</dt><dd>binary (CBOR)</dd>
          <dt>Security considerations:</dt><dd>See <xref target="PoP-Appraisal"/></dd>
          <dt>Interoperability considerations:</dt><dd>See <xref target="PoP-Appraisal"/></dd>
          <dt>Published specification:</dt><dd>[this document], <xref target="PoP-Appraisal"/></dd>
          <dt>Person and email address to contact:</dt><dd>David Condrey (david@writerslogic.com)</dd>
        </dl>
      </section>
      <section anchor="iana-tls-exporter">
        <name>TLS Exporter Label</name>
        <t>
          This document registers the following TLS exporter label in the
          "TLS Exporter Labels" registry defined in <xref target="RFC5705"/>:
        </t>
        <dl>
          <dt>Value:</dt><dd>EXPORTER-PoP-channel-binding</dd>
          <dt>DTLS-OK:</dt><dd>Y</dd>
          <dt>Recommended:</dt><dd>Y</dd>
          <dt>Reference:</dt><dd>[this document]</dd>
        </dl>
      </section>
    </section>

    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>
        This section provides security analysis following <xref target="RFC3552"/> guidelines. The threat model is defined in <xref target="threat-model"/> with the adversarial Attester as the primary threat actor. Detailed forensic security analysis is provided in <xref target="PoP-Appraisal"/>.
      </t>

      <section anchor="sec-primary-threat">
        <name>Primary Threat: Adversarial Attester</name>
        <t>
          Unlike traditional remote attestation where external adversaries threaten system integrity, PoP's primary threat is the Attester operator themselves. The author controls the Attesting Environment and has incentive to claim authenticity for AI-generated or assisted content.
        </t>
        <t>
          This threat model inversion has fundamental implications:
        </t>
        <ul>
          <li>Software-only attestation (T1) provides minimal assurance since the Attester controls all software</li>
          <li>Cryptographic proofs must be bound to physical constraints the Attester cannot circumvent</li>
          <li>Behavioral entropy must be economically expensive to forge, not merely cryptographically secure</li>
          <li>Trust in Evidence scales with the Attestation Tier and the cost of bypassing its guarantees</li>
        </ul>
      </section>

      <section anchor="sec-retype-defense">
        <name>Retype Attack Defenses</name>
        <t>
          The retype attack (see <xref target="retype-attack"/>) is the canonical forgery vector. Defenses are layered:
        </t>
        <dl>
          <dt>Cognitive Load Correlation (CLC):</dt>
          <dd>Verifiers analyze correlation between content complexity and typing cadence as specified in <xref target='PoP-Appraisal'/>.</dd>
          <dt>Error Topology Analysis:</dt>
          <dd>Authentic authoring produces characteristic error patterns: corrections localized near recent insertions, deletion-to-insertion ratios consistent with human cognitive models <xref target="Salthouse1986"/>, and fractal self-similarity in revision patterns. Retyping produces either unnaturally low error rates or randomly distributed artificial errors.</dd>
          <dt>Temporal Cost:</dt>
          <dd>Even successful retype attacks require real-time effort. A 5,000-word document with 10-second checkpoint intervals requires 8+ hours of continuous typing effort to forge. The attack does not scale economically for high-volume forgery.</dd>
        </dl>
        <t>
          Relying Parties should be aware that retype attacks remain viable for short documents or high-value targets willing to invest real time. PoP provides graduated assurance proportional to document length and checkpoint density.
        </t>
      </section>

      <section anchor="sec-relay-replay">
        <name>Relay and Replay Attack Defenses</name>
        <t>
          As defined in <xref target="replay-attack"/> and <xref target="relay-attack"/>, these attacks are defeated through Physical Freshness anchors binding Evidence to non-reproducible physical state:
        </t>
        <ul>
          <li>Thermal trajectories captured during SWF computation cannot be replayed</li>
          <li>Kernel entropy pool deltas are bound to specific execution moments</li>
          <li>Out-of-band presence challenges (QR scans) verify real-time physical proximity</li>
        </ul>
        <t>
          Verifiers MUST reject Evidence where physical freshness markers are stale, inconsistent with timestamps, or exhibit patterns suggesting simulation.
        </t>
      </section>

      <section anchor="sec-swf-speedup">
        <name>SWF Acceleration Defenses</name>
        <t>
          As analyzed in <xref target="swf-acceleration"/>, specialized hardware attacks are mitigated by:
        </t>
        <ul>
          <li><em>Memory-hardness:</em> Argon2id computation is bounded by memory bandwidth (approximately 50 GB/s for DDR5), not ALU throughput. ASICs provide minimal advantage.</li>
          <li><em>Hardware-Anchored Time (T3/T4):</em> SWF seeds are bound to TPM monotonic counters, preventing time compression even with faster computation.</li>
          <li><em>Merkle sampling:</em> Skipping SWF iterations is detected probabilistically. With k=100 samples, skipping 5% of iterations has >99.4% detection probability.</li>
        </ul>
      </section>

      <section anchor="sec-tier-trust">
        <name>Trust Gradation by Tier</name>
        <t>
          Relying Parties should interpret Evidence according to its Attestation Tier:
        </t>
        <dl>
          <dt>T1 (Software-Only):</dt>
          <dd>Provides temporal ordering and content binding only. Adversarial Attester can forge all behavioral claims. Suitable only for low-stakes applications or as supplementary evidence.</dd>
          <dt>T2 (Attested Software):</dt>
          <dd>Adds platform attestation hooks but degrades gracefully. Provides moderate assurance against casual forgery but not determined adversaries.</dd>
          <dt>T3 (Hardware-Bound):</dt>
          <dd>Signing keys are hardware-protected. Forgery requires physical access to the Secure Element. Provides strong assurance for most applications.</dd>
          <dt>T4 (Hardware-Hardened):</dt>
          <dd>Anti-tamper evidence and PUF binding. Forgery requires invasive hardware attacks. Suitable for high-stakes legal or financial applications.</dd>
        </dl>
      </section>

      <section anchor="sec-economic-bounds">
        <name>Forgery Cost Bounds</name>
        <t>
          Implementations SHOULD report quantified forgery cost estimates in Attestation Results. For CORE profile (10,000 iterations, m=65536 KiB):
        </t>
        <ul>
          <li>Sequential computation time: Argon2id with t=1, m=65536 KiB requires approximately 50-100ms on consumer hardware (DDR4, ~25 GB/s memory bandwidth). The subsequent SHA-256 iterations add negligible time (&lt;1ms for 10,000 iterations).</li>
          <li>Memory requirement: 64 MiB per concurrent chain</li>
          <li>Energy cost per checkpoint: approximately $0.00001 USD at consumer electricity rates</li>
        </ul>
        <t>
          These costs are low for individual checkpoints. Security derives from the
          conjunctive requirement across many checkpoints: an adversary must sustain
          consistent behavioral entropy, temporal ordering, and physical state data
          across the entire chain. The forgery cost scales superlinearly with
          checkpoint count due to session consistency requirements.
        </t>
      </section>

      <section anchor="sec-dos">
        <name>Denial of Service</name>
        <t>
          SWF verification is asymmetric: Merkle-sampled proofs verify in O(k * log n) versus O(n) generation. Verifiers cannot be overwhelmed by expensive verification requests. Implementations SHOULD implement rate limiting on Evidence submission.
        </t>
      </section>

      <section anchor="sec-mac-limitations">
        <name>MAC Field Security Limitations</name>
        <t>
          The entangled-mac and jitter-seal fields are HMAC values keyed from
          the SWF output. In the adversarial Attester model, the Attester
          generates the SWF output and therefore knows the MAC key. An
          adversarial Attester can compute valid MACs over fabricated data
          (synthetic jitter, manufactured physical state). These fields provide
          internal consistency checking but do NOT prevent forgery by the
          Attester. Their value is limited to:
        </t>
        <ul>
          <li>Binding data fields to the SWF computation within an honestly-generated checkpoint</li>
          <li>Providing internal consistency verification (note: the MAC keys are derivable from the public merkle-root field; these MACs do not provide third-party tamper detection)</li>
          <li>In T3/T4 tiers, the packet-level hardware-bound signature (see <xref target="attester-state-machine"/>) provides the actual integrity guarantee</li>
        </ul>
      </section>

      <section anchor="sec-physical-freshness-tiers">
        <name>Physical Freshness by Tier</name>
        <t>
          In T1 (Software-Only) and T2 (Attested Software) tiers, the Attester
          controls all software including the operating system. Physical state
          readings (thermal trajectories, kernel entropy deltas) are obtained
          from OS interfaces that the adversarial Attester can intercept or
          fabricate. Verifiers MUST NOT treat physical-state or physical-liveness
          fields as evidence of physical freshness in T1/T2 Evidence Packets.
          Their value in these tiers is limited to increasing the dimensionality
          of data that an adversary must fabricate consistently.
        </t>
        <t>
          Physical freshness provides meaningful anti-replay protection only in
          T3/T4 tiers where hardware attestation binds physical state readings
          to a trusted execution environment.
        </t>
      </section>

      <section anchor="sec-implementation-requirements">
        <name>Implementation Security Requirements</name>
        <t>
          Conforming implementations MUST:
        </t>
        <ul>
          <li>Use constant-time comparison for all cryptographic operations</li>
          <li>Zero sensitive memory (keys, jitter data) after use</li>
          <li>Validate all input lengths and formats before processing</li>
          <li>Reject Evidence with inconsistent internal state (e.g., checkpoint-hash verification failure)</li>
        </ul>
        <t>
          T3/T4 implementations MUST additionally:
        </t>
        <ul>
          <li>Store signing keys exclusively in hardware Secure Elements</li>
          <li>Bind SWF seeds to TPM monotonic counters</li>
          <li>Verify platform integrity before Evidence generation</li>
        </ul>
      </section>
    </section>

    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>
        This section addresses privacy in accordance with <xref target="RFC6973"/>.
      </t>

      <section anchor="priv-minimization">
        <name>Data Minimization</name>
        <t>
          PoP Evidence Packets do not contain document content. Content binding uses cryptographic hashes (SHA-256) which are computationally irreversible. The author-salted mode (hash-salt-mode=1) provides additional protection by preventing rainbow-table correlation across documents.
        </t>
      </section>

      <section anchor="priv-fingerprinting">
        <name>Behavioral Fingerprinting</name>
        <t>
          Jitter sequences in ENHANCED and MAXIMUM profiles constitute behavioral biometrics. To protect author privacy, Verifiers are expected to:
        </t>
        <ul>
          <li>Discard jitter data after the verification session completes</li>
          <li>Avoid correlating jitter across multiple Evidence Packets to prevent author deanonymization</li>
          <li>Use jitter data solely for authenticity verification</li>
        </ul>
        <t>
          Attesters SHOULD quantize jitter values to reduce fingerprinting precision while preserving statistical validity. A minimum quantization of 5ms is RECOMMENDED.
        </t>
      </section>

      <section anchor="priv-physical-leakage">
        <name>Physical State Leakage</name>
        <t>
          Thermal trajectories and kernel entropy deltas in the physical-state field may reveal information about the Attester's hardware configuration. Implementations SHOULD normalize thermal data to relative deltas rather than absolute values to prevent device fingerprinting.
        </t>
      </section>

      <section anchor="priv-unlinkability">
        <name>Unlinkability</name>
        <t>
          Authors who wish to remain pseudonymous SHOULD use per-document signing keys and the author-salted content binding mode to prevent cross-document linkage.
        </t>
      </section>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2104.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5705.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5869.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8610.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8017.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8949.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9052.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9106.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9334.xml"/>
        <reference anchor="PoP-Appraisal">
          <front>
            <title>Proof of Process (PoP): Forensic Appraisal and Security Model</title>
            <author fullname="David Condrey" initials="D." surname="Condrey"/>
            <date year="2026" month="February"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-condrey-rats-pop-appraisal-04"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3552.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6973.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9266.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9711.xml"/>
        <reference anchor="Boneh2018" target="https://doi.org/10.1007/978-3-319-96884-1_25">
          <front>
            <title>Verifiable Delay Functions</title>
            <author fullname="Dan Boneh" initials="D." surname="Boneh"/>
            <author fullname="Joseph Bonneau" initials="J." surname="Bonneau"/>
            <author fullname="Benedikt Bunz" initials="B." surname="Bunz"/>
            <author fullname="Ben Fisch" initials="B." surname="Fisch"/>
            <date year="2018"/>
          </front>
          <seriesInfo name="CRYPTO" value="2018"/>
        </reference>
        <reference anchor="Dolev-Yao" target="https://doi.org/10.1109/TIT.1983.1056650">
          <front>
            <title>On the Security of Public Key Protocols</title>
            <author fullname="Danny Dolev" initials="D." surname="Dolev"/>
            <author fullname="Andrew Yao" initials="A." surname="Yao"/>
            <date year="1983"/>
          </front>
          <seriesInfo name="IEEE Transactions on Information Theory" value="29(2), 198-208"/>
        </reference>
        <reference anchor="Salthouse1986" target="https://doi.org/10.1037/0033-295X.93.3.303">
          <front>
            <title>Perceptual, Cognitive, and Motoric Aspects of Transcription Typing</title>
            <author fullname="Timothy A. Salthouse" initials="T.A." surname="Salthouse"/>
            <date year="1986"/>
          </front>
          <seriesInfo name="Psychological Review" value="93(3), 303-319"/>
        </reference>
        <reference anchor="Sardar-RATS" target="https://datatracker.ietf.org/doc/html/draft-sardar-rats-sec-cons-02">
          <front>
            <title>Security Considerations for Remote ATtestation procedureS (RATS)</title>
            <author fullname="Muhammad Usama Sardar" initials="M.U." surname="Sardar"/>
            <date year="2026" month="February"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-sardar-rats-sec-cons-02"/>
        </reference>
        <reference anchor="RATS-Models" target="https://datatracker.ietf.org/doc/html/draft-ietf-rats-reference-interaction-models-15">
          <front>
            <title>Reference Interaction Models for Remote Attestation Procedures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="M. Eckel" initials="M." surname="Eckel"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <date year="2025"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-reference-interaction-models-15"/>
        </reference>
        <reference anchor="SEAT-EXPAT" target="https://datatracker.ietf.org/doc/html/draft-fossati-seat-expat-01">
          <front>
            <title>Remote Attestation with Exported Authenticators</title>
            <author fullname="Muhammad Usama Sardar" initials="M.U." surname="Sardar"/>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati"/>
            <author fullname="Tirumaleswar Reddy" initials="T." surname="Reddy"/>
            <author fullname="Yaron Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="Ionut Mihalcea" initials="I." surname="Mihalcea"/>
            <date year="2026" month="January"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-fossati-seat-expat-01"/>
        </reference>
        <reference anchor="SEAT-Timing" target="https://datatracker.ietf.org/doc/html/draft-usama-seat-intra-vs-post-03">
          <front>
            <title>Pre-, Intra- and Post-handshake Attestation</title>
            <author fullname="Muhammad Usama Sardar" initials="M.U." surname="Sardar"/>
            <date year="2026" month="January"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-usama-seat-intra-vs-post-03"/>
        </reference>
        <reference anchor="SEAT-UseCases" target="https://datatracker.ietf.org/doc/html/draft-mihalcea-seat-use-cases-01">
          <front>
            <title>Use Cases and Properties for Integrating Remote Attestation with Secure Channel Protocols</title>
            <author fullname="Ionut Mihalcea" initials="I." surname="Mihalcea"/>
            <author fullname="Muhammad Usama Sardar" initials="M.U." surname="Sardar"/>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati"/>
            <author fullname="Tirumaleswar Reddy" initials="T." surname="Reddy"/>
            <author fullname="Yuning Jiang" initials="Y." surname="Jiang"/>
            <author fullname="Meiling Chen" initials="M." surname="Chen"/>
            <date year="2026" month="January"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mihalcea-seat-use-cases-01"/>
        </reference>
      </references>
    </references>

    <section anchor="test-vectors" numbered="false">
      <name>SWF Test Vectors</name>
      <t>
        The following test vectors validate SWF implementations.
      </t>
      <t>NOTE: These test vectors use the construction from this specification revision. The salt is derived as SHA-256("PoP-salt" || seed). Implementers should verify their Argon2id output matches state_0 before proceeding with SHA-256 iterations.</t>
      <artwork><![CDATA[
Seed: "witnessd-genesis-v1"
Seed (hex): 7769746e657373642d67656e657369732d7631
Salt: SHA-256("PoP-salt" || seed)

Argon2id Parameters:
  Time Cost (t): 1
  Memory Cost (m): 65536 KiB
  Parallelism (p): 1
  Output Length: 32 bytes

Iterations: 10,000

Salt (hex): c5de0ba53fa83ab477ead9013bfca978
             339e5072882cafb3d0efc8cc40299155

Intermediate States:
  state_0 (Argon2id):
    a40e0f73832f88dc8bfe5f8956fff4a0
    ad2fc4de5455e9d85497c6083b3b1802
  state_1000:
    c727ead9631eef95ca9a5976a947f71a
    6f4f29a5c80aa2dc7f120f9a4193d7b4
  state_5000:
    d6cba1225d1a2d25dddecfcf2d473020
    a19df736878f40ccdfb9334df5af58a5
  state_9999:
    d7482a780c9e89c787f1ff1e2c566b7b
    536260e37d24c539e46de1598321aea2
  state_10000 (final):
    e445a3cdc8152d66c71366d22b2c5975
    cff4d0c8ee6ec0e76515b04d143bd148
      ]]></artwork>
    </section>

    <section anchor="acknowledgements" numbered="false">
      <name>Acknowledgements</name>
      <t>
        The author thanks the participants of the RATS working group for
        their ongoing work on remote attestation architecture and security
        considerations that informed this specification.
      </t>
    </section>
  </back>
</rfc>
