<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ma-cfrg-looma-00" category="info" consensus="true" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Looma">Looma: Low-Latency Post-Quantum Authentication for TLS 1.3 in Datacenters</title>
    <seriesInfo name="Internet-Draft" value="draft-ma-cfrg-looma-00"/>
    <author initials="X." surname="Ma" fullname="Xinshu Ma">
      <organization>University of Edinburgh</organization>
      <address>
        <email>x.ma@ed.ac.uk</email>
      </address>
    </author>
    <author initials="M." surname="Honda" fullname="Michio Honda">
      <organization>University of Edinburgh</organization>
      <address>
        <email>michio.honda@ed.ac.uk</email>
      </address>
    </author>
    <author initials="C." surname="Perkins" fullname="Colin Perkins">
      <organization>University of Glasgow</organization>
      <address>
        <email>csp@csperkins.org</email>
      </address>
    </author>
    <date year="2026" month="March" day="02"/>
    <workgroup>Crypto Forum</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 52?>

<t>Post-quantum (PQ) authentication in TLS 1.3 can add tens to hundreds of microseconds of
handshake processing time. In datacenters, where mutual authentication is
mandatory, this authentication cost becomes a dominant contributor to end-to-end
request latency, particularly when connections are short-lived and handshake
rates are high.</t>
      <t>This document specifies Looma, an online/offline authentication architecture integrated
into the TLS 1.3 handshake. Looma replaces the on-path, per-handshake PQ signature with
a fast, one-time signature over the TLS transcript and moves expensive work (including
the multi-use PQ signature) to an asynchronous background plane. Looma includes a
fallback strategy to preserve correct authentication when the verifier does not have the
peer's one-time verification key cached.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Crypto Forum Research Group mailing list (cfrg@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cfrg"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/uoenoplab/looma-id"/>.</t>
    </note>
  </front>
  <middle>
    <?line 67?>

<section anchor="status-of-this-memo">
      <name>Status of This Memo</name>
      <t>This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.</t>
      <t>Internet-Drafts are working documents of the Internet Engineering Task Force (IETF).
Note that other groups may also distribute working documents as Internet-Drafts.
The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.</t>
      <t>Internet-Drafts are draft documents valid for a maximum of six months and may be updated,
replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts
as reference material or to cite them other than as "work in progress."</t>
    </section>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>TLS 1.3 authentication relies on digital signatures over the handshake transcript in the
CertificateVerify message <xref target="RFC8446"/>. For post-quantum migration, widely deployed
candidates (e.g., Dilithium and Falcon) incur higher signing costs than
classical signatures.</t>
      <t>In cloud environments these costs become a serious deployment barrier. Modern cloud applications are built from microservices and serverless functions. Each inter-service RPC triggers a fresh TLS handshake. Containers and pods are frequently created and destroyed, rendering session resumption ineffective. Service-mesh sidecars (Istio, Linkerd, etc.) add extra mTLS hops along every path. The resulting handshake rate is orders of magnitude higher than on the public Internet.</t>
      <t>Datacenter networks are engineered for sub-50 µs fabric latency; therefore the dominant delay is host cryptographic processing. Mutual authentication (mTLS) is mandatory inside the trust boundary to prevent unauthorized service-to-service access. In mTLS both endpoints sign and verify, doubling the authentication cost compared with server-only TLS. When post-quantum signatures are used, authentication can consume 54–70 % of total handshake latency (see <xref target="LoomaNDSS26"/> for measurements).</t>
      <t>Existing accelerations do not close this gap:</t>
      <ul spacing="normal">
        <li>
          <t>Protocol optimisations (KEMTLS) replaces signatures with KEMs, reducing the bandwidth cost during handshake, which is especially helpful in the Internet where RTT dominates the latency. However, the on-path KEM-based authentication time cost is still tens of microseconds. Besides, for mTLS case, KEMTLS requires extra round-trip time.</t>
        </li>
        <li>
          <t>Cryptographic optimisations focus primarily on PQ key exchange; authentication remains the bottleneck for mTLS.</t>
        </li>
      </ul>
      <t>Looma targets this setting by splitting PQ authentication into:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Foreground plane (on-path)</strong>: performs per-handshake fast signing and verification.</t>
        </li>
        <li>
          <t><strong>Background plane (off-path)</strong>: precomputes and distributes one-time verification (i.e., public) keys authenticated by a long-term PQ signature.</t>
        </li>
      </ul>
      <t>The Looma design and evaluation appear in <xref target="LoomaNDSS26"/>, and its
proof-of-concept implementation is available at
https://github.com/uoenoplab/looma.</t>
      <t>This document is an initial draft submitted for discussion and to allow review
of the use of cryptographic techniques by CFRG and the broader protocol design
by the TLS community. The authors welcome feedback on both the use of post
quantum cryptographic primitives, on their integration into TLS, and more
broadly on the design goals</t>
      <section anchor="goals">
        <name>Goals</name>
        <t>Looma is designed to:</t>
        <ul spacing="normal">
          <li>
            <t>Reduce the on-path computational cost of PQTLS 1.3 authentication.</t>
          </li>
          <li>
            <t>Preserve the authentication semantics of PQTLS 1.3 (identity bound to certificate keys).</t>
          </li>
          <li>
            <t>Minimize additional trust in auxiliary infrastructure (e.g., key distribution service).</t>
          </li>
        </ul>
      </section>
      <section anchor="non-goals">
        <name>Non-goals</name>
        <t>This document does not specify:</t>
        <ul spacing="normal">
          <li>
            <t>A new certificate format. Looma uses existing X.509 certificates and CA workflows.</t>
          </li>
          <li>
            <t>A new key exchange. Looma is orthogonal to ECDHE, hybrid key exchange, or KEM-based
approaches.</t>
          </li>
          <li>
            <t>Session resumption behavior. PSK resumption handshakes do not use CertificateVerify
and are out of scope.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
      <t>This document uses the following terms:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Endpoint</strong>: a PQTLS client or server participating in the handshake.</t>
        </li>
        <li>
          <t><strong>Long-term signing key (LT key)</strong>: a multi-use PQ key pair (e.g., Dilithium-2).
The LT public key is bound to the endpoint identity via an X.509 certificate.</t>
        </li>
        <li>
          <t><strong>One-time signature (OTS)</strong>: a signature scheme intended to sign at most one message
per key pair. Looma uses WOTS+.</t>
        </li>
        <li>
          <t><strong>WOTS+ key pair</strong>: an OTS signing key <tt>SK_ots</tt> and verification key <tt>PK_ots</tt>.</t>
        </li>
        <li>
          <t><strong>KeyDist</strong>: a repository service used to publish OTS verification keys authenticated
under the LT key. KeyDist is not trusted for integrity; endpoints verify LT signatures.</t>
        </li>
        <li>
          <t><strong>Cache hit / miss</strong>: whether the verifier has a validated <tt>PK_ots</tt> for the peer at
handshake time.</t>
        </li>
      </ul>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>Looma adapts the Even-Goldreich-Micali online/offline paradigm to TLS 1.3 authentication:</t>
      <ol spacing="normal" type="1"><li>
          <t>Offline: an endpoint generates a batch of WOTS+ key pairs and authenticates them using
a long-term PQ signature over a Merkle tree root;</t>
        </li>
        <li>
          <t>Online: during the TLS handshake, the endpoint signs the TLS CertificateVerify input
using a fresh WOTS+ key <tt>SK_ots</tt>. The verifier validates the WOTS+ signature using a cached
<tt>PK_ots</tt> or falls back to an authenticated Merkle proof.</t>
        </li>
      </ol>
      <t>Since this online/offline paradigm only works when the verifier has the right verification key, the fallback strategies are required when there is no validate key at the server side. Two fallback deployment modes are supported:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Dual-signature mode</strong>: each handshake carries enough data for verification without any
prior cached verification key (higher bandwidth, simple behavior logic).</t>
        </li>
        <li>
          <t><strong>Hybrid mode</strong>: the server advertises a compact hint indicating which client keys are
cached; the client includes fallback material only on cache miss (lower bandwidth).</t>
        </li>
      </ul>
    </section>
    <section anchor="cryptographic-building-blocks">
      <name>Cryptographic Building Blocks</name>
      <section anchor="long-term-pq-signature">
        <name>Long-term PQ signature</name>
        <t>Looma assumes a non-hash-based secure multi-use signature scheme (e.g., Dilithium-2, Falcon-512). The LT public key is authenticated in the usual TLS way via X.509 certificate validation. It will also be authenticated during OTS verification key distribution.</t>
        <t>This document describes one instantiation aligned with <xref target="LoomaNDSS26"/>:
Dilithium-2 as the LT signature scheme.</t>
      </section>
      <section anchor="wots-winternitz-one-time-signature-plus">
        <name>WOTS+ (Winternitz One-Time Signature Plus)</name>
        <t>Looma uses WOTS+ as the OTS. WOTS+ keys are one-time: an endpoint MUST NOT sign more than one
distinct CertificateVerify input with the same <tt>SK_ots</tt>.</t>
        <section anchor="parameters">
          <name>Parameters</name>
          <t>To avoid ambiguity, this document defines a single mandatory parameter set (other sets MAY
be specified by future documents).</t>
          <t>The mandatory set matches the Looma implementation evaluated in <xref target="LoomaNDSS26"/>:</t>
          <ul spacing="normal">
            <li>
              <t><tt>n = 32</tt> bytes (hash output length).</t>
            </li>
            <li>
              <t>Winternitz parameter <tt>w = 4</tt>.</t>
            </li>
            <li>
              <t><tt>ℓ = 133</tt> chains (derived by WOTS+ encoding for <tt>n=32, w=4</tt>).</t>
            </li>
          </ul>
          <t>The hash function used inside WOTS+ is denoted <tt>H_ots</tt>. This document does not require a
specific <tt>H_ots</tt> at the protocol level; however, the reference implementation uses Haraka
(and a SIMD variant) for performance as described in <xref target="LoomaNDSS26"/>.</t>
        </section>
        <section anchor="nonce">
          <name>Nonce</name>
          <t>The WOTS+ signature is computed over the TLS CertificateVerify input (see Section 4.4.3 of
<xref target="RFC8446"/>) and an associated nonce <tt>r</tt>. The nonce serves as domain separation and helps
avoid accidental cross-protocol reuse. The nonce MUST be unique per WOTS+ signing key.</t>
        </section>
      </section>
    </section>
    <section anchor="looma-authentication-architecture">
      <name>Looma Authentication Architecture</name>
      <section anchor="key-provisioning-and-authentication-background-plane">
        <name>Key Provisioning and Authentication (Background Plane)</name>
        <t>This section defines the data produced off-path and consumed by the handshake.</t>
        <section anchor="key-records">
          <name>Key records</name>
          <t>An endpoint periodically produces a <strong>key record</strong> containing a batch of OTS verification keys.
A key record MUST include:</t>
          <ul spacing="normal">
            <li>
              <t><tt>owner_id</tt>: an identifier for the endpoint identity that is consistent with the endpoint
certificate identity (see <xref target="owner-id"/>).</t>
            </li>
            <li>
              <t><tt>epoch</tt>: a monotonically increasing identifier scoped to <tt>(owner_id, verifier_group_id)</tt>.</t>
            </li>
            <li>
              <t><tt>verifier_group_id</tt>: a locally defined label identifying which peer set this batch targets.</t>
            </li>
            <li>
              <t><tt>valid_from</tt>, <tt>valid_to</tt>: validity interval for the OTS keys in this record.</t>
            </li>
            <li>
              <t><tt>merkle_root</tt>: root of the Merkle tree over OTS public keys.</t>
            </li>
            <li>
              <t><tt>sig_lt</tt>: LT signature authenticating the key record metadata and <tt>merkle_root</tt>.</t>
            </li>
            <li>
              <t><tt>pk_list</tt> (OPTIONAL): list of OTS public keys as the distribution mechanism delivers full
keys; this document assumes full keys are distributable but does
not mandate KeyDist internal format.</t>
            </li>
          </ul>
          <t>Key record authentication:</t>
          <ul spacing="normal">
            <li>
              <t>The producer MUST compute <tt>sig_lt = Sign_lt(H(record_fields), SK_lt)</tt>, where <tt>record_fields</tt>
includes the items above, in a canonical encoding.</t>
            </li>
            <li>
              <t>A consumer MUST verify <tt>sig_lt</tt> under the LT public key from the producer's validated
certificate, before accepting any OTS keys derived from the record.</t>
            </li>
          </ul>
          <section anchor="owner-id">
            <name>owner-id</name>
            <t><tt>owner_id</tt> is used as a stable index for caching the peer's OTS keys.
<tt>owner_id</tt> MUST be bound to the peer identity authenticated by TLS certificate validation.</t>
            <t>RECOMMENDED: <tt>owner_id = SHA-256(SPKI)</tt> where <tt>SPKI</tt> is the DER-encoded SubjectPublicKeyInfo
of the LT public key in the certificate. Other constructions MAY be used if they provide a
collision-resistant, stable binding to the LT key.</t>
          </section>
        </section>
        <section anchor="merkle-tree-construction">
          <name>Merkle tree construction</name>
          <t>An endpoint constructs a binary Merkle tree over the batch of OTS public keys. The leaf value
for key <tt>i</tt> is:</t>
          <t><tt>leaf_i = H_leaf( encode(PK_ots_i) )</tt></t>
          <t>where <tt>H_leaf</tt> is a collision-resistant hash and <tt>encode(PK_ots_i)</tt> is the canonical encoding
of the OTS public key for the parameter set.</t>
          <t>The tree root is <tt>merkle_root</tt>. The record MUST allow a verifier to validate an inclusion proof.</t>
          <t>Implementation note (informative): <xref target="LoomaNDSS26"/> evaluates <tt>B = 1024</tt> leaves and 32-byte hash
values, yielding a proof of <tt>log2(B) * 32</tt> bytes (320 bytes).</t>
        </section>
        <section anchor="keydist-behavior">
          <name>KeyDist behavior</name>
          <t>KeyDist is a distribution component that stores and serves key records. This document
treats KeyDist as a repository without trusting it:</t>
          <ul spacing="normal">
            <li>
              <t>KeyDist MAY validate records before storing them, but consumers MUST NOT rely on KeyDist
validation for security.</t>
            </li>
            <li>
              <t>Consumers MUST verify <tt>sig_lt</tt> and associated metadata locally.</t>
            </li>
            <li>
              <t>A compromised KeyDist can cause denial of service (e.g., withholding records), but MUST NOT
enable signature forgery if endpoints follow this specification.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="tls-13-integration-foreground-plane">
        <name>TLS 1.3 Integration (Foreground Plane)</name>
        <t>This section specifies how Looma is carried in TLS 1.3 and how the CertificateVerify message
is generated and verified.</t>
        <section anchor="looma-negotiation">
          <name>Looma negotiation</name>
          <t>Looma is negotiated using the TLS 1.3 <tt>signature_algorithms</tt> extension.</t>
          <ul spacing="normal">
            <li>
              <t>Endpoints that support Looma MUST advertise Looma signature scheme in
<tt>signature_algorithms</tt>.</t>
            </li>
            <li>
              <t>The server selects a Looma scheme in the usual TLS 1.3 way when producing CertificateVerify.</t>
            </li>
            <li>
              <t>Hybrid mode additionally uses a server-to-client hint extension (Section <xref target="hybrid-hint"/>).</t>
            </li>
          </ul>
          <t>If Looma is not negotiated, endpoints MUST use standard TLS 1.3 authentication with the
selected non-Looma signature scheme.</t>
        </section>
        <section anchor="looma-signature-format">
          <name>Looma signature format</name>
          <t>Looma defines a signature wrapper <tt>LoomaSignature</tt> carried in the <tt>CertificateVerify.signature</tt> field.</t>
          <t>All multi-byte integers are network byte order.</t>
          <sourcecode type="text"><![CDATA[
struct {
  uint8  looma_sig_type;    /* 0 = dual, 1 = hybrid_hit,
                             * 2 = hybrid_miss */
  opaque owner_id<0..255>;  /* as defined in Section {#owner-id} */
  opaque pk_id<0..255>;     /* identifies which OTS key is used */
  opaque nonce<0..255>;     /* per-signature nonce r */
  opaque wots_sig<0..2^16-1>;
} LoomaSignature;
]]></sourcecode>
          <t><tt>pk_id</tt> identifies the one-time public key within the producer's current key record. The mapping
of <tt>pk_id</tt> to a concrete key is deployment-specific, but <tt>pk_id</tt> MUST be sufficient for the verifier
to locate the intended cached key or validate it via fallback data.</t>
          <section anchor="dual-signature-mode-loomasigtype-0">
            <name>Dual-signature mode (<tt>looma_sig_type = 0</tt>)</name>
            <t>In dual-signature mode, besides <tt>LoomaSignature</tt>, <tt>fallback</tt> MUST contain:</t>
            <sourcecode type="text"><![CDATA[
struct {
  opaque merkle_root<0..2^16-1>;
  opaque merkle_proof<0..2^16-1>;
  opaque sig_lt<0..2^16-1>;
} LoomaFallbackDual;
]]></sourcecode>
            <t><tt>fallback</tt> is carried in the <tt>CertificateVerify</tt> extension filed.
The verifier uses the peer certificate to obtain <tt>PK_lt</tt> and verify <tt>sig_lt</tt> over the authenticated
root and associated record fields (the record fields MUST be reconstructible or transmitted as part
of the proof bundle in a future version; see Section <xref target="open-issues"/>).</t>
          </section>
          <section anchor="hybrid-hit-mode-loomasigtype-1">
            <name>Hybrid-hit mode (<tt>looma_sig_type = 1</tt>)</name>
            <t>In hybrid-hit mode, <tt>fallback</tt> MUST be empty. The verifier MUST have a cached, validated <tt>PK_ots</tt> for <tt>(owner_id, pk_id)</tt>.</t>
          </section>
          <section anchor="hybrid-miss-mode-loomasigtype-2">
            <name>Hybrid-miss mode (<tt>looma_sig_type = 2</tt>)</name>
            <t>In hybrid-miss mode, <tt>fallback</tt> is identical to <tt>LoomaFallbackDual</tt>.</t>
          </section>
        </section>
        <section anchor="computing-certificateverify">
          <name>Computing CertificateVerify</name>
          <t>TLS 1.3 defines the signed content for CertificateVerify as:</t>
          <ul spacing="normal">
            <li>
              <t>a context string,</t>
            </li>
            <li>
              <t>a separator,</t>
            </li>
            <li>
              <t>and the transcript hash (see Section 4.4.3 of <xref target="RFC8446"/>).</t>
            </li>
          </ul>
          <t>For Looma, the endpoint MUST compute the TLS-defined input bytes exactly as <xref target="RFC8446"/> specifies.
Let that byte string be <tt>cv_input</tt>.</t>
          <t>The endpoint then computes:</t>
          <ul spacing="normal">
            <li>
              <t><tt>wots_sig = WOTS.Sign(cv_input, SK_ots, nonce)</tt></t>
            </li>
          </ul>
          <t>and constructs <tt>LoomaSignature</tt> per the negotiated mode.</t>
          <t>The endpoint MUST ensure one-time use of <tt>SK_ots</tt> and MUST bind the WOTS+ signature to the selected
mode, <tt>owner_id</tt>, <tt>pk_id</tt>, and <tt>nonce</tt> (e.g., by including these fields in <tt>cv_input</tt> via an inner
hash) to prevent substitution attacks. One safe construction is:</t>
          <t><tt>wots_sig = WOTS.Sign( H_bind(owner_id || pk_id || nonce || cv_input), SK_ots )</tt></t>
          <t>where <tt>H_bind</tt> is collision-resistant. The reference design in <xref target="LoomaNDSS26"/> signs the transcript
and carries <tt>(nonce, pk_id)</tt> alongside the signature; this document adopts explicit binding.</t>
        </section>
        <section anchor="verifying-certificateverify">
          <name>Verifying CertificateVerify</name>
          <t>Given <tt>cv_input</tt> and a received <tt>LoomaSignature</tt>, the verifier proceeds as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Determine the <tt>expected_PK_ots</tt>:
              </t>
              <ul spacing="normal">
                <li>
                  <t>If in hybrid-hit mode, look up cached <tt>PK_ots</tt> using <tt>(owner_id, pk_id)</tt>.</t>
                </li>
                <li>
                  <t>Otherwise, validate fallback data:
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>verify <tt>sig_lt</tt> under the peer certificate LT public key,</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <t>Verify <tt>wots_sig</tt> over the bound input described above and derived the <tt>computed_PK_ots</tt>.</t>
            </li>
            <li>
              <t>Enforce one-time use:
              </t>
              <ul spacing="normal">
                <li>
                  <t>If in hybrid-hit mode, check if <tt>computed_PK_ots</tt> is the same as <tt>expected_PK_ots</tt>, and delete cached <tt>expected_PK_ots</tt> if there is a match.</t>
                </li>
                <li>
                  <t>Otherwise, validate that the <tt>computed_PK_ots</tt> is included in <tt>merkle_root</tt> via <tt>merkle_proof</tt>.</t>
                </li>
              </ul>
            </li>
          </ol>
          <t>The verifier MUST ensure that <tt>(owner_id, pk_id)</tt> is not accepted more than once within the applicable validity interval, unless the deployment defines a safe reuse policy (NOT RECOMMENDED).</t>
          <t>If any check fails, the handshake MUST be aborted with an appropriate TLS alert.</t>
        </section>
      </section>
    </section>
    <section anchor="hybrid-hint">
      <name>Hybrid Mode Cache Hint Extension</name>
      <t>In hybrid mode, the server sends a compact hint indicating which client keys are cached, so that
the client can select looma signature type as hybrid_hit vs hybrid-miss.</t>
      <t>This document defines a new TLS extension (type TBD) carried in the <tt>CertificateRequest</tt> message.</t>
      <sourcecode type="text"><![CDATA[
struct {
  uint8  version;
  opaque owner_id_s<0..255>;  /* server owner_id to scope the hint */
  opaque bloom<0..2^16-1>;    /* Bloom filter bitstring */
  uint8  k;                   /* number of hash probes */
} LoomaCacheHint;
]]></sourcecode>
      <t>The Bloom filter represents membership over client identifiers (e.g., client <tt>owner_id</tt> values) for which the server currently has a list of cached <tt>PK_ots</tt>s. The exact element inserted MUST be specified by the deployment; RECOMMENDED is the client's <tt>owner_id</tt>.</t>
      <t>False positives are possible. If the server indicates membership but does not have the key, the server will reject hybrid-hit verification and the connection will fail. See Section <xref target="fallback-on-fp"/> for recovery behavior.</t>
      <section anchor="fallback-and-error-handling">
        <name>Fallback and Error Handling</name>
        <section anchor="cache-miss-behavior">
          <name>Cache miss behavior</name>
          <t>If the verifier does not have the peer <tt>PK_ots</tt> cached:</t>
          <ul spacing="normal">
            <li>
              <t>In dual-signature mode, the verifier uses the fallback bundle.</t>
            </li>
            <li>
              <t>In hybrid mode:
              </t>
              <ul spacing="normal">
                <li>
                  <t>If the client receives a hint indicating miss, it MUST send hybrid-miss (with fallback).</t>
                </li>
                <li>
                  <t>If the client receives a hint indicating hit, it sends hybrid-hit (without fallback).</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="fallback-on-fp">
          <name>False positives and recovery</name>
          <t>If a hybrid-hit handshake fails because the server cannot validate the signature due to missing
cached key (e.g., Bloom false positive), endpoints SHOULD recover by retrying with a full
(non-Looma) TLS 1.3 handshake using standard PQ authentication (e.g., Dilithium-2), or by retrying
hybrid-miss if policy allows.</t>
          <t>This document does not define a new TLS alert. Implementations SHOULD use existing alerts such
as <tt>handshake_failure</tt> or <tt>illegal_parameter</tt> to signal verification failure, consistent with
<xref target="RFC8446"/> behavior.</t>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This section summarizes security arguments aligned with <xref target="LoomaNDSS26"/>.</t>
      <section anchor="signature-unforgeability">
        <name>Signature unforgeability</name>
        <t>An adversary that forges a Looma CertificateVerify must either:</t>
        <ul spacing="normal">
          <li>
            <t>forge the LT PQ signature authenticating <tt>merkle_root</tt>, or</t>
          </li>
          <li>
            <t>forge a WOTS+ signature under an authenticated one-time public key, or</t>
          </li>
          <li>
            <t>break collision resistance / second-preimage resistance needed by the Merkle tree and WOTS+.</t>
          </li>
        </ul>
        <t>Assuming EUF-CMA security of the LT PQ signature and the security properties of WOTS+ and underlying
hash functions, Looma provides transcript authentication comparable to the baseline TLS 1.3 signature
scheme, with the additional requirement that one-time keys are not reused.</t>
      </section>
      <section anchor="one-time-key-reuse">
        <name>One-time key reuse</name>
        <t>Reusing a WOTS+ signing key across two different <tt>cv_input</tt> values can enable forgeries. Therefore:</t>
        <ul spacing="normal">
          <li>
            <t>Signers MUST enforce strict one-time use.</t>
          </li>
          <li>
            <t>Verifiers SHOULD track used <tt>(owner_id, pk_id)</tt> values within the key validity interval.</t>
          </li>
          <li>
            <t>Deployments MUST provision enough keys for the expected handshake rate and set key expiration to bound state.</t>
          </li>
        </ul>
      </section>
      <section anchor="binding-to-certificate-identity">
        <name>Binding to certificate identity</name>
        <t>Looma's OTS keys MUST be bound to the identity authenticated by the certificate. This document
achieves binding by (a) authenticating <tt>merkle_root</tt> under the LT key from the certificate, and
(b) scoping caches by <tt>owner_id</tt> derived from that LT key.</t>
      </section>
      <section anchor="keydist-compromise">
        <name>KeyDist compromise</name>
        <t>A malicious KeyDist can withhold, replay, or reorder key records, causing denial of service or performance degradation (e.g., more cache misses), but MUST NOT enable authentication forgery if endpoints perform local verification and enforce freshness/epoch rules.</t>
        <t>Deployments SHOULD consider availability hardening (replication, multi-source fetching) and should ensure that stale records do not cause key reuse.</t>
      </section>
      <section anchor="bloom-filter-privacy-and-integrity">
        <name>Bloom filter privacy and integrity</name>
        <t>The cache hint can leak information about which client identifiers are cached by the server.
Deployments concerned with this leakage SHOULD avoid hybrid mode or should scope hints to a small set of expected peers.</t>
        <t>An attacker who can modify the hint on-path can influence whether the client sends fallback material.
However, the hint is carried inside the TLS handshake and is integrity protected by the handshake transcript; modifying it will fail the handshake.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document anticipates the need for the following registries:</t>
      <ul spacing="normal">
        <li>
          <t>One or more entries in the TLS <tt>SignatureScheme</tt> registry for Looma signature schemes.</t>
        </li>
        <li>
          <t>One entry in the TLS <tt>ExtensionType</tt> registry for <tt>looma_cache_hint</tt>.</t>
        </li>
      </ul>
      <t>This draft does not yet request code points and uses "TBD" placeholders.</t>
    </section>
    <section anchor="open-issues">
      <name>Open Issues and Future Work</name>
      <ul spacing="normal">
        <li>
          <t>Canonical encoding of key records and exact contents covered by <tt>sig_lt</tt>.</t>
        </li>
        <li>
          <t>Precise definition of <tt>pk_id</tt> mapping and whether it is stable across epochs.</t>
        </li>
        <li>
          <t>Whether to standardize a specific <tt>H_ots</tt> for interoperability, or define a registry.</t>
        </li>
        <li>
          <t>Interaction with delegated credentials <xref target="RFC9345"/> and deployment in service meshes.</t>
        </li>
      </ul>
      <t>Besides those specific points, we seek feedback on the appropriate use of PQ cryptographic
primitives from CFRG, and from the broader TLS community on TLS handshake integration.</t>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors thank the CFRG community for feedback.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="LoomaNDSS26" target="https://dx.doi.org/10.14722/ndss.2026.240074">
          <front>
            <title>Looma: A Low-Latency PQTLS Authentication Architecture for Cloud Applications</title>
            <author initials="X." surname="Ma" fullname="Xinshu Ma">
              <organization>University of Edinburgh</organization>
            </author>
            <author initials="M." surname="Honda" fullname="Michio Honda">
              <organization>University of Edinburgh</organization>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="In" value="Network and Distributed System Security (NDSS) Symposium"/>
        </reference>
        <reference anchor="RFC9345">
          <front>
            <title>Delegated Credentials for TLS and DTLS</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="S. Iyengar" initials="S." surname="Iyengar"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>The organizational separation between operators of TLS and DTLS endpoints and the certification authority can create limitations. For example, the lifetime of certificates, how they may be used, and the algorithms they support are ultimately determined by the Certification Authority (CA). This document describes a mechanism to overcome some of these limitations by enabling operators to delegate their own credentials for use in TLS and DTLS without breaking compatibility with peers that do not support this specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9345"/>
          <seriesInfo name="DOI" value="10.17487/RFC9345"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA5Vc63LbyJX+j6fokmsrpJakJVmeycibVGRJHrvGF42lyWRr
a1cEiSaJFS4MGpDMOJPaH/sGeZZ9gX2UPMl+55zuRgOgvclUUqZI9O1cv3Np
TKfTqE7rTJ+pg7dlmcdn6m35OH0b17pY7tR1aerpj01c1E2uzpt6o4s6XcZ1
WhZqVVbq9u2NOp49U2mhLuM6XuJnXZmDKF4sKv3g5jyIMESvy2p3hidXZZSU
yyLOsWZSxat6msfT5apaTzN6eHp0FJlmkafGYJV6t8Vjbz7evoqKJl/o6ixK
MNdZtCwLowvTmDNVV42OsNizKHosq/t1VTZbLH1R7bZ1qV6VVZMfROm24idN
fXJ09N3RSXSvd3g6weS050LX00vaTGTquEju4qwssPBOm2ibnql/q8vlRJmy
qiu9Mvi0y+nDv0cxaFJiU2qKk2Evf5ipd3GklJLz/QFfbhr7VVmtz9RPRfoA
EqX1TpUrdZWkxaKp1hv6Xedxmp2pT7M8/p1OZvFy1tz7id/N1OuySIK536XL
TVq23/6d0+c8bLahYcNlLmbqWlf3+NwudFFm4G/w9Z6Vvs9isy4fg3WWZvs7
/F9GzTAkKsoqh+g8gHtKfXx18evT02/sx5Pj4+/ct8ffnp5FJCbB0yxG7y9v
bk54hFJGV6k29JT8rdTBm+LgTL3XNcmAAg/VZWrqKl00tU7Uzc7UOlc3etlU
tOURTTbG1/m2NGmT8yR1XK11DdHZ1PXWnD19mnyaJWVKm396fDQ7Pv325ORp
kRgzOzk6+WZ2cnp09O3pgQzt6tB5V4t+JD3pqc95BT7Uelk3lWZdusjKJlHn
221mHzEytRcx/m9q/1U9eeP/9ggd//f/icZw3lDcgqn7Mvf3zc4aq4hmwuLv
np0+P4ui6XSq4gV4FC/rKGJT80drakbXP4754AHBIIPO3CzjQsVJokBeo6Dj
m6ZIKp0YWhryXZVGwz7w39EGomA28b1W26pcaliVYg125XoGzaetOas1UY8b
DV7kTd3E2WB1E+WYKa5hxSaq3qSm/8QSB1ALLJxr/KaSMk8LnAbfFyKG4DH2
qotkWpdT/BNV+o+NxqBM5GSitnGF6ZosrrId7YYmLQrICEmDirE5A1Gopxlo
nbCM+9NFFSaRZzbpejOLolvaIyxtk2OTCpq4TFfQGdGlCUarsoBi66flakX/
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
9Vdh+FF6n8FyQxfa5/5Ad8QOjsUoooee6nWc3fka3dw18CP87mi5HTbpN6iE
3U0dBW7fJkNlHRhheym0X9locrqT+CdtfCkIxmzt7vB/pSdSrETb0NgUXI6J
F8SJHVdiuYxg+C4vwSz+va0E7CmP0B0nnRIYZIvAA1z1t9Nf3uv+6CBAYr8f
HA87uxmkD3q292RP7USLSsf3bcymXMwGFPhUyQXSKZxgmtOF/+DHAiFN62bC
wjMps71xEZ1Tbwid4eqnV9OLd+ctG9q6e/fo1t775wjfESm1aVv46SE+aCYK
ELYXwswJA2wd3nReWtK/DE33oBnb2miemoe5d93pattxLFWMSds4Fdxfs12J
uS+jenp7NCjNi5RRF9H6EDwhP0TRR+0a8wd9c4Dq1H2n6kd6E8eKA+m6kyhg
jMHI0lYSpX5I6RpCDnLfnQWPpNrXQbWNpAhWLetOQEVe5/fWNXlDwO/nkMrA
vsDCbiMIIGjzg8iBpr700MRuxb/4xDXPM/F8V5sNuPpvEpBSdW3vz21TW/Wk
618cZ0Jea9u6/LJtutjX6maLUEFfy/5eli+3sQyaRrr1cmqg0eTvXPcHhozi
8Vf1fXAVqO3u6XQGgQzRaDFmhM1vyeDbgrRCAER7DUIQ1KDxpK1o+yo3FBiR
LCVM6B0ZYcXblbQncpmerQk+ctEsbBmYcG2cXxYzqI73OmoTqlgnHb/HYWl7
iUD3y+ZO1Ht6vbdybpeSgv4QZDo94Ps1CKfMU+5wVFWT8TtFQmm1qrC0rsfd
i2bXAPGs6Kg48YhIY9eY2KKjKRteRdfcTCUtuwYgKUs6QTukNmubItyrDhjk
eINhhToMWBAKP8Tk/TnBYq+FSWCztNe+bPiZkdn3bStEhAUhtU4oGwY3bUTr
BF2A1qxDGb47Xnmnyik4Womch6WatBUHUJavNwoFJDzcSPWeanMmpxuWpN6Q
G28BCGQTT85d0pOCiU3J58KM5Gx9iOnvQHMWdQXrxAmO4L6bPayg18FdllnU
eSeDYN+wCuVTj51rXsIB0zKB+9Jl+/0e48BDvbD7l26ZNtQZNiWrN+fvz/ej
nzbnWdjLojaqIJ/t7Wl7C7XSa+4Isnl5Sh/TexhKfqUKf++SBnTEuQdFN+wR
5268NGXtL/5zrytNTBPuOtP5jMztbtufzNZ5WO7uiPRzD2jt+54smt1puRqg
2XwlhNlZiBgpUFB1cPvy8kDxaz/IbIn8wAtvdaHecGVMXjwkdbSfqQvg85Ow
bsYvwRh0p5FYBtZOLAmH6LYSRCrxwK+kWbSpVHvDfply09CKX4gADQwK07ZW
zfM5WU3taz7E4gkcYBvFxP3ZSXTp4wm+ZK8G9yTclVEGVtZqsfn2IYHjgYSd
eDJetu0elAdds8Nb4lhkIBAkSZ2IXi4IoC7ZUp8NTP0tfcov8RX2yL6QBFJA
L2/xWxSuAWORddH3ndcu2GSkT/fZig3QY+edC1H7zgVxc/QmCMngesfp3gfR
efEDrdFV4eBFDSws58v7onzMdLKWd9OIXXWviqDs6b10RtG7J9p5id7uILPo
/wDyHxSe9lUAAA==

-->

</rfc>
