<?xml version='1.0' encoding='UTF-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" category="info" docName="draft-dpa-tls-dpa-01" submissionType="independent" version="3">
  <front>
    <title abbrev="TLS-DPA">TLS-DPA: An Identity-Bound Security Protocol for Traditional, Overlay, and Zero-Port Transports</title>
    <author fullname="Benjamin Anthony Fisher" initials="B.A." surname="Fisher">
      <organization>DPA R&amp;D Ltd (https://www.dpa-cloud.co.uk)</organization>
      <address>
        <email>b.fisher@dpa-cloud.co.uk</email>
        <uri>https://orcid.org/0009-0004-4412-2269</uri>
      </address>
    </author>
    <date year="2026" month="March" day="16"/>
    <area>Security</area>
    <keyword>TLS-DPA</keyword>
    <keyword>identity-centric</keyword>
    <keyword>zero-port</keyword>
    <keyword>handshake</keyword>
    <keyword>channel binding</keyword>
    <keyword>post-quantum</keyword>
    <keyword>hybrid KEM</keyword>
    <keyword>UZP</keyword>
    <keyword>UZPIF</keyword>
    <abstract>
      <t>
        TLS-DPA is an experimental, identity-bound security protocol inspired by the design of TLS 1.3 (
        <xref target="RFC8446"/>
        ).
        It is intended to operate consistently across environments where conventional IP address and port semantics are weak,
        unstable, or intentionally absent, including zero-port transports such as UZP (
        <xref target="UZP"/>
        ).
      </t>
      <t>
        TLS-DPA generalises the handshake so it is not tied to server-side listeners, binds authentication to Service Identities
        rather than network coordinates, reduces metadata exposure to intermediaries (including rendezvous nodes in UZP fabrics),
        provides a unified hybrid-KEM post-quantum transition model (
        <xref target="NIST-PQC"/>
        ), and supports session continuity
        across overlay path changes (e.g., QUIC Connection IDs; 
        <xref target="RFC9000"/>
        ).
      </t>
      <t>
        This document is part of an experimental, research-oriented Independent Stream suite. It defines the current
        normative baseline for trust objects, validation rules, and security semantics within its scope. Hard
        interoperability is expected for shared object semantics and validation rules. Full wire-level, clustering,
        and proof-family interoperability is not claimed everywhere yet; the remaining details are intentionally
        profile-defined or deferred where noted.
      </t>
    </abstract>
    <note>
      <name>Note to Reviewers</name>
      <t>
        This document is part of an experimental, research-oriented suite prepared for the Independent Stream. It is
        published to enable structured technical review, interoperability discussion, and disciplined specification
        development, and it remains a work-in-progress research artefact rather than a finished specification.
      </t>
      <t>
        Within that suite, this revision defines the current normative baseline for trust objects, validation rules,
        and security semantics within TLS-DPA. Hard interoperability is expected for shared object semantics and
        validation rules. Full wire-level, clustering, and proof-family interoperability is not claimed everywhere
        yet; the remaining details are intentionally profile-defined or deferred where noted.
      </t>
      <t>
        The name TLS-DPA is used to label this research protocol and avoid confusion with the IETF TLS versioning and
        registry space. It is not presented as a new version of the IETF TLS protocol, and no IANA allocations are
        requested by this draft.
      </t>
      <t>
        Where this document provides numeric guidance (for example, replay windows, resumption behaviour, or profile
        parameters), the intent is to offer recommended bounds suitable for experimentation; profile-based behaviour
        and implementation discretion are explicitly expected within stated limits.
      </t>
      <t>
        Reducing metadata exposure in some roles does not imply complete privacy or invisibility, and rendezvous or
        clustered deployments still require explicit availability assumptions and operational design.
      </t>
    </note>
  </front>
  <middle>
    <section anchor="scope-and-status" toc="include">
      <name>Scope and Status</name>
      <t>
        This Internet-Draft is part of an experimental, research-oriented suite prepared for the Independent Stream.
        It specifies TLS-DPA for identity-first and topology-independent deployments, including rendezvous and
        zero-port fabrics, while remaining open to substantial revision through review and implementation
        experiments.
      </t>
      <t>
        Within that suite, this document defines the current normative baseline for trust objects, validation rules,
        and security semantics within TLS-DPA, especially identity binding, transcript construction, and handshake
        authorisation. Hard interoperability is expected for shared object semantics and validation rules.
      </t>
      <t>
        Full wire-level, clustering, and proof-family interoperability is not claimed everywhere yet; the remaining
        details are intentionally profile-defined or deferred, so this draft should not be read as claiming a fully
        closed wire image or proof model.
      </t>
      <t>
        TLS-DPA is designed for environments where conventional port-listening assumptions and IP:port-based identity
        binding do not hold. It is designed for experimentation and profile-driven deployments within its target
        environment. Privacy, decentralisation, and availability remain deployment- and profile-dependent properties.
      </t>
    </section>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>
        TLS 1.3 (
        <xref target="RFC8446"/>
        ) defines the current baseline for transport-layer security on the Internet. However, its usage
        patterns remain oriented around server-side listeners bound to IP address and port tuples, and many deployments treat these network
        coordinates as meaningful anchors for authentication and policy.
      </t>
      <t>
        TLS-DPA extends the design principles of TLS 1.3 to support:
      </t>
      <ul>
        <li>
          <t>
            operation over identity-first, topology-independent transports (for example UZP; 
            <xref target="UZP"/>
            );
          </t>
        </li>
        <li>
          <t>authentication bound to Service Identities, rather than IP addresses and ports;</t>
        </li>
        <li>
          <t>reduced metadata exposure to intermediaries, including rendezvous nodes in UZP fabrics;</t>
        </li>
        <li>
          <t>
            hybrid classical/post-quantum KEM negotiation aligned with the NIST PQC process (
            <xref target="NIST-PQC"/>
            );
          </t>
        </li>
        <li>
          <t>
            session continuity across transport or overlay path changes (for example QUIC Connection IDs; 
            <xref target="RFC9000"/>
            ).
          </t>
        </li>
      </ul>
      <t>
        The eventual TLS-DPA wire image is intended to remain close to TLS 1.3, enabling reuse of existing
        implementation structure while adding explicit identity and transport binding into the handshake transcript
        and key schedule. This draft does not yet close every byte-level encoding, extension layout, or deployment
        profile.
      </t>
      <t>
        TLS-DPA also aligns with zero-trust guidance (NIST SP 800-207 <xref target="NIST-SP800-207"/>) and identity-centric designs
        such as HIP <xref target="RFC7401"/>.
      </t>
      <t>
        This draft should therefore be read as part of an experimental, research-oriented Independent Stream suite
        and as the current normative baseline for trust objects, validation rules, and security semantics within
        TLS-DPA. Hard interoperability is expected for shared object semantics and validation rules. Full wire-level,
        clustering, and proof-family interoperability is not claimed everywhere yet; the remaining details are
        intentionally profile-defined or deferred. Reducing metadata exposure in some roles does not imply complete
        privacy or invisibility, and rendezvous or clustered deployment availability still depends on explicit
        operational choices.
      </t>
    </section>
    <section anchor="layering-and-baseline">
      <name>Layering and Interoperability Baseline</name>
      <t>
        This document is organised into four specification strata: core handshake semantics; transport binding rules;
        UZP / UZPIF applicability and profile rules; and optional or experimental extensions. The intent is to keep
        the core handshake and trust story stable even where exact extension code points, deployment profiles, or
        transport-specific optimisations remain open.
      </t>
      <t>
        Sections <xref target="overview"/>, <xref target="identity-binding-model"/>,
        <xref target="identity-authority-model"/>, <xref target="pq-kex-model"/>,
        <xref target="key-schedule-summary"/>, <xref target="transcript-hashing-rules"/>,
        <xref target="sec-exporters"/>, <xref target="sec-service-validation"/>, and
        <xref target="sec-alerts"/> define the core handshake semantics and trust decisions required for baseline
        interoperability. Sections <xref target="channel-model"/> and <xref target="extensions"/> define the
        transport binding rules that feed those semantics. Sections <xref target="applicability-uzp"/> and
        <xref target="early-data"/> define the UZP / UZPIF applicability profile. Section
        <xref target="optional-experimental-extensions"/> is outside baseline interoperability unless a later profile
        explicitly upgrades it.
      </t>
      <t>
        Baseline interoperable behaviour in this revision requires the core semantics for Service Identity binding,
        transcript construction, key schedule inputs, minimum revocation processing, Service Identity validation, and
        alert handling. Baseline interoperable transport binding further requires processing of
        <tt>tlsdpa_service_identity</tt> and <tt>tlsdpa_transport_binding</tt>. The
        <tt>tlsdpa_pq_kem_params</tt> extension is required when a negotiated deployment profile enables post-quantum
        or hybrid KEM operation.
      </t>
      <t>
        Exact extension code points, final wire encodings, some revocation acquisition paths beyond the baseline
        processing rules, UZP early-data and rebind policy, and optional attribution metadata remain
        profile-dependent or experimental in this revision. Optional extensions MUST NOT alter authentication,
        authorisation, or trust outcomes unless a later profile explicitly upgrades them.
      </t>
      <t>
        Sections <xref target="design-goals"/>, <xref target="handshake-diagrams"/>, <xref target="threat-model"/>,
        and <xref target="operational-considerations"/> are explanatory or deployment-oriented unless they explicitly
        restate a normative baseline rule from the sections above.
      </t>
    </section>
    <section anchor="conventions-and-terminology">
      <name>Conventions and Terminology</name>
      <t>
        The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
        "MAY", and "OPTIONAL" in this document are to be interpreted as described in 
        <xref target="RFC2119"/>
         and 
        <xref target="RFC8174"/>
        when, and only when, they appear in all capitals, as shown here.
      </t>
      <t>Terminology used throughout this document:</t>
      <dl>
        <dt>CID</dt>
        <dd>
          <t>Canonical Identity (a long-term public key hash).</t>
        </dd>
        <dt>EID</dt>
        <dd>
          <t>Ephemeral Identity (a session-level fingerprint).</t>
        </dd>
        <dt>UZP</dt>
        <dd>
          <t>
          Zero-port transport as defined by the companion UZP Internet-Draft (
          <xref target="UZP"/>
          ).
        </t>
        </dd>
        <dt>ZPIT</dt>
        <dd>
          <t>Zero-Port Interconnect Tunnel (a UZP fabric channel).</t>
        </dd>
        <dt>Pantheon</dt>
        <dd>
          <t>A federated or deployment-scoped identity, attestation, and policy plane whose authorities bind identity, policy, and trust metadata to keys or selectors accepted under local policy, may validate or certify those bindings, and may issue credentials, Grants, and delegations over them.</t>
        </dd>
        <dt>Service Identity</dt>
        <dd>
          <t>The identity to which TLS-DPA authentication is bound (for example a DNS name, CID, EID, or a UZPIF selector).</t>
        </dd>
        <dt>Specification-Origin Identifier</dt>
        <dd>
          <t>An OPTIONAL non-authoritative attribution metadata field carried by extension.</t>
        </dd>
      </dl>
    </section>
    <section anchor="design-goals">
      <name>Design Goals</name>
      <t>TLS-DPA is designed to:</t>
      <ol>
        <li>
          <t>decouple channel authentication from IP address and port topology;</t>
        </li>
        <li>
          <t>provide identity-first naming independent of network routing;</t>
        </li>
        <li>
          <t>
            support hybrid classical and post-quantum KEM negotiation aligned with NIST PQC guidance (
            <xref target="NIST-PQC"/>
            );
          </t>
        </li>
        <li>
          <t>reduce metadata in early handshake flights;</t>
        </li>
        <li>
          <t>
            bind channels to transport-level identifiers (for example UZP SessionIDs or QUIC Connection IDs; 
            <xref target="RFC9000"/>
            );
          </t>
        </li>
        <li>
          <t>
            remain closely aligned with the structure of TLS 1.3 (
            <xref target="RFC8446"/>
            );
          </t>
        </li>
        <li>
          <t>
            operate efficiently over UZP and UZPIF rendezvous fabrics (
            <xref target="UZP"/>
            , 
            <xref target="UZPIF"/>
            ).
          </t>
        </li>
      </ol>
      <t>
        Where this document specifies algorithms or parameter sets (for example hybrid KEM combinations), these are intended as
        recommended profiles and may evolve. Implementations may support additional profiles and apply implementation-defined choices
        within any explicit limits described in the relevant sections.
      </t>
    </section>
    <section anchor="overview">
      <name>Core TLS-DPA Semantics</name>
      <t>
        TLS-DPA retains the basic architecture of TLS 1.3 (
        <xref target="RFC8446"/>
        ) but introduces:
      </t>
      <ul>
        <li>
          <t>transport-agnostic channel binding, via a dedicated extension that carries a transport identifier and class;</t>
        </li>
        <li>
          <t>Service Identity negotiation and binding into the transcript;</t>
        </li>
        <li>
          <t>mandatory transcript binding of identity and transport metadata;</t>
        </li>
        <li>
          <t>PQ-ready hybrid KEM negotiation using an explicit parameter extension;</t>
        </li>
        <li>
          <t>stable session resumption across topology or path changes.</t>
        </li>
      </ul>
      <t>
        TLS-DPA defines the handshake over an abstract TLS-DPA Channel. The channel only needs to provide:
      </t>
      <ul>
        <li>
          <t>ordered or reliably framed delivery;</t>
        </li>
        <li>
          <t>
            a transport-level identifier (e.g., a TCP 4-tuple, QUIC Connection ID; 
            <xref target="RFC9000"/>
            , or a UZP SessionID);
          </t>
        </li>
        <li>
          <t>uniqueness sufficient for transcript binding.</t>
        </li>
      </ul>
      <t>
        Together with Sections <xref target="identity-binding-model"/>, <xref target="identity-authority-model"/>,
        <xref target="pq-kex-model"/>, <xref target="key-schedule-summary"/>,
        <xref target="transcript-hashing-rules"/>, <xref target="sec-exporters"/>,
        <xref target="sec-service-validation"/>, and <xref target="sec-alerts"/>, this section defines the core
        TLS-DPA handshake semantics for baseline interoperability.
      </t>
    </section>
    <section anchor="channel-model">
      <name>Transport Binding Rules</name>
      <t>
        This section and Section <xref target="extensions"/> define the transport binding rules consumed by the core
        TLS-DPA handshake. Baseline interoperability requires consistent construction and verification of Service
        Identity and transport-binding inputs; exact code points and final byte-level encodings remain profile-defined
        in this revision.
      </t>
      <t>TLS-DPA treats the underlying transport as providing one or more channels:</t>
      <ul>
        <li>
          <t>
            <strong>TCP</strong>
            : traditional byte stream;
          </t>
        </li>
        <li>
          <t>
            <strong>QUIC</strong>
            : stream over a QUIC connection, identified by QUIC Connection ID (
            <xref target="RFC9000"/>
            );
          </t>
        </li>
        <li>
          <t>
            <strong>UZP</strong>
            : stream inside a ZPIT, identified by a UZP SessionID (
            <xref target="UZP"/>
            ).
          </t>
        </li>
      </ul>
      <t>
        The handshake binds to this transport using the 
        <tt>tlsdpa_transport_binding</tt>
         extension (see 
        <xref target="sec-transport-binding"/>
        ).
      </t>
      <figure anchor="fig-channel">
        <name>TLS-DPA operating over an abstract transport channel.</name>
        <artwork><![CDATA[
+------------+   +---------------+   +------------+
| TLS-DPA    |-->| Transport     |-->| TLS-DPA    |
| Client     |   | Channel       |   | Server     |
| Handshake  |   | Handshake &   |   |            |
| Protected  |   | Protected     |   |            |
| Data       |   | Data          |   |            |
+------------+   +---------------+   +------------+
]]></artwork>
      </figure>
      <t>This figure places TLS-DPA above a transport channel to highlight the separation from the underlying relay.</t>
    </section>
    <section anchor="identity-binding-model">
      <name>Identity Binding Model</name>
      <t>TLS-DPA authenticates peers using Service Identities, which may be:</t>
      <ul>
        <li>
          <t>DNS names (validated per RFC 6125).</t>
        </li>
        <li>
          <t>UZP CIDs (canonical identities, derived from long-term public keys).</t>
        </li>
        <li>
          <t>UZP EIDs (ephemeral, session-level identities).</t>
        </li>
        <li>
          <t>UZPIF selectors resolved via Pantheon services, federated identity services, or local trust mappings <xref target="UZPIF"/>.</t>
        </li>
      </ul>
      <t>The Service Identity MUST be included in the handshake transcript and validated as described in Section <xref target="sec-service-validation"/>.</t>
      <t>CIDs are intended to be stable over meaningful operational time-scales: changes in CID MUST be treated as key-rotation events and not as transient transport artefacts.</t>
    </section>
    <section anchor="identity-authority-model">
      <name>Identity Authority and Trust Model</name>
      <t>
        TLS-DPA identity issuance is intentionally decentralisable.
        Service Identity credentials MAY be self-issued, multi-signed, federation-signed, or organisationally issued.
        Deployments MAY use one or more issuance models concurrently.
      </t>
      <t>
        Where Pantheon is used in a UZPIF-aligned deployment, Pantheon authorities bind identity, policy, and trust
        metadata to keys or selectors accepted under policy; they may validate or certify those bindings and issue
        credentials, Grants, or delegations over them, but they need not generate or custody the underlying private
        keys.
      </t>
      <t>
        TLS-DPA implementations MUST NOT require a single global signing authority.
        The protocol does not mandate a central certificate authority.
      </t>
      <t>
        If any root trust model is used by a deployment profile, that model MUST be replaceable without protocol
        redesign.
      </t>
      <section anchor="revocation-model">
        <name>Revocation Model</name>
        <t>
          TLS-DPA revocation is policy-driven and decentralisable.
          The protocol does not define a mandatory single revocation authority and does not require any global
          CRL-equivalent service.
        </t>
        <t>
          Baseline interoperable revocation in this revision is intentionally narrow: signed Revocation Signal objects,
          optional Threshold-Consensus Evidence, explicit acquisition and freshness rules, and fail-closed handling of
          unknown status for new admission decisions. Broader federation governance, quorum composition, and alternate
          revocation transports remain deployment- or profile-defined.
        </t>
        <t>
          Interoperable decentralised revocation in TLS-DPA is defined here only when revocation is conveyed as
          explicit Revocation Signal objects (<xref target="revocation-signal-object"/>), evaluated under a
          recognised threshold policy and, where required, bound to Threshold-Consensus Evidence
          (<xref target="threshold-consensus-evidence-format"/>), and processed according to the client rules in this
          section.
          Deployments that do not exchange such objects remain deployment-local and MUST NOT assume interoperable
          revocation semantics.
        </t>
        <t>
          Revocation MAY be federation-scoped, multi-party threshold-based, and client-enforced.
          For interoperable exchange, Revocation Signals MUST be represented using the common signed
          artefact envelope defined by UZPIF (<xref target="UZPIF"/>) with "object_type" set to
          "revocation" and with epoch or sequence values suitable for conflict handling and freshness checks.
          That object type inherits the UZPIF common envelope unchanged, including canonical serialisation, exact
          signature coverage, object_id derivation, unknown-extension handling, signature ordering, algorithm
          identifier matching, epoch-versus-sequence precedence, and the rule that detached signatures are not part
          of baseline interoperability.
        </t>
        <t>
          No single entity SHALL possess unilateral global revocation authority.
        </t>

        <section anchor="revocation-signal-object">
          <name>Revocation Signal Object</name>
          <t>
            To support interoperable client behaviour, TLS-DPA defines a minimal Revocation Signal object.
            A Revocation Signal MUST use the common signed artefact envelope defined by UZPIF
            (<xref target="UZPIF"/>) with "object_type" set to "revocation", plus the following minimum
            revocation-specific body semantics:
          </t>
          <ul>
            <li>
              <t><strong>subject_type:</strong> identifies whether the revocation applies to a service identity, a Grant, an authority key, or a selector.</t>
            </li>
            <li>
              <t><strong>subject_identifier:</strong> identifies the specific service identity, Grant, authority key, or selector being revoked.</t>
            </li>
            <li>
              <t><strong>issuer_authority_id:</strong> identifies the authority context issuing the revocation signal.</t>
            </li>
            <li>
              <t><strong>scope:</strong> defines the operational scope of the revocation, such as a tenant, service class, transport context, or selector namespace.</t>
            </li>
            <li>
              <t><strong>reason_code:</strong> provides a deployment-defined reason such as key compromise, administrative withdrawal, policy violation, or supersession.</t>
            </li>
            <li>
              <t><strong>issue time:</strong> states when the signal was issued.</t>
            </li>
            <li>
              <t><strong>expiry time:</strong> indicates when the revocation signal ceases to apply.</t>
            </li>
            <li>
              <t><strong>optional review_time:</strong> indicates a non-expiry re-evaluation point when deployments require review before the signal lapses.</t>
            </li>
            <li>
              <t><strong>threshold policy identifier:</strong> identifies the quorum, threshold, or federation rule under which the signal is to be evaluated.</t>
            </li>
            <li>
              <t><strong>common-envelope signature set:</strong> one or more signatures sufficient for the relying party to evaluate threshold satisfaction.</t>
            </li>
            <li>
              <t><strong>optional threshold-consensus evidence reference:</strong> a pointer or digest referring to a separate threshold-consensus evidence object when quorum proof is carried out-of-line.</t>
            </li>
            <li>
              <t><strong>optional evidence reference:</strong> a pointer or digest referring to supporting evidence when the revocation is evidence-backed.</t>
            </li>
            <li>
              <t><strong>optional transparency-log checkpoint reference:</strong> a pointer to a transparency checkpoint or append-only log state relevant to the signal.</t>
            </li>
          </ul>
          <t>
            In terms of the common envelope, "subject_identifier" will normally map to "subject_id", "issue time" to
            "issued_at", "expiry time" to "not_after", and "threshold policy identifier" to "policy_id".
            If a separate "review_time" is needed, it belongs in the revocation-specific body and MUST NOT alter
            envelope validity semantics.
          </t>
          <t>
            These fields extend only the revocation-specific body. TLS-DPA inherits the UZPIF common envelope
            unchanged, including canonical serialisation, exact signature coverage, object identifiers, unknown
            extension handling, signature ordering, algorithm identifier matching, epoch-versus-sequence precedence,
            and the rule that detached signatures are not part of baseline interoperability.
          </t>
        </section>

        <section anchor="threshold-consensus-evidence-format">
          <name>Threshold-Consensus Evidence Format</name>
          <t>
            When revocation depends on multi-party or threshold consensus and interoperable exchange is required,
            implementations MUST represent the quorum result as a Threshold-Consensus Evidence object.
            This object MUST use the common signed artefact envelope defined by UZPIF (<xref target="UZPIF"/>), with
            "object_type" set to "threshold-consensus-evidence".
          </t>
          <t>A minimal Threshold-Consensus Evidence object MUST carry:</t>
          <ul>
            <li>
              <t>the referenced Revocation Signal identifier or digest;</t>
            </li>
            <li>
              <t>the threshold policy identifier;</t>
            </li>
            <li>
              <t>the required threshold or quorum rule;</t>
            </li>
            <li>
              <t>the participating authority identifiers or key identifiers;</t>
            </li>
            <li>
              <t>the signature set, signature digests, or equivalent verification evidence used to satisfy the threshold;</t>
            </li>
            <li>
              <t>the consensus evaluation result, such as satisfied, unsatisfied, or advisory;</t>
            </li>
            <li>
              <t>an evaluation timestamp;</t>
            </li>
            <li>
              <t>optional supporting evidence references; and</t>
            </li>
            <li>
              <t>optional transparency-log or checkpoint references anchoring the threshold evidence.</t>
            </li>
          </ul>
          <t>
            Threshold-Consensus Evidence MAY be embedded within the Revocation Signal or carried as a separate artefact
            referenced by it.
            If it is carried separately, the client MUST bind it to the exact Revocation Signal via digest, object
            identifier, or another unambiguous reference before using it for enforcement.
          </t>
          <t>
            These fields populate the threshold-evidence body only and MUST NOT redefine the suite envelope
            semantics. Threshold-Consensus Evidence inherits the UZPIF common envelope unchanged, including canonical
            serialisation, exact signature coverage, object identifiers, unknown extension handling, signature
            ordering, algorithm identifier matching, epoch-versus-sequence precedence, and the rule that detached
            signatures are not part of baseline interoperability.
          </t>
        </section>

        <section anchor="revocation-retrieval-and-freshness">
          <name>Revocation Signal Acquisition, Caching, and Freshness</name>
          <t>
            A baseline interoperable client MUST be able to consume Revocation Signal
            (<xref target="revocation-signal-object"/>) and Threshold-Consensus Evidence
            (<xref target="threshold-consensus-evidence-format"/>) objects presented by the peer during handshake or
            resumption. A client SHOULD also support authenticated out-of-band retrieval from authority, directory, or
            transparency channels so freshness can be re-established when the peer does not present current objects.
            Locally retained objects MAY be reused only within the freshness bounds of this section. Regardless of
            acquisition path, the client MUST authenticate the object under the common envelope rules before using it.
          </t>
          <t>
            An accepted Revocation Signal, Threshold-Consensus Evidence object, or threshold-policy metadata item MUST
            be cached no longer than the earliest of: its expiry time; its "review_time" if present; replacement by a
            newer applicable object under epoch, sequence, or object-identifier precedence; or a stricter local
            maximum-staleness bound. In the absence of a stricter deployment profile, that local maximum-staleness
            bound MUST NOT exceed 24 hours from the most recent authenticated acquisition or freshness-confirmation
            event.
          </t>
          <t>
            If current revocation state cannot be refreshed or its freshness cannot be re-established within those
            bounds, the client MUST classify the subject's revocation status as "unknown" rather than silently
            treating the subject as clean or not revoked. For new handshakes, session resumption, and any
            authorisation-expanding transition, unknown status is fail-closed in the baseline model.
          </t>
        </section>

        <section anchor="revocation-client-processing">
          <name>Baseline Revocation Processing</name>
          <t>
            A TLS-DPA client or relying service processing a Revocation Signal
            (<xref target="revocation-signal-object"/>) or Threshold-Consensus Evidence
            (<xref target="threshold-consensus-evidence-format"/>) MUST verify the object's signatures, algorithm
            acceptability, issuer authority context, validity interval, declared scope, freshness state, supersession
            state, and any applicable threshold policy before applying revocation effects.
            Minimum local processing MUST always determine whether the outcome is enforced revocation, advisory
            evidence, or unknown revocation state for the decision in question.
          </t>
          <ul>
            <li>
              <t>If the locally recognised threshold is satisfied, the client MUST enforce revocation for the stated scope.</t>
            </li>
            <li>
              <t>If the signal is authentic but below the locally recognised threshold, it is advisory and MAY influence local risk policy, warnings, or connection decisions.</t>
            </li>
            <li>
              <t>Authenticity alone is insufficient: an otherwise valid Revocation Signal or Threshold-Consensus Evidence object MUST NOT be treated as current revocation truth if it is stale, superseded, scope-mismatched, or no longer policy-eligible for the decision being made.</t>
            </li>
            <li>
              <t>If the threshold policy is unknown, or if required threshold-consensus evidence is absent or cannot be bound to the Revocation Signal, the client MUST classify the result as unknown revocation state rather than as clean status.</t>
            </li>
            <li>
              <t>If a Revocation Signal or Threshold-Consensus Evidence object carries a transparency-log or checkpoint reference, the client SHOULD verify that reference before relying on the signal as quorum-backed evidence.</t>
            </li>
            <li>
              <t>For already-established sessions whose revocation freshness later becomes unknown, a deployment profile MAY define bounded fail-soft handling, but that behaviour is outside baseline interoperability. Absent such a profile, the endpoint MUST stop issuing resumption state and MUST block authorisation-expanding actions until freshness is re-established or the session is terminated.</t>
            </li>
            <li>
              <t>Clients MUST retain enough cached metadata to determine whether a previously enforced or observed revocation has expired, requires review, has been superseded by a newer signal, or has fallen into unknown freshness state.</t>
            </li>
            <li>
              <t>Conflicting revocation signals for the same subject and scope MUST be processed under local policy unless a deployment profile defines a stronger quorum or conflict-resolution rule.</t>
            </li>
          </ul>
          <t>
            This baseline does not attempt to solve global governance or federation-wide dispute resolution.
            It defines enough shared behaviour for interoperable handling of signed revocation artefacts, threshold
            evidence, and checkpoint-anchored revocation claims while leaving authority composition and quorum policy
            to deployment profiles.
          </t>
        </section>
      </section>
    </section>
    <section anchor="pq-kex-model">
      <name>Post-Quantum Key Exchange Model</name>
      <t>TLS-DPA introduces unified hybrid-KEM negotiation via the <tt>tlsdpa_pq_kem_params</tt> extension. Supported KEM schemes include:</t>
      <ul>
        <li>
          <t>X25519 (classical ECDH).</t>
        </li>
        <li>
          <t>Kyber768 (PQC KEM candidate).</t>
        </li>
        <li>
          <t>A hybrid X25519+Kyber768 mode.</t>
        </li>
      </ul>
      <t>The key schedule incorporates PQ KEM inputs prior to traffic secret derivation, following general design principles for hybrid KEMs in the NIST PQC process <xref target="NIST-PQC"/>.</t>
    </section>
    <section anchor="key-schedule-summary">
      <name>Key Schedule Summary</name>
      <t>TLS-DPA modifies the TLS 1.3 key derivation <xref target="RFC8446"/> to include:</t>
      <ul>
        <li>
          <t>Service Identity.</t>
        </li>
        <li>
          <t>Transport Binding.</t>
        </li>
        <li>
          <t>PQ KEM materials.</t>
        </li>
      </ul>
      <t>Exporter values MUST be bound to both identity and transport (Section <xref target="sec-exporters"/>).</t>
      <t>At a high level, PQ hybrid KEM inputs augment the TLS 1.3 key schedule:</t>
      <figure anchor="eq-shared-secret">
        <name>Hybrid shared secret extraction.</name>
        <artwork><![CDATA[
shared_secret = HKDF-Extract(kem_secret || ecdh_secret)
]]></artwork>
      </figure>
      <t>This equation shows the hybrid extraction step that combines KEM and ECDH inputs.</t>
      <t>AEAD algorithms used with TLS-DPA MUST follow their specification-defined tag lengths. Tags MUST NOT be truncated below 96 bits, and 128-bit tags SHOULD be preferred where supported.</t>
    </section>
    <section anchor="extensions">
      <name>Transport Binding Extensions</name>
      <t>
        This section carries the handshake extensions that bind the core TLS-DPA semantics into the transcript.
        Baseline interoperable behaviour requires <tt>tlsdpa_service_identity</tt> and
        <tt>tlsdpa_transport_binding</tt>.
        The <tt>tlsdpa_pq_kem_params</tt> extension is required when a negotiated deployment profile enables
        post-quantum or hybrid KEM operation.
      </t>
      <t>
        The extension semantics in this section are normative where baseline interoperability requires them, but the
        example code points and C-like structures are illustrative and intended for experimentation. This draft does
        not request IANA allocations. Where appropriate, implementations may use private-use ranges or negotiated
        profiles while preserving the semantics defined here.
      </t>
      <section anchor="sec-service-identity">
        <name>tlsdpa_service_identity</name>
        <t>The <tt>tlsdpa_service_identity</tt> extension carries the Service Identity to which the TLS-DPA handshake is bound. For experimentation, this document uses an example private-use code point value (0xFE01); deployments MAY select alternative values by profile.</t>
        <figure anchor="fig-ext-service-identity">
          <name>Service Identity extension structure (informative C-like syntax).</name>
          <artwork><![CDATA[
extension_type = 0xFE01

struct {
    ServiceIdentityType identity_type;
    opaque identity_value<1..2^16-1>;
} ServiceIdentity;

enum {
    dns_name(0),
    uzp_cid(1),
    uzp_eid(2),
    uzpif_selector(3),
    (255)
} ServiceIdentityType;
]]></artwork>
        </figure>
        <t>This figure shows the fields carried in the Service Identity extension.</t>
        <t>The client MUST send exactly one Service Identity. The server MUST validate it according to its type (Section <xref target="sec-service-validation"/>).</t>
      </section>
      <section anchor="sec-transport-binding">
        <name>tlsdpa_transport_binding</name>
        <t>The <tt>tlsdpa_transport_binding</tt> extension binds the handshake transcript to an underlying transport identifier and transport class. For experimentation, this document uses an example private-use code point value (0xFE02); deployments MAY select alternative values by profile.</t>
        <figure anchor="fig-ext-transport-binding">
          <name>Transport Binding extension structure (informative C-like syntax).</name>
          <artwork><![CDATA[
extension_type = 0xFE02

struct {
    opaque transport_id<1..32>;
    uint8  transport_class;   /* 0=TCP, 1=QUIC, 2=UZP */
    opaque transport_params<0..256>;
} TransportBinding;
]]></artwork>
        </figure>
        <t>This figure shows the fields used to bind the handshake to a transport identifier and class.</t>
        <t>For UZP, <tt>transport_id</tt> MUST contain the UZP SessionID. For QUIC, it SHOULD contain the QUIC Connection ID <xref target="RFC9000"/>.</t>
      </section>
      <section anchor="sec-pq-kem-params">
        <name>tlsdpa_pq_kem_params</name>
        <t>The <tt>tlsdpa_pq_kem_params</tt> extension carries the list of acceptable KEM schemes and related profile parameters. For experimentation, this document uses an example private-use code point value (0xFE03); deployments MAY select alternative values by profile.</t>
        <figure anchor="fig-ext-pq-kem-params">
          <name>PQ KEM parameters extension structure (informative C-like syntax).</name>
          <artwork><![CDATA[
extension_type = 0xFE03

struct {
    KEMScheme kem_list<2..2^8-1>;
} PQKemParams;

enum {
    x25519(0),
    kyber768(1),
    hybrid_x25519_kyber768(2),
    (255)
} KEMScheme;
]]></artwork>
        </figure>
        <t>This figure enumerates the acceptable KEM schemes and profile parameters.</t>
        <t>The client proposes a list of acceptable KEM schemes. The selected scheme feeds into the key schedule.</t>
      </section>
    </section>
    <section anchor="transcript-hashing-rules">
      <name>Transcript Hashing Rules</name>
      <t>New transcript components MUST be inserted as follows:</t>
      <figure anchor="fig-transcript-hash">
        <name>Transcript hashing with identity and transport binding (illustrative).</name>
        <artwork><![CDATA[
th = Hash(ClientHello
          || ServiceIdentity
          || TransportBinding
          || PQKemParams
          || ServerHello
          || ... )
]]></artwork>
      </figure>
      <t>This figure shows where the new identity and transport inputs are inserted into the transcript hash.</t>
      <t>Hash mismatches MUST abort the handshake with <tt>illegal_transport_binding</tt> or <tt>identity_mismatch</tt> (Section <xref target="sec-alerts"/>).</t>
    </section>
    <section anchor="sec-exporters">
      <name>Key Schedule and Exporters</name>
      <t>PQ hybrid KEM inputs augment the TLS 1.3 key schedule as:</t>
      <figure anchor="fig-exporter-shared-secret">
        <name>Hybrid shared secret extraction (illustrative).</name>
        <artwork><![CDATA[
shared_secret = HKDF-Extract(kem_secret || ecdh_secret)
]]></artwork>
      </figure>
      <t>This figure shows the shared secret input used for exporter derivation.</t>
      <t>Exporter keys MUST incorporate identity and transport bindings.</t>
      <section anchor="sec-exporter-binding-reqs">
        <name>Exporter Binding Requirements</name>
        <t>TLS-DPA exporters MUST include:</t>
        <ul>
          <li>
            <t>Service Identity (SID).</t>
          </li>
          <li>
            <t>Transport Binding (TB).</t>
          </li>
          <li>
            <t>PQ KEM scheme identifier.</t>
          </li>
          <li>
            <t>UZP SessionID (if transport_class = UZP).</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-exporter-label-structure">
        <name>Exporter Label Structure</name>
        <figure anchor="fig-exporter-label">
          <name>Exporter label structure (illustrative).</name>
          <artwork><![CDATA[
label = "tlsdpa exporter" || 0x00 ||
  identity_type || transport_class
]]></artwork>
        </figure>
        <t>This figure shows the label composition that binds exporter output to identity and transport.</t>
        <t>where identity_type is from ServiceIdentityType, and transport_class is from TransportBinding.</t>
      </section>
      <section anchor="sec-exporter-context-structure">
        <name>Exporter Context Structure</name>
        <figure anchor="fig-exporter-context">
          <name>ExporterContext structure (informative C-like syntax).</name>
          <artwork><![CDATA[
struct {
    opaque sid_hash[32];      /* BLAKE3-256 of Service Identity */
    opaque tb_hash[32];       /* BLAKE3-256 of TransportBinding */
    opaque kem_id[1];         /* selected KEM scheme */
} ExporterContext;
]]></artwork>
        </figure>
        <t>This figure shows the exporter context fields derived from Service Identity, TransportBinding, and the selected KEM.</t>
      </section>
      <section anchor="sec-exporter-example">
        <name>Example Exporter Computation</name>
        <figure anchor="fig-exporter-computation">
          <name>Example exporter computation (illustrative).</name>
          <artwork><![CDATA[
shared = HKDF-Extract(kem_secret || ecdh_secret);
ctx = ExporterContext(sid_hash, tb_hash, kem_id);
key = HKDF-Expand(shared, label, ctx, outlen);
]]></artwork>
        </figure>
        <t>This figure summarizes the exporter computation flow from shared secret to derived key.</t>
      </section>
    </section>
    <section anchor="handshake-diagrams">
      <name>Handshake Diagrams</name>
      <section anchor="sec-uzp-flight-diagram">
        <name>Full UZP Flight Diagram</name>
        <t><xref target="fig-uzp-flight"/> provides an illustrative end-to-end view of a TLS-DPA handshake relayed via a rendezvous node (RN) in a UZP fabric. The RN forwards handshake flights without decrypting them. Binding ensures the RN cannot replay or modify flows undetected.</t>
        <figure anchor="fig-uzp-flight">
          <name>TLS-DPA handshake relayed via an RN, with end-to-end protection over the ZPIT (illustrative).</name>
          <artwork><![CDATA[
EP-Client             RN                EP-Server
    |                 |                      |
    |---- CH1: ClientHello(SID,TB,PQ) ------>|                      |
    |                 |--- CH1' (fwd) ----------------------------->|
    |                 |<-- SH1: ServerHello(PQ,TB) -----------------|
    |<--- SH1' (fwd) -|                      |
    |---- CH2: EncryptedExtensions --------->|                      |
    |                 |--- CH2' (fwd) ----------------------------->|
    |                 |<-- EE2/Cert/Finished -----------------------|
    |<--- EE2'/Cert'/Finished' --------------|                      |
    |<==== Finished + Encrypted App Data ===>|
]]></artwork>
        </figure>
        <t>This figure traces the RN-relayed handshake flights while the endpoints retain end-to-end protection.</t>
        <t>Where:</t>
        <ul>
          <li>
            <t>SID: Service Identity.</t>
          </li>
          <li>
            <t>TB: Transport Binding (UZP SessionID mandatory).</t>
          </li>
          <li>
            <t>PQ: PQ KEM parameters.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-generalised-flow">
        <name>Generalised TLS-DPA Flow</name>
        <t>Figure <xref target="fig-generalised-flow"/> shows a generalised view of the handshake and the role of a transport layer that relays flights but does not decrypt them.</t>
        <figure anchor="fig-generalised-flow">
          <name>Generalised TLS-DPA handshake layers (illustrative).</name>
          <artwork><![CDATA[
Client          Transport Layer          Server
  |-- ClientHello(SID) -->|                    |
  |                       |-- CH fwd --------->|
  |                       |<-- ServerHello ----|
  |<-- ServerHello -------|                    |
  |-- EncryptedExtensions>|                    |
  |<-- Certificate, Finished ------------------|
  |-- Finished / App Data -------------------->|
]]></artwork>
        </figure>
        <t>This figure shows the transport relay separating TLS-DPA endpoints while preserving end-to-end security.</t>
        <ul>
          <li>
            <t>SID is carried in the ClientHello.</t>
          </li>
          <li>
            <t>The transport layer relays flights but does not decrypt them.</t>
          </li>
          <li>
            <t>End-to-end Finished confirms key schedule integrity.</t>
          </li>
        </ul>
      </section>
      <section anchor="rn-observation-and-channel-truth">
        <name>RN Observation and Channel Truth</name>
        <t>
          Even when TLS-DPA is carried over a rendezvous path or a stitched UZP channel, authenticated channel truth
          is bound to endpoint identity inputs, transcript hashing rules (Section
          <xref target="transcript-hashing-rules"/>), transport binding, and Finished verification rather than to RN
          observation of packets, flow identifiers, or relay placement.
        </t>
        <t>
          A rendezvous node or other relay MAY observe encrypted flights, timing, replay-related tuples, or local
          forwarding metadata, but it MUST NOT be treated as an authoritative source for Service Identity validation,
          transcript validity, or endpoint authentication state.
          The only authoritative handshake truth is the endpoint-generated material that validates under the transcript
          and Service Identity rules in Section <xref target="sec-service-validation"/>.
        </t>
        <t>
          Consequently, relay presence, stitched-path continuity, or RN-local telemetry MUST NOT upgrade, override, or
          substitute for endpoint-authenticated TLS-DPA state.
          Such observations may be useful for policy enforcement, replay suppression, or audit, but they are not trust
          anchors.
        </t>
      </section>
    </section>
    <section anchor="sec-service-validation">
      <name>Service Identity Validation</name>
      <section anchor="sec-service-validation-dns">
        <name>DNS</name>
        <t>DNS-based identities MUST be validated according to <xref target="RFC6125"/>.</t>
      </section>
      <section anchor="sec-service-validation-uzp-cid">
        <name>UZP CID</name>
        <t>The CID MUST equal BLAKE3-256(server_longterm_public_key).</t>
      </section>
      <section anchor="sec-service-validation-uzp-eid">
        <name>UZP EID</name>
        <t>The EID MUST match the server-presented ephemeral identity for this session.</t>
      </section>
      <section anchor="sec-service-validation-uzpif-selector">
        <name>UZPIF Selector</name>
        <t>UZPIF selectors MUST be resolved via Pantheon services, federated identity services, or local cached mappings consistent with local trust policy, Section <xref target="identity-authority-model"/>, and <xref target="UZPIF"/>.</t>
      </section>
      <section anchor="sec-service-validation-failure">
        <name>Failure Handling</name>
        <t>If any validation fails, the implementation MUST abort the handshake with an appropriate alert (Section <xref target="sec-alerts"/>):</t>
        <ul>
          <li>
            <t>identity_mismatch;</t>
          </li>
          <li>
            <t>illegal_transport_binding;</t>
          </li>
          <li>
            <t>pq_required.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-alerts">
      <name>New Alerts</name>
      <t>TLS-DPA defines the following experimental alert descriptions for use in deployments and interoperability testing. The numeric values shown are illustrative and are not requested for IANA allocation by this draft.</t>
      <figure anchor="fig-alerts">
        <name>Experimental alert descriptions (illustrative C-like syntax).</name>
        <artwork><![CDATA[
enum {
    illegal_transport_binding(200),
    identity_mismatch(201),
    pq_required(202),
    grant_invalid(203),
    grant_expired(204),
    (255)
} AlertDescription;
]]></artwork>
      </figure>
      <t>This figure lists the experimental alert codes defined by TLS-DPA.</t>
    </section>
    <section anchor="applicability-uzp">
      <name>UZP / UZPIF Applicability and Profile</name>
      <t>
        This section defines the UZP / UZPIF profile for TLS-DPA. It is required only for deployments that carry
        TLS-DPA over UZP or consume UZPIF trust artefacts; it does not redefine the core handshake semantics.
      </t>
      <t>TLS-DPA maps naturally to UZP by binding:</t>
      <ul>
        <li>
          <t>tlsdpa_service_identity -> UZP CID/EID.</t>
        </li>
        <li>
          <t>tlsdpa_transport_binding -> UZP SessionID.</t>
        </li>
        <li>
          <t>PQ capability and fallback -> Pantheon Grants.</t>
        </li>
      </ul>
      <t>UZP's multi-step rendezvous and authentication model, together with the UZPIF framework defined in <xref target="UZP"/> and <xref target="UZPIF"/>, provides:</t>
      <ul>
        <li>
          <t>stronger pre-TLS identity establishment;</t>
        </li>
        <li>
          <t>reduced man-in-the-middle risk;</t>
        </li>
        <li>
          <t>deterministic channel binding for TLS-DPA.</t>
        </li>
      </ul>
      <t>
        This section and Section <xref target="early-data"/> are normative only for deployments that carry TLS-DPA
        over UZP or consume UZPIF trust artefacts. They do not redefine the core handshake semantics; they constrain
        how those semantics are applied in zero-port fabrics.
      </t>
    </section>
    <section anchor="early-data">
      <name>Early Data (0-RTT)</name>
      <t>Over UZP:</t>
      <ul>
        <li>
          <t>early data is transmitted inside a ZPIT;</t>
        </li>
        <li>
          <t>replay protection uses CID/EID and Pantheon Grant metadata;</t>
        </li>
        <li>
          <t>early data MUST NOT be used if Pantheon Grants specify "no-replay".</t>
        </li>
      </ul>
      <section anchor="sec-rn-replay-detection">
        <name>RN Replay Detection</name>
        <t>The RN MUST maintain a sliding replay cache keyed on:</t>
        <figure anchor="fig-rn-replay-key">
          <name>Replay cache key tuple (illustrative).</name>
          <artwork><![CDATA[
grant_nonce || CID || EID || SessionID
]]></artwork>
        </figure>
        <t>This figure shows the tuple the RN uses to index replay state.</t>
        <t>Entries MUST be retained for at least twice the maximum ZPIT propagation delay. Longer retention is permitted. If a duplicate early-flight tuple is observed, the RN MUST drop it silently.</t>
      </section>
      <section anchor="sec-endpoint-replay-detection">
        <name>Endpoint Replay Detection</name>
        <t>Endpoints MUST track Grant nonce values associated with early data. For each:</t>
        <figure anchor="fig-endpoint-replay-tuple">
          <name>Endpoint replay tuple (illustrative).</name>
          <artwork><![CDATA[
(grant_nonce, CID, EID, ticket_age)
]]></artwork>
        </figure>
        <t>This figure shows the endpoint tuple tracked to detect early data replay.</t>
        <t>If an identical tuple is received twice within the resumption window, the endpoint MUST abort with illegal_parameter.</t>
      </section>
      <section anchor="sec-grantnonce-interaction">
        <name>Grant Nonce Interaction</name>
        <t>Pantheon Grant issuers MUST issue or bind a fresh Grant nonce per resumed or 0-RTT-enabled session. The nonce MUST be bound into the handshake transcript.</t>
      </section>
      <section anchor="sec-0rtt-uzp-rebinds">
        <name>0-RTT over UZP Rebinds</name>
        <t>If the UZP SessionID changes during path migration, 0-RTT data MUST be rejected unless the new SessionID is verifiably linked to the previous one via Pantheon metadata.</t>
      </section>
    </section>
    <section anchor="optional-experimental-extensions">
      <name>Optional and Experimental Extensions</name>
      <t>
        The extensions in this section are not required for baseline interoperability.
        They MUST NOT alter authentication, authorisation, transcript truth, or trust-anchor decisions unless a later
        deployment profile explicitly upgrades them.
      </t>
      <section anchor="sec-specification-origin-id">
        <name>tlsdpa_specification_origin_id</name>
        <t>The <tt>tlsdpa_specification_origin_id</tt> extension carries an OPTIONAL Specification-Origin Identifier for attribution metadata only. For experimentation, this document uses an example private-use code point value (0xFE04); deployments MAY select alternative values by profile.</t>
        <figure anchor="fig-ext-specification-origin-id">
          <name>Specification-Origin Identifier extension structure (informative C-like syntax).</name>
          <artwork><![CDATA[
extension_type = 0xFE04

struct {
    opaque origin_id<1..255>;
    opaque origin_uri<0..1024>;
} SpecificationOriginIdentifier;
]]></artwork>
        </figure>
        <t>This extension is non-authoritative and pure metadata. Endpoints MUST NOT treat it as an authentication, authorisation, or trust-anchor input.</t>
        <t>Endpoints MAY log or display this metadata for attribution, but handshake success and identity validation MUST be independent of this extension.</t>
      </section>
    </section>
    <section anchor="threat-model">
      <name>Threat Model</name>
      <t>TLS-DPA is designed to defend against:</t>
      <ul>
        <li>
          <t>passive eavesdropping;</t>
        </li>
        <li>
          <t>active man-in-the-middle;</t>
        </li>
        <li>
          <t>downgrade attacks on both classical and PQ negotiation;</t>
        </li>
        <li>
          <t>identity spoofing;</t>
        </li>
        <li>
          <t>transport reattachment and rebinding attacks across overlays.</t>
        </li>
      </ul>
      <t>In UZP deployments, RN visibility is expected to be limited primarily to flow identifiers, relay context, and encrypted envelopes. Plaintext application data remains protected, but the exact visibility of Service Identity and related metadata depends on the transport profile and any additional confidentiality mechanisms in use.</t>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <ul>
        <li>
          <t>Middleboxes SHOULD NOT assume fixed IP/port semantics for TLS-DPA channels.</t>
        </li>
        <li>
          <t>Monitoring SHOULD use exporter-based identity hooks rather than IP/port heuristics <xref target="NIST-SP800-207"/>.</t>
        </li>
        <li>
          <t>Session resumption MUST accommodate overlay rebinds (e.g., QUIC Connection IDs, UZP SessionIDs).</t>
        </li>
        <li>
          <t>PQ keys and related metadata SHOULD be logged where required for compliance, in line with local policy.</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TLS-DPA implementations MUST:</t>
      <ol>
        <li>
          <t>ensure identity and transport bindings are transcript-authentic;</t>
        </li>
        <li>
          <t>authenticate PQ hybrid negotiation and detect downgrades;</t>
        </li>
        <li>
          <t>suppress downgrade unless explicitly permitted by policy;</t>
        </li>
        <li>
          <t>minimise metadata exposure, especially in early flights;</t>
        </li>
        <li>
          <t>prevent unauthorised reattachment across transports or overlays.</t>
        </li>
        <li>
          <t>apply revocation policy without assuming a single global revocation authority.</t>
        </li>
      </ol>
      <t>The threat model for TLS-DPA is discussed in Section <xref target="threat-model"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document does not request any IANA actions.</t>
      <t>The example code points used for extension_type values and alert descriptions in this document are intended for experimentation (for example in private-use or locally coordinated deployments). Any future request for code point allocation is out of scope for this draft.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2119.xml"/>
      <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8174.xml"/>
      <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6125.xml"/>
    </references>
    <references>
      <name>Informative References</name>
      <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8446.xml"/>
      <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.9000.xml"/>
      <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7401.xml"/>
      <reference anchor="UZP">
        <front>
          <title>UZP: Universal Zero-Port Transport Protocol</title>
          <author fullname="Benjamin Anthony Fisher"/>
          <date/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-dpa-uzp-transport"/>
      </reference>

      <reference anchor="UZPIF">
        <front>
          <title>Universal Zero-Port Interconnect Framework (UZPIF)</title>
          <author fullname="Benjamin Anthony Fisher"/>
          <date/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-dpa-uzpif-framework"/>
      </reference>
      <reference anchor="NIST-SP800-207" target="https://doi.org/10.6028/NIST.SP.800-207">
        <front>
          <title>Zero Trust Architecture</title>
          <author fullname="Scott Rose"/>
          <author fullname="Oliver Borchert"/>
          <author fullname="Stu Mitchell"/>
          <author fullname="Sean Connelly"/>
          <date year="2019"/>
        </front>
        <seriesInfo name="NIST" value="SP 800-207"/>
      </reference>
      <reference anchor="NIST-PQC" target="https://csrc.nist.gov/Projects/post-quantum-cryptography">
        <front>
          <title>NIST Post-Quantum Cryptography Standardization: Fourth Round Candidate Algorithms</title>
          <author fullname="National Institute of Standards and Technology"/>
          <date year="2022"/>
        </front>
      </reference>
    </references>
    <section anchor="acknowledgements" numbered="false" toc="exclude">
      <name>Acknowledgements</name>
      <t>The author thanks colleagues and early reviewers for discussions on identity-first security, transport binding, and post-quantum transition models. Any errors or omissions remain the author's responsibility.</t>
    </section>
  </back>
</rfc>
