<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-hybrid-kems-05" category="info" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="hybrid-kems">Hybrid PQ/T Key Encapsulation Mechanisms</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-hybrid-kems-05"/>
    <author fullname="Deirdre Connolly">
      <organization>SandboxAQ</organization>
      <address>
        <email>durumcrustulum@gmail.com</email>
      </address>
    </author>
    <author fullname="Richard Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <author fullname="Paul Grubbs">
      <organization>University of Michigan</organization>
      <address>
        <email>paulgrubbs12@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="July" day="21"/>
    <workgroup>Crypto Forum</workgroup>
    <abstract>
      <?line 246?>

<t>This document defines generic constructions for hybrid Key Encapsulation
Mechanisms (KEMs) based on combining a traditional cryptographic component
and a post-quantum (PQ) KEM. Hybrid KEMs built using these constructions
provide strong security properties as long as either of the underlying
algorithms are secure.</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/cfrg/draft-irtf-cfrg-hybrid-kems"/>.</t>
    </note>
  </front>
  <middle>
    <?line 254?>

<section anchor="intro">
      <name>Introduction</name>
      <t>Post-quantum (PQ) cryptographic algorithms are based on
problems that are conjectured to be resistant to attacks possible on a quantum
computer. Key Encapsulation Mechanisms (KEMs), are a standardized class of
cryptographic scheme that can be used to build protocols in lieu of
traditional, quantum-vulnerable variants such as finite field or elliptic
curve Diffie-Hellman (DH) based protocols.</t>
      <t>Given the novelty of PQ algorithms, however, there is some concern that PQ
algorithms currently believed to be secure will be broken.  Hybrid
constructions that combine both PQ and traditional algorithms can help
moderate this risk while still providing security against quantum attack.  If
constructed properly, a hybrid KEM will retain certain security properties
even if one of the two constituent KEMs is compromised. If the PQ KEM is
broken, then the hybrid KEM should continue to provide security against
non-quantum attackers by virtue of its traditional KEM component. If the
traditional KEM is broken by a quantum computer, then the hybrid KEM should
continue to resist quantum attack by virtue of its PQ KEM component.</t>
      <t>In addition to guarding against algorithm weaknesses, this property also
guards against flaws in implementations, such as timing attacks.  Hybrid KEMs
can also facilitate faster deployment of PQ security by allowing applications
to incorporate PQ algorithms while still meeting compliance requirements
based on traditional algorithms.</t>
      <t>In this document, we define generic frameworks for constructing hybrid KEMs
from a traditional algorithm and a PQ KEM.  The aim of this document is
provide a small set of techniques to achieve specific security properties
given conforming component algorithms, which should make these techniques
suitable for a broad variety of use cases.</t>
      <t>The remainder of this document is structured as follows: first, in
<xref target="cryptographic-deps"/> and <xref target="frameworks"/>, we define the abstractions on
which the frameworks are built, and then the frameworks themselves.  Then, in
<xref target="security"/>, we lay out the security analyses that support these frameworks,
including the security requirements for constituent components and the
security notions satisfied by hybrid KEMS constructed according to the
frameworks in the document <xref target="security-requirements"/>.  Finally, we discuss
some "path not taken", related topics that might be of interest to readers,
but which are not treated in depth.</t>
    </section>
    <section anchor="requirements-notation">
      <name>Requirements Notation</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

</section>
    <section anchor="notation">
      <name>Notation</name>
      <t>This document is consistent with all terminology defined in
<xref target="I-D.ietf-pquip-pqt-hybrid-terminology"/>.</t>
      <t>The following terms are used throughout this document:</t>
      <ul spacing="normal">
        <li>
          <t><tt>random(n)</tt>: return a pseudorandom byte string of length <tt>n</tt> bytes produced
by a cryptographically-secure random number generator.</t>
        </li>
        <li>
          <t><tt>concat(x0, ..., xN)</tt>: Concatenation of byte strings.  <tt>concat(0x01,
0x0203, 0x040506) = 0x010203040506</tt>.</t>
        </li>
        <li>
          <t><tt>split(N1, N2, x)</tt>: Split a byte string <tt>x</tt> of length <tt>N1 + N2</tt> into its
first <tt>N1</tt> bytes and its last <tt>N2</tt> bytes.  This function is the inverse of
<tt>concat(x1, x2)</tt> when <tt>x1</tt> is <tt>N1</tt> bytes long and <tt>x2</tt> is <tt>N2</tt> bytes
long. It is an error to call this function with a byte string that does not
have length <tt>N1 + N2</tt>. Since this function operates over secret data <tt>x</tt>,
it <bcp14>MUST</bcp14> be constant-time for a given <tt>N1</tt> and <tt>N2</tt>.</t>
        </li>
      </ul>
      <t>When <tt>x</tt> is a byte string, we use the notation <tt>x[..i]</tt> and <tt>x[i..]</tt> to
denote the slice of bytes in <tt>x</tt> starting from the beginning of <tt>x</tt> and
leading up to index <tt>i</tt>, including the <tt>i</tt>-th byte, and the slice the bytes
in <tt>x</tt> starting from index <tt>i</tt> to the end of <tt>x</tt>, respectively. For example,
if <tt>x = [0, 1, 2, 3, 4]</tt>, then <tt>x[..2] = [0, 1]</tt> and <tt>x[2..] = [2, 3, 4]</tt>.</t>
      <t>A set is denoted by listing values in braces: <tt>{a,b,c}</tt>.</t>
      <t>A vector of set elements of length <tt>n</tt> is denoted with exponentiation,
such as for the <tt>n</tt>-bit value: {0,1}<sup>n</sup>.</t>
      <t>Drawing uniformly at random from an <tt>n</tt>-bit vector into a value <tt>x</tt>
is denoted: x $← {0,1}<sup>n</sup>.</t>
      <t>A function <tt>f</tt> that maps from one domain to another is denoted
using a right arrow to separate inputs from outputs: f : inputs → outputs.</t>
    </section>
    <section anchor="cryptographic-deps">
      <name>Cryptographic Dependencies</name>
      <t>The generic hybrid PQ/T KEM frameworks we define depend on the the following
cryptographic primitives:</t>
      <ul spacing="normal">
        <li>
          <t>Key Encapsulation Mechanisms (<xref target="kems"/>)</t>
        </li>
        <li>
          <t>Nominal Groups (<xref target="groups"/>)</t>
        </li>
        <li>
          <t>Pseudorandom Generators (<xref target="prgs"/>)</t>
        </li>
        <li>
          <t>Key Derivation Functions (<xref target="kdfs"/>)</t>
        </li>
      </ul>
      <t>In the remainder of this section, we describe functional aspects of these
mechanisms.  The security properties we require in order for the resulting
hybrid KEM to be secure are discussed in <xref target="security"/>.</t>
      <section anchor="kems">
        <name>Key Encapsulation Mechanisms</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="400" width="248" viewBox="0 0 248 400" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,272 L 8,304" fill="none" stroke="black"/>
              <path d="M 40,128 L 40,160" fill="none" stroke="black"/>
              <path d="M 40,224 L 40,264" fill="none" stroke="black"/>
              <path d="M 40,312 L 40,352" fill="none" stroke="black"/>
              <path d="M 48,32 L 48,96" fill="none" stroke="black"/>
              <path d="M 80,272 L 80,304" fill="none" stroke="black"/>
              <path d="M 120,96 L 120,128" fill="none" stroke="black"/>
              <path d="M 168,272 L 168,304" fill="none" stroke="black"/>
              <path d="M 192,32 L 192,96" fill="none" stroke="black"/>
              <path d="M 208,128 L 208,160" fill="none" stroke="black"/>
              <path d="M 208,224 L 208,264" fill="none" stroke="black"/>
              <path d="M 208,312 L 208,352" fill="none" stroke="black"/>
              <path d="M 240,272 L 240,304" fill="none" stroke="black"/>
              <path d="M 48,32 L 192,32" fill="none" stroke="black"/>
              <path d="M 48,96 L 192,96" fill="none" stroke="black"/>
              <path d="M 40,128 L 208,128" fill="none" stroke="black"/>
              <path d="M 8,272 L 80,272" fill="none" stroke="black"/>
              <path d="M 168,272 L 240,272" fill="none" stroke="black"/>
              <path d="M 88,288 L 160,288" fill="none" stroke="black"/>
              <path d="M 8,304 L 80,304" fill="none" stroke="black"/>
              <path d="M 168,304 L 240,304" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="216,352 204,346.4 204,357.6" fill="black" transform="rotate(90,208,352)"/>
              <polygon class="arrowhead" points="216,264 204,258.4 204,269.6" fill="black" transform="rotate(90,208,264)"/>
              <polygon class="arrowhead" points="216,160 204,154.4 204,165.6" fill="black" transform="rotate(90,208,160)"/>
              <polygon class="arrowhead" points="168,288 156,282.4 156,293.6" fill="black" transform="rotate(0,160,288)"/>
              <polygon class="arrowhead" points="48,352 36,346.4 36,357.6" fill="black" transform="rotate(90,40,352)"/>
              <polygon class="arrowhead" points="48,264 36,258.4 36,269.6" fill="black" transform="rotate(90,40,264)"/>
              <polygon class="arrowhead" points="48,160 36,154.4 36,165.6" fill="black" transform="rotate(90,40,160)"/>
              <g class="text">
                <text x="120" y="52">GenerateKeyPair</text>
                <text x="116" y="68">or</text>
                <text x="120" y="84">DeriveKeyPair</text>
                <text x="44" y="196">ek</text>
                <text x="204" y="196">dk</text>
                <text x="124" y="276">ct</text>
                <text x="44" y="292">Encaps</text>
                <text x="204" y="292">Decaps</text>
                <text x="44" y="388">ss</text>
                <text x="124" y="388">==</text>
                <text x="204" y="388">ss</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
     +-----------------+
     | GenerateKeyPair |
     |       or        |
     |  DeriveKeyPair  |
     +--------+--------+
              |
    +---------+----------+
    |                    |
    V                    V

    ek                  dk

    |                    |
    |                    |
    V                    V
+--------+    ct    +--------+
| Encaps |--------->| Decaps |
+--------+          +--------+
    |                    |
    |                    |
    V                    V

    ss        ==        ss
]]></artwork>
        </artset>
        <t>A Key Encapsulation Mechanism (KEMs) comprises the following algorithms:</t>
        <ul spacing="normal">
          <li>
            <t><tt>GenerateKeyPair() -&gt; (ek, dk)</tt>: A randomized algorithm that generates a
public encapsulation key <tt>ek</tt> and a secret decapsulation key <tt>dk</tt>, each of
which are byte strings.</t>
          </li>
          <li>
            <t><tt>DeriveKeyPair(seed) -&gt; (ek, dk)</tt>: A deterministic algorithm that takes as
input a seed <tt>seed</tt> and generates a public encapsulation key <tt>ek</tt> and a
secret decapsulation key <tt>dk</tt>, each of which are byte strings.</t>
          </li>
          <li>
            <t><tt>Encaps(ek) -&gt; (ct, ss)</tt>: A probabilistic encapsulation
algorithm, which takes as input a public encapsulation key <tt>ek</tt> and outputs
a ciphertext <tt>ct</tt> and shared secret <tt>ss</tt>.</t>
          </li>
          <li>
            <t><tt>Decaps(dk, ct) -&gt; ss</tt>: A deterministic decapsulation algorithm, which
takes as input a secret decapsulation key <tt>dk</tt> and ciphertext <tt>ct</tt> and
outputs a shared secret <tt>ss</tt>.</t>
          </li>
        </ul>
        <t>We also make use of internal algorithms such as:</t>
        <ul spacing="normal">
          <li>
            <t><tt>expandDecapsulationKey(dk) -&gt; (ek, dk)</tt>: A deterministic algorithm that
takes as input a decapsulation key <tt>dk</tt> and generates keypair intermediate
values for computation.</t>
          </li>
        </ul>
        <t>We assume that the values produced and consumed by the above functions are
all byte strings, with fixed lengths:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Nseed</tt>: The length in bytes of a key seed</t>
          </li>
          <li>
            <t><tt>Nek</tt>: The length in bytes of a public encapsulation key</t>
          </li>
          <li>
            <t><tt>Ndk</tt>: The length in bytes of a secret decapsulation key</t>
          </li>
          <li>
            <t><tt>Nct</tt>: The length in bytes of a ciphertext produced by Encaps</t>
          </li>
          <li>
            <t><tt>Nss</tt>: The length in bytes of a shared secret produced by Encaps or Decaps</t>
          </li>
        </ul>
      </section>
      <section anchor="groups">
        <name>Nominal Groups</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="464" width="456" viewBox="0 0 456 464" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 56,128 L 56,352" fill="none" stroke="black"/>
              <path d="M 80,112 L 80,144" fill="none" stroke="black"/>
              <path d="M 80,336 L 80,368" fill="none" stroke="black"/>
              <path d="M 104,64 L 104,104" fill="none" stroke="black"/>
              <path d="M 104,152 L 104,192" fill="none" stroke="black"/>
              <path d="M 104,224 L 104,240" fill="none" stroke="black"/>
              <path d="M 104,288 L 104,328" fill="none" stroke="black"/>
              <path d="M 104,376 L 104,416" fill="none" stroke="black"/>
              <path d="M 128,112 L 128,144" fill="none" stroke="black"/>
              <path d="M 128,336 L 128,368" fill="none" stroke="black"/>
              <path d="M 224,48 L 224,64" fill="none" stroke="black"/>
              <path d="M 328,112 L 328,144" fill="none" stroke="black"/>
              <path d="M 328,336 L 328,368" fill="none" stroke="black"/>
              <path d="M 352,64 L 352,104" fill="none" stroke="black"/>
              <path d="M 352,152 L 352,192" fill="none" stroke="black"/>
              <path d="M 352,224 L 352,240" fill="none" stroke="black"/>
              <path d="M 352,288 L 352,328" fill="none" stroke="black"/>
              <path d="M 352,376 L 352,416" fill="none" stroke="black"/>
              <path d="M 376,112 L 376,144" fill="none" stroke="black"/>
              <path d="M 376,336 L 376,368" fill="none" stroke="black"/>
              <path d="M 400,128 L 400,352" fill="none" stroke="black"/>
              <path d="M 104,64 L 352,64" fill="none" stroke="black"/>
              <path d="M 80,112 L 128,112" fill="none" stroke="black"/>
              <path d="M 328,112 L 376,112" fill="none" stroke="black"/>
              <path d="M 56,128 L 72,128" fill="none" stroke="black"/>
              <path d="M 384,128 L 400,128" fill="none" stroke="black"/>
              <path d="M 80,144 L 128,144" fill="none" stroke="black"/>
              <path d="M 328,144 L 376,144" fill="none" stroke="black"/>
              <path d="M 40,240 L 56,240" fill="none" stroke="black"/>
              <path d="M 104,240 L 216,240" fill="none" stroke="black"/>
              <path d="M 240,240 L 352,240" fill="none" stroke="black"/>
              <path d="M 400,240 L 416,240" fill="none" stroke="black"/>
              <path d="M 104,288 L 216,288" fill="none" stroke="black"/>
              <path d="M 240,288 L 352,288" fill="none" stroke="black"/>
              <path d="M 80,336 L 128,336" fill="none" stroke="black"/>
              <path d="M 328,336 L 376,336" fill="none" stroke="black"/>
              <path d="M 56,352 L 72,352" fill="none" stroke="black"/>
              <path d="M 384,352 L 400,352" fill="none" stroke="black"/>
              <path d="M 80,368 L 128,368" fill="none" stroke="black"/>
              <path d="M 328,368 L 376,368" fill="none" stroke="black"/>
              <path d="M 128,430 L 320,430" fill="none" stroke="black"/>
              <path d="M 128,434 L 320,434" fill="none" stroke="black"/>
              <path d="M 216,240 L 240,288" fill="none" stroke="black"/>
              <path d="M 216,288 L 240,240" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="392,352 380,346.4 380,357.6" fill="black" transform="rotate(180,384,352)"/>
              <polygon class="arrowhead" points="392,128 380,122.4 380,133.6" fill="black" transform="rotate(180,384,128)"/>
              <polygon class="arrowhead" points="360,416 348,410.4 348,421.6" fill="black" transform="rotate(90,352,416)"/>
              <polygon class="arrowhead" points="360,328 348,322.4 348,333.6" fill="black" transform="rotate(90,352,328)"/>
              <polygon class="arrowhead" points="360,192 348,186.4 348,197.6" fill="black" transform="rotate(90,352,192)"/>
              <polygon class="arrowhead" points="360,104 348,98.4 348,109.6" fill="black" transform="rotate(90,352,104)"/>
              <polygon class="arrowhead" points="112,416 100,410.4 100,421.6" fill="black" transform="rotate(90,104,416)"/>
              <polygon class="arrowhead" points="112,328 100,322.4 100,333.6" fill="black" transform="rotate(90,104,328)"/>
              <polygon class="arrowhead" points="112,192 100,186.4 100,197.6" fill="black" transform="rotate(90,104,192)"/>
              <polygon class="arrowhead" points="112,104 100,98.4 100,109.6" fill="black" transform="rotate(90,104,104)"/>
              <polygon class="arrowhead" points="80,352 68,346.4 68,357.6" fill="black" transform="rotate(0,72,352)"/>
              <polygon class="arrowhead" points="80,128 68,122.4 68,133.6" fill="black" transform="rotate(0,72,128)"/>
              <g class="text">
                <text x="224" y="36">g</text>
                <text x="104" y="132">Exp</text>
                <text x="352" y="132">Exp</text>
                <text x="104" y="212">pkA</text>
                <text x="352" y="212">pkB</text>
                <text x="16" y="244">skA</text>
                <text x="440" y="244">skB</text>
                <text x="104" y="356">Exp</text>
                <text x="352" y="356">Exp</text>
                <text x="100" y="436">pkAB</text>
                <text x="348" y="436">pkBA</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
                            g
                            |
             +--------------+---------------+
             |                              |
             V                              V
          +-----+                        +-----+
       +->| Exp |                        | Exp |<-+
       |  +-----+                        +-----+  |
       |     |                              |     |
       |     |                              |     |
       |     V                              V     |
       |    pkA                            pkB    |
       |     |                              |     |
 skA --+     +-------------.  .-------------+     +-- skB
       |                    \/                    |
       |                    /\                    |
       |     +-------------'  '-------------+     |
       |     |                              |     |
       |     V                              V     |
       |  +-----+                        +-----+  |
       +->| Exp |                        | Exp |<-+
          +-----+                        +-----+
             |                              |
             |                              |
             V                              V
           pkAB ========================= pkBA
]]></artwork>
        </artset>
        <t>Nominal groups are an abstract model of elliptic curve groups, over which we
instantiate Diffie-Hellman key agreement <xref target="ABH_21"/>.  A nominal group
comprises a set <tt>G</tt> together with a distinguished basis element <tt>g</tt>, an
"exponentiation" map, and some auxiliary functions:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Exp(p, x) -&gt; q</tt>: An algorithm that produces an element <tt>q</tt> of <tt>G</tt> from an
element <tt>p</tt> and an integer <tt>x</tt>.
            </t>
            <ul spacing="normal">
              <li>
                <t>The integers <tt>x</tt> are called "scalars" to distinguish them from group
elements.</t>
              </li>
              <li>
                <t><tt>Exp</tt> must respect multiplication in its scalar argument <tt>x</tt>, so that
<tt>Exp(Exp(p, x), y) = Exp(p, x * y)</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>RandomScalar(seed) -&gt; k</tt>: Produce a uniform pseudo-random scalar from the
byte string <tt>seed</tt>.</t>
          </li>
          <li>
            <t><tt>ElementToSharedSecret(P) -&gt; ss</tt>: Extract a shared secret from an element of
the group (e.g., by taking the X coordinate of an elliptic curve point).</t>
          </li>
        </ul>
        <t>We assume that scalars and group elements are represented by byte strings with
fixed lengths:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Nseed</tt>: The length in bytes of a seed (input to RandomScalar)</t>
          </li>
          <li>
            <t><tt>Nscalar</tt>: The length in bytes of a scalar</t>
          </li>
          <li>
            <t><tt>Nelem</tt>: The length in bytes of a serialized group element</t>
          </li>
          <li>
            <t><tt>Nss</tt>: The length in bytes of a shared secret produced by
ElementToSharedSecret</t>
          </li>
        </ul>
        <t>The security requirements for groups used with the frameworks in this document
are laid out in <xref target="security-groups"/>.</t>
      </section>
      <section anchor="prgs">
        <name>Pseudorandom Generators</name>
        <t>A pseudorandom generator (PRG) is a deterministic function <tt>G</tt> whose outputs
are longer than its inputs. When the input to <tt>G</tt> is chosen uniformly at
random, it induces a certain distribution over the possible output. The
output distribution is pseudorandom if it is indistinguishable from the
uniform distribution.</t>
        <t>The PRGs used in this document have a simpler form, with a fixed
output lengths:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Nout</tt> - The length in bytes of an output from this PRG.</t>
          </li>
          <li>
            <t><tt>PRG(seed) -&gt; output</tt>: Produce a byte string of length <tt>Nout</tt> from an input
byte string <tt>seed</tt>.</t>
          </li>
        </ul>
        <t>The fixed sizes are for both security and simplicity.</t>
        <t><bcp14>MUST</bcp14> provide the bit-security required to source input randomness for PQ/T
components from a seed that is expanded to a output length, of which a subset
is passed to the component key generation algorithms.</t>
        <t>The security requirements for PRGs used with the frameworks in this document are
laid out in <xref target="security-prgs"/>.</t>
      </section>
      <section anchor="kdfs">
        <name>Key Derivation Functions</name>
        <t>A Key Derivation Function (KDF) is a function that produces
keying material based on an input secret and other information.</t>
        <t>While KDFs in the literature can typically consume and produce byte strings of
arbitrary length, the KDFs used in this document have a simpler form, with a fixed
output lengths:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Nout</tt> - The length in bytes of an output from this KDF.</t>
          </li>
          <li>
            <t><tt>KDF(input) -&gt; output</tt>: Produce a byte string of length <tt>Nout</tt> from an input
byte string.</t>
          </li>
        </ul>
        <t>The fixed sizes are for both security and simplicity.</t>
        <t>For instances of the <tt>Extract()</tt>/<tt>Expand()</tt> KDF paradigm such as <tt>HKDF</tt>, we fix
the salt and sizes to fit this form.</t>
        <t>The security requirements for KDFs used with the frameworks in this document are
laid out in <xref target="security-kdfs"/>.</t>
      </section>
    </section>
    <section anchor="frameworks">
      <name>Hybrid KEM Frameworks</name>
      <t>In this section, we define three generic frameworks for building for hybrid
KEMs:</t>
      <dl>
        <dt>GHP:</dt>
        <dd>
          <t>A generic framework that is suitable for use with any choice of traditional and
PQ KEMs, with minimal security assumptions on the constituent KEMs</t>
        </dd>
        <dt>PRE:</dt>
        <dd>
          <t>A performance optimization of GHP for the case where encapsulation keys are
large and frequently reused</t>
        </dd>
        <dt>QSF:</dt>
        <dd>
          <t>An optimized generic framework for the case where the traditional component is a
nominal group and the PQ component has strong binding properties</t>
        </dd>
      </dl>
      <t>These frameworks share a common overall structure, differing mainly in how they
compute the final shared secret and the security requirements of their
components.</t>
      <section anchor="ghp">
        <name>GHP</name>
        <t>The GHP hybrid KEM depends on the following constituent
components:</t>
        <ul spacing="normal">
          <li>
            <t><tt>KEM_T</tt>: A traditional KEM</t>
          </li>
          <li>
            <t><tt>KEM_PQ</tt>: A post-quantum KEM</t>
          </li>
          <li>
            <t><tt>PRG</tt>: A PRG producing byte strings of length <tt>KEM_T.Nseed + KEM_PQ.Nseed</tt>
(<tt>PRG.Nout == KEM_T.Nseed + KEM_PQ.Nseed</tt>)</t>
          </li>
          <li>
            <t><tt>KDF</tt>: A KDF producing byte strings of length <tt>GHP.Nss</tt> (<tt>KDF.Nout
== GHP.Nss</tt>)</t>
          </li>
          <li>
            <t><tt>Label</tt> - A byte string used to label the specific combination of the above
constituents being used.</t>
          </li>
        </ul>
        <t>The KEMs, groups, KDFs, and PRGs <bcp14>MUST</bcp14> meet the security requirements in
<xref target="security-requirements"/>.</t>
        <t>The constants for public values are derived from the concatenation of
encapsulation keys and ciphertexts:</t>
        <artwork><![CDATA[
Nek = KEM_T.Nek + KEM_PQ.Nek
Nct = KEM_T.Nct + KEM_PQ.Nct
]]></artwork>
        <t>The <tt>Nseed</tt> and <tt>Nss</tt> constants should reflect the overall security level of the
combined KEM, with the following recommended values:</t>
        <artwork><![CDATA[
Nseed = max(KEM_T.Nseed, KEM_PQ.Nseed)
Nss = min(KEM_T.Nss, KEM_PQ.Nss)
]]></artwork>
        <t>Since we use the seed as the decapsulation key, <tt>Ndk = Nseed</tt>.</t>
        <t>Given these constituent parts, the GHP hybrid KEM is defined as follows:</t>
        <artwork><![CDATA[
def expandDecapsulationKey(seed):
    seed_full = PRG(seed)
    (seed_T, seed_PQ) = split(KEM_T.Nseed, KEM_PQ.Nseed, seed_full)
    (ek_T, dk_T) = KEM_T.DeriveKeyPair(seed_T)
    (ek_PQ, dk_PQ) = KEM_PQ.DeriveKeyPair(seed_PQ)
    return (ek_T, ek_PQ, dk_T, dk_PQ)

def DeriveKeyPair(seed):
    (ek_T, ek_PQ, dk_T, dk_PQ) = expandDecapsulationKey(seed)
    return (concat(ek_T, ek_PQ), seed)

def GenerateKeyPair():
    seed = random(Nseed)
    return DeriveKeyPair(seed)

def Encaps(ek):
    (ek_T, ek_PQ) = split(KEM_T.Nek, KEM_PQ.Nek, ek)
    (ss_T, ct_T) = KEM_T.Encap(pk_T)
    (ss_PQ, ct_PQ) = KEM_PQ.Encap(pk_PQ)
    ss_H = KDF(concat(ss_PQ, ss_T, ct_PQ, ct_T, ek_PQ, ek_T, label))
    ct_H = concat(ct_T, ct_PQ)
    return (ss_H, ct_H)

def Decaps(dk, ct):
    (ek_T, ek_PQ, dk_T, dk_PQ) = expandDecapsulationKey(dk)

    (ct_T, ct_PQ) = split(KEM_T.Nct, KEM_PQ.Nct, ct)
    ss_T = KEM_T.Decap(dk_T, ct_T)
    ss_PQ = KEM_PQ.Decap(dk_PQ, ct_PQ)

    ss_H = KDF(concat(ss_PQ, ss_T, ct_PQ, ct_T, ek_PQ, ek_T, label))
    return ss_H
]]></artwork>
      </section>
      <section anchor="pre">
        <name>PRE</name>
        <t>The PRE hybrid KEM is a performance optimization of the GHP KEM,
optimized for the case where encapsulation keys are large and frequently
reused. In such cases, hashing the entire encapsulation key is expensive, and
the same value is hashed repeatedly.  The PRE KEM thus computes an
intermediate hash of the hybrid encapsulation key, so that the hash value can
be computed once and used across many encapsulation or decapsulation
operations.</t>
        <t>The PRE KEM is identical to the GHP KEM except for the
shared secret computation.  One additional KDF is required:</t>
        <ul spacing="normal">
          <li>
            <t><tt>KeyHash</tt>: A KDF producing byte strings of length <tt>GHP.Nss</tt> (<tt>KeyHash.Nout
== GHP.Nss</tt>)</t>
          </li>
        </ul>
        <t>The <tt>GenerateKeyPair</tt> and <tt>DeriveKeyPair</tt> algorithms for PRE are
identical to those of the GHP KEM.  The <tt>Encaps</tt> and <tt>Decaps</tt>
method use a modified shared secret computation:</t>
        <artwork><![CDATA[
def Encaps(ek):
    (ek_T, ek_PQ) = split(KEM_T.Nek, KEM_PQ.Nek, ek)
    (ss_T, ct_T) = KEM_T.Encap(pk_T)
    (ss_PQ, ct_PQ) = KEM_PQ.Encap(pk_PQ)

    ekh = KeyHash(concat(ek_T, ek_PQ))
    ss_H = KDF(concat(ss_PQ, ss_T, ct_PQ, ct_T, ekh, label))

    ct_H = concat(ct_T, ct_PQ)
    return (ss_H, ct_H)

def Decaps(dk, ct):
    (ek_T, ek_PQ, dk_T, dk_PQ) = expandDecapsulationKey(dk)

    (ct_T, ct_PQ) = split(KEM_T.Nct, KEM_PQ.Nct, ct)
    ss_T = KEM_T.Decap(dk_T, ct_T)
    ss_PQ = KEM_PQ.Decap(dk_PQ, ct_PQ)

    ekh = KeyHash(concat(ek_T, ek_PQ))
    ss_H = KDF(concat(ss_PQ, ss_T, ct_PQ, ct_T, ekh, label))
    return ss_H
]]></artwork>
      </section>
      <section anchor="qsf">
        <name>QSF</name>
        <t>The QSF hybrid KEM (QSF below) depends on the following constituent
components:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Group_T</tt>: A nominal group</t>
          </li>
          <li>
            <t><tt>KEM_PQ</tt>: A post-quantum KEM</t>
          </li>
          <li>
            <t><tt>PRG</tt>: A PRG producing byte strings of length <tt>Group_T.Nseed +
KEM_PQ.Nseed</tt> (<tt>Expand.Nout == Group_T.Nseed + KEM_PQ.Nseed</tt>)</t>
          </li>
          <li>
            <t><tt>KDF</tt>: A KDF producing byte strings of length <tt>QSF.Nss</tt> (<tt>KDF.Nout
== KDF.Nss</tt>)</t>
          </li>
          <li>
            <t><tt>Label</tt> - A byte string used to label the specific combination of the above
constituents being used.</t>
          </li>
        </ul>
        <t>We presume that <tt>Group_T</tt>, <tt>KEM_PQ</tt>, and the KDFs meet the interfaces
described in <xref target="cryptographic-deps"/> and <bcp14>MUST</bcp14> meet the security requirements
described in <xref target="security-requirements"/>.</t>
        <t>The constants for public values are derived from the concatenation of
encapsulation keys and ciphertexts:</t>
        <artwork><![CDATA[
Nek = Group_T.Nelem + KEM_PQ.Nek
Nct = Group_T.Nelem + KEM_PQ.Nct
]]></artwork>
        <t>The <tt>Nseed</tt> and <tt>Nss</tt> constants should reflect the overall security level of
the combined KEM, with the following recommended values:</t>
        <artwork><![CDATA[
Nseed = max(Group_T.Nseed, KEM_PQ.Nseed)
Nss = min(Group_T.Nss, KEM_PQ.Nss)
]]></artwork>
        <t>Since we use the seed as the decapsulation key, <tt>Ndk = Nseed</tt>.</t>
        <t>Given these constituent parts, we define the QSF hybrid KEM as follows:</t>
        <artwork><![CDATA[
def expandDecapsulationKey(seed):
    seed_full = PRG(seed)
    (seed_T, seed_PQ) = split(Group_T.Nseed, KEM_PQ.Nseed, seed)

    dk_T = Group_T.RandomScalar(seed_T)
    ek_T = Group_T.Exp(Group_T.g, dk_T)
    (ek_PQ, dk_PQ) = KEM_PQ.DeriveKeyPair(seed_PQ)

    return (ek_T, ek_PQ, dk_T, dk_PQ)

def DeriveKeyPair(seed):
    (ek_T, ek_PQ, dk_T, dk_PQ) = expandDecapsulationKey(seed)
    return (concat(ek_T, ek_PQ), seed)

def GenerateKeyPair():
    seed = random(Nseed)
    return DeriveKeyPair(seed)

def Encaps(ek):
    (ek_T, ek_PQ) = split(Group_T.Nek, KEM_PQ.Nek, ek)

    sk_E = Group_T.RandomScalar(random(GroupT.Nseed))
    ct_T = Group_T.Exp(GroupT.g, sk_E)
    ss_T = Group_T.ElementToSharedSecret(Group_T.Exp(ek_T, sk_E))
    (ss_PQ, ct_PQ) = KEM_PQ.Encap(ek_PQ)

    ss_H = KDF(concat(ss_PQ, ss_T, ct_T, ek_T, Label))
    ct_H = concat(ct_T, ct_PQ)
    return (ss_H, ct_H)

def Decaps(dk, ct):
    (ek_T, ek_PQ, dk_T, dk_PQ) = expandDecapsulationKey(dk)

    ss_T = Group_T.ElementToSharedSecret(Group_T.Exp(ct_T, dk_T))
    ss_PQ = KEM_PQ.Decap(dk_PQ, ct_PQ)

    ss_H = KDF(concat(ss_PQ, ss_T, ct_T, ek_T, Label))
    return ss_H
]]></artwork>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>Hybrid KEM constructions aim to provide security by combining two or more
schemes so that security is preserved if all but one schemes are replaced by
an arbitrarily bad scheme. Informally, these hybrid KEMs are secure if the
<tt>KDF</tt> is secure, and either the traditional component is secure, or the
post-quantum KEM is secure: this is the 'hybrid' property. Next we describe
this document's specific security goals for hybrid KEMs.</t>
      <section anchor="security-properties">
        <name>Cryptographic Security Goals for Hybrid KEMs</name>
        <section anchor="ind-cca">
          <name>IND-CCA Security</name>
          <t>The first goal we have for our hybrid KEM constructions is
indistinguishability under adaptive chosen ciphertext attack, or
IND-CCA. This is most common security goal for KEMs and public-key
encryption.</t>
          <t>For KEMs, IND-CCA requires that no efficient adversary, given a ciphertext
obtained by running <tt>Encaps()</tt> with an honestly-generated public key, can
distinguish whether it is given the "real" secret output from <tt>Encaps()</tt>, or a
random string unrelated to the <tt>Encaps()</tt> call that created that
ciphertext. (Readers should note that this definition is slightly different
than the corresponding one for public-key encryption <xref target="RS92"/>.)</t>
        </section>
      </section>
      <section anchor="binding-properties">
        <name>Binding Properties</name>
        <t>It is often useful for a KEM to have certain "binding" properties, by which
certain parameters determine certain others. Recent work <xref target="CDM23"/> gave a
useful framework of definitions for these binding properties. Binding for
KEMs is related to other properties for KEMs and public-key encryption, such
as robustness <xref target="GMP22"/> <xref target="ABN10"/>, and collision-freeness <xref target="MOHASSEL10"/>.</t>
        <t>The framework given by <xref target="CDM23"/> refers to these properties with labels of
the form X-BIND-P-Q.  The first element X is the attack model---HON, LEAK, or
MAL.  P,Q means that given the value P, it is hard to produce another Q that
causes Decaps to succeed.  For example, LEAK-BIND-K-PK means that for a given
shared secret (K), there is a unique encapsulation key (PK) that could have
produced it, even if all of the secrets involved are given to the adversary
after the encapsulation operation is completed (LEAK).</t>
        <t>We treat LEAK-BIND-K-PK and LEAK-BIND-K-CT to be target binding properties.
The HON-BIND security model seems too weak for real applications---real
attacks in the LEAK model are known <xref target="BJKS24"/> <xref target="FG24"/>. We are not aware
of any common settings where the MAL-BIND security model is needed; thus,
LEAK-BIND seems a sensible middle ground.</t>
        <t>The LEAK-BIND-K-PK and LEAK-BIND-K-CT properties independently allow using
a KEM shared secret such that the likelihood of finding a colliding value with the
encapsulation key used in its computation or the ciphertext used in its
computation is negligible. Such properties are attractive when integrating
KEMs into protocols where once protocol designers would have used
Diffie-Hellman, as they can use the smaller shared secret value alone as an
input to a protocol key schedule for example, without necessarily also needing
to include the much larger ciphertext or the encapsulation key to be
protected against key confusion attacks <xref target="FG24"/> or KEM re-encapsulation
attacks <xref target="BJKS24"/>. Protocol designers may still need or want to include the
ciphertext or encapsulation key into their protocol or key schedule for other
reasons, but that can be independent of the specific properties of the KEM
and its resulting shared secret.</t>
        <t>Implementors should not interpret the paragraph above as absolving them
of their responsibility to carefully think through whether MAL-BIND attacks
apply in their settings.</t>
      </section>
      <section anchor="non-goals">
        <name>Security Non-goals for Hybrid KEMs</name>
        <t>Security properties that were considered and not included in these designs:</t>
        <t>Anonymity <xref target="GMP22"/>, Deniability, Obfuscation, other forms of key-robustness
or binding <xref target="GMP22"/>, <xref target="CDM23"/></t>
        <!-- todo: distinguish key binding from the things we call X-BIND-K-[CT/PK]
above but haven't explained yet -->

</section>
      <section anchor="security-requirements">
        <name>Security Requirements for Constituent Components</name>
        <section anchor="security-kems">
          <name>Security Requirements for KEMs</name>
          <t>Component KEMs <bcp14>MUST</bcp14> be IND-CCA-secure <xref target="GHP2018"/> <xref target="XWING"/>.</t>
          <t>For instances of QSF, the component KEM <bcp14>MUST</bcp14> also be ciphertext second
preimage resistant (C2PRI) <xref target="XWING"/>: this allows the component KEM
encapsulation key and ciphertext to be left out from the KDF input.</t>
          <section anchor="c2pri">
            <name>Ciphertext Second Preimage Resistant (C2PRI) Security</name>
            <t>Roughly, C2PRI <xref target="XWING"/> says that an adversary given an honestly-generated
key pair (sk, pk) and the result of an <em>honest</em> Encaps(pk) - call it k, c -
cannot find a <em>distinct</em> c' such that Decaps(sk, c') = k. A related notion has
also been described as chosen-ciphertext resistance (CCR) <xref target="CDM23"/>. C2PRI targets
preimage-resistance, whereas CCR targets collision-resistance <xref target="CAMPBELL25"/>.</t>
          </section>
        </section>
        <section anchor="security-groups">
          <name>Security Requirements for Groups</name>
          <t>The groups <bcp14>MUST</bcp14> be modelable as nominal groups in which the strong
Diffie-Hellman problem holds <xref target="ABH_21"/> <xref target="XWING"/>.</t>
          <t>Prime-order groups such as P-256, P-384, and P-521 and the Montgomery curves
Curve25519 and Curve448 have been shown to be modelable as nominal groups in
<xref target="ABH_21"/>, as well as showing the <tt>X25519()</tt> and <tt>X448()</tt> functions
respectively pertain to the nominal group <tt>exp(X, y)</tt> function, specifically
clamping secret keys when they are generated, instead of clamping secret keys
together with exponentiation.</t>
        </section>
        <section anchor="security-kdfs">
          <name>Security Requirements for KDFs</name>
          <t>The KDF <bcp14>MUST</bcp14> be indifferentiable from a random oracle (RO) <xref target="MRH03"/>, even to
a quantum attacker <xref target="BDFL_10"/> <xref target="ZHANDRY19"/>.  This is a conservative choice
given a review of the existing security analyses for our hybrid KEM
constructions.  (In short, most IND-CCA analyses require only that the KDF is
some kind of pseudorandom function, but the SDH-based IND-CCA analysis of QSF
in <xref target="XWING"/> relies on the KDF being a RO. Proofs of our target binding
properties for our hybrid KEMs require the KDF is a collision-resistant
function.)</t>
          <t>If the KDF is a RO, the key derivation step in the hybrid KEMs can be viewed
as applying a (RO-based) pseudorandom function - keyed with the shared
secrets output by the constituent KEMs - to the other inputs. Thus, analyses
which require the KDF to be a PRF, such as the one given in GHP <xref target="GHP2018"/>
or the standard-model analysis of QSF in <xref target="XWING"/>, apply.</t>
          <t>Sponge-based constructions such as SHA-3 have been shown to be
indifferentiable against classical <xref target="BDP_08"/> as well as quantum adversaries
<xref target="ACM_25"/>.</t>
          <t>HKDF has been shown to be indifferentiable from a random oracle under
specific constraints <xref target="LBB20"/>:</t>
          <ul spacing="normal">
            <li>
              <t>that HMAC is indifferentiable from a random oracle,
which for HMAC-SHA-256 has been shown in <xref target="DRS_13"/>, assuming the
compression function underlying SHA-256 is a random oracle,
which it is indifferentiably when used prefix-free.</t>
            </li>
            <li>
              <t>the values of <tt>HKDF</tt>'s <tt>IKM</tt> input do not collide with
values of <tt>info</tt> <tt>||</tt> <tt>0x01</tt>. This <bcp14>MUST</bcp14> be enforced by the
concrete instantiations that use <tt>HKDF</tt> as its KDF.</t>
            </li>
          </ul>
          <t>The choice of the KDF security level <bcp14>SHOULD</bcp14> be made based on the
security level provided by the constituent KEMs. The KDF <bcp14>SHOULD</bcp14>
at least have the security level of the strongest constituent KEM.</t>
        </section>
        <section anchor="security-prgs">
          <name>Security Requirements for PRGs</name>
          <t>The functions used to expand a key seed to multiple key seeds is closer to a
pseudorandom generator (PRG) in its security requirements <xref target="AOB_24"/>.  A
secure PRG is an algorithm PRG : {0, 1}<sup>n</sup> → {0, 1}<sup>m</sup>,
such that no polynomial-time adversary can distinguish between PRG(r) (for r
$← {0, 1}<sup>n</sup>) and a random z $← {0, 1}<sup>m</sup> <xref target="Rosulek"/>.  The
uniform string r ∈ {0, 1}<sup>n</sup> is called the seed of the PRG.</t>
          <t>A PRG is not to be confused with a random (or pseudorandom) <em>number</em>
generator (RNG): a PRG requires the seed randomness to be chosen uniformly
and extend it; an RNG takes sources of noisy data and transforms them into
uniform outputs.</t>
          <t>PRGs are related to extendable output functions (XOFs) which can be
built from random oracles. Examples include SHAKE256.</t>
        </section>
        <section anchor="security-pre">
          <name>Security Properties of PRE</name>
          <t>The PRE hybrid KEM framework uses a function <tt>KeyHash</tt> to generate a short
digest of the encapsulation keys.  This function <bcp14>MUST</bcp14> be collision-resistant.</t>
        </section>
      </section>
      <section anchor="security-properties-of-hybrid-kems-frameworks">
        <name>Security Properties of Hybrid KEMs Frameworks</name>
        <section anchor="ind-cca-analyses">
          <name>IND-CCA analyses</name>
          <t>The QSF construction has two complementary IND-CCA analyses. Both were given
in <xref target="XWING"/>. We summarize them but elide some details.</t>
          <t>One analysis (Theorem 1) <xref target="XWING"/> shows that if the KDF is modelled as a RO,
IND-CCA holds if the PQ KEM is broken, as long as the SDH problem holds in
the nominal group and the PQ KEM satisfies C2PRI. The other (Theorem 2)
<xref target="XWING"/> shows that if the PQ-KEM is IND-CCA and the KDF is a PRF keyed on
the PQ-KEM's shared secret, IND-CCA holds.</t>
          <t>As long as the aforementioned security requirements of the component parts
are met, these analyses imply that this document's QSF construction satisfies
IND-CCA security.</t>
          <t>This document's exact GHP and PRE constructions do not have IND-CCA analyses;
the GHP paper gives a slightly different version, namely they do not include
the public encapsulation keys in the KDF. However, we argue that the proof
goes through with trivial modifications if the public encapsulation keys are
included in the KDF. The relevant step is claim 3 of Theorem 1, which reduces
to the split-key pseudorandomness of the KDF. (GHP call the KDF a "core"
function, and denote it as W.) We observe that adding the public
encapsulation keys to the inputs only changes the concrete contents of the
reduction's queries to its oracle. Since the reduction chooses the public
encapsulation keys itself, they can be added to the oracle inputs, and the
remainder of the proof goes through unmodified.</t>
          <t>We also argue that this extension applies, again with nearly trivial
modifications, to prove security of PRE. Observe that the only difference
between GHP and PRE is prehashing of the public encapsulation keys. As long
as the hash function is collision-resistant, any event that happens in the
IND-CCA game of GHP happens only with negligibly different probability in the
IND-CCA game of PRE.</t>
          <t>We reiterate that modulo some low-level technical details, our requirement
that the KDF is indifferentiable from an RO implies that, in the ROM, the KDF
used in GHP and PRE meets the split-key pseudorandomness property used in
GHP's analysis. <!-- TODO: apparently there is no good citation for this
foklore, maybe we can explicitly lay it out -->
          </t>
          <t>Therefore all three hybrid KEMs in this document are IND-CCA when
instantiated with cryptographic components that meet the security
requirements described above. Any changes to the algorithms, including key
generation/derivation, are not guaranteed to produce secure results.</t>
        </section>
        <section anchor="binding-analyses">
          <name>Binding analyses</name>
          <t>There are three hybrid KEM frameworks, and two target binding properties, so
we need six total analyses. None of these exact results were known; thus the
following are new results by the editorial team. We include informal
justifications here and defer rigorous proofs to a forthcoming paper.</t>
          <t>We note that these sketches implicitly ignore the fact that in our hybrid
KEMs, both key pairs are derived from a common random seed; we instead
implicitly think of them as two runs of DeriveKeyPair with independent random
seeds.  We justify this simplification by noting that in the LEAK model - in
which the adversary is given the key pairs resulting from an honest run of
KeyGen - the pseudorandomness of the seed expansion implies the adversary's
input distributions in the two cases are computationally
indistinguishable. The derivation of component scheme key pairs from the
common random seed provides further protection against manipulation or
corruption of keys such that it can contribute to stronger binding properties
against a MAL adversary, as well as operational benefits in practice, but we
do not prove that here. <!-- TODO: if we can prove MAL for some of these,
should we do that here? OTherwise we should link to the QSF MAL-BIND proofs
in the X-Wing eprint, if we ever get that updated... -->
          </t>
          <section anchor="ghp-binding">
            <name>GHP Binding</name>
            <section anchor="leak-bind-k-ct-of-ghp">
              <name>LEAK-BIND-K-CT of GHP</name>
              <t>Claim: If KDF is collision-resistant, then GHP is LEAK-BIND-K-CT.</t>
              <t>Justification: To win LEAK-BIND-K-CT, given knowledge of two
honestly-generated GHP secret keys, the adversary must construct two distinct
GHP ciphertexts that decapsulate to the same (non-bot) key. Since GHP
includes the ciphertexts in the key derivation, the condition that the
ciphertexts are distinct directly implies that a LEAK-BIND-K-CT win gives a
collision in the KDF.</t>
            </section>
          </section>
          <section anchor="leak-bind-k-pk-of-ghp">
            <name>LEAK-BIND-K-PK of GHP</name>
            <t>Claim: If KDF is collision-resistant, then GHP is LEAK-BIND-K-PK.</t>
            <t>Justification: As described above, in the LEAK-BIND-K-PK game, to win the
adversary must construct two ciphertexts that decapsulate to the same non-bot
key, for distinct GHP public keys. Again, since GHP includes the public keys
in the KDF, the distinctness condition implies a LEAK-BIND-K-PK win must
collide the KDF.</t>
          </section>
          <section anchor="pre-binding">
            <name>PRE Binding</name>
            <section anchor="leak-bind-k-ct-of-pre">
              <name>LEAK-BIND-K-CT of PRE</name>
              <t>Claim: If KDF is collision-resistant, then PRE is LEAK-BIND-K-CT.</t>
              <t>Justification: PRE and GHP do not differ on how they incorporate the
ciphertexts into key derivation, so the GHP proof above applies.</t>
            </section>
            <section anchor="leak-bind-k-pk-of-pre">
              <name>LEAK-BIND-K-PK of PRE</name>
              <t>Claim: If KDF and KeyHash are collision-resistant, then PRE is
LEAK-BIND-K-PK.</t>
              <t>Justification: The only relevant difference between PRE and GHP is key
prehashing. This does indeed change the proof, since we can no longer argue
the distinctness condition on the public keys <em>directly</em> gives a collision in
KDF - the keys are hashed, and only their hash is input into the
KDF. However, as long as KeyHash is collision-resistant, the distinctness
condition implies the public key hashes are distinct. Thus, for the adversary
to win it must either collide KeyHash or KDF.</t>
            </section>
          </section>
          <section anchor="qsf-binding">
            <name>QSF Binding</name>
            <t>The LEAK-BIND proofs for QSF are a bit more subtle than for GHP and PRE; the
main reason for this is QSF's omission of the PQ KEM key and ciphertext from
the KDF. We will show that QSF still has our target LEAK-BIND properties as
long as the underlying PQ-KEM also has the corresponding LEAK-BIND
property. We note that our preliminary results suggest a different proof
strategy, which instead directly uses properties of the nominal group, may
work here; we present the PQ-KEM route for concreteness.</t>
            <section anchor="leak-bind-k-ct-of-qsf">
              <name>LEAK-BIND-K-CT of QSF</name>
              <t>Claim: If KDF is collision-resistant and the PQ KEM is LEAK-BIND-K-CT, then
QSF is LEAK-BIND-K-CT.</t>
              <t>Justification: To win the adversary must construct two distinct QSF
ciphertexts that decapsulate to the same non-bot key.  Call the QSF
ciphertexts output by the adversary (ct_T^0, ct_PQ^0) and (ct_T^1,
ct_PQ^1). Distinctness implies (ct_T^0, ct_PQ^0) != (ct_T^1, ct_PQ^1). Since
ct_T is included in the KDF, if ct_T^0 != ct_T^1, a win must collide the KDF.</t>
              <t>Thus we can restrict attention to the case where ct_PQ^0 != ct_PQ^1 but
ct_T^0 = ct_T^1. In this case, there are two relevant sub-cases: either
ss_PQ^0 (:= KEM_PQ.Decap(dk_PQ^0, ct_PQ^0)) is not equal to ss_PQ^1 (:=
KEM_PQ.Decap(dk_PQ^1, ct_PQ^1), or they are equal. If they are not equal, the
KDF inputs are again distinct, so a LEAK-BIND-K-CT win must collide the KDF.</t>
              <t>If ss_PQ^0 = ss_PQ^1, we can show a reduction to the LEAK-BIND-K-CT security
of the PQ KEM. The reduction is given two PQ KEM key pairs as input and must
output two distinct PQ KEM ciphertexts that decapsulate to the same key. The
reduction does this by generating two nominal-group key pairs and running the
QSF LEAK-BIND-K-CT adversary on all keys. Then the reduction outputs the PQ
KEM ciphertexts output by the adversary. The probability that the adversary
wins and ss_PQ^0 = ss_PQ^1 and ct_PQ^0 != ct_PQ^1 and ct_T^0 = ct_T^1 is a
lower bound on the probability of the reduction winning the LEAK-BIND-K-CT
game against the PQ KEM.</t>
              <t>We conclude by noting these cases are exhaustive.</t>
            </section>
            <section anchor="leak-bind-k-pk-of-qsf">
              <name>LEAK-BIND-K-PK of QSF</name>
              <t>Claim: If KDF is collision-resistant and the PQ KEM is LEAK-BIND-K-PK, then
QSF is LEAK-BIND-K-PK.</t>
              <t>Justification: Similar to the above, we proceed by a case analysis on the win
condition of the LEAK-BIND-K-PK game.  The condition is (ek_T^0, ek_PQ^0) !=
(ek_T^1, ek_PQ^1) and ss_H^0 = ss_H^1. Again, as above we argue that the only
nontrivial case is the one where ek_PQ^0 != ek_PQ^1 but ek_T^0 = ek_T^1: in
the other case we can directly get a KDF collision from a winning output. In
this case the result of KEM_PQ.Decap for the two PQ KEM keys can either be
the same or different. IF they are different, we again get a KDF collision
from a win. If they are the same, in a similar way as above, we can build a
reduction to the LEAK-BIND-K-PK of PQ KEM.</t>
              <t>Again, we conclude by noting that these cases are exhaustive.</t>
            </section>
          </section>
        </section>
      </section>
      <section anchor="other-considerations">
        <name>Other Considerations</name>
        <section anchor="domain-separation">
          <name>Domain Separation</name>
          <t>ASCII-encoded bytes provide oracle cloning <xref target="BDG2020"/> in the security game
via domain separation. The IND-CCA security of hybrid KEMs often relies on
the KDF function <tt>KDF</tt> to behave as an independent random oracle, which the
inclusion of the <tt>label</tt> achieves via domain separation <xref target="GHP2018"/>.</t>
          <t>By design, the calls to <tt>KDF</tt> in these frameworks and usage anywhere else
in higher level protocol use separate input domains unless intentionally
duplicating the 'label' per concrete instance with fixed parameters. This
justifies modeling them as independent functions even if instantiated by the
same KDF. This domain separation is achieved by using prefix-free sets of
<tt>label</tt> values. Recall that a set is prefix-free if no element is a prefix of
another within the set.</t>
          <t>Length differentiation is sometimes used to achieve domain separation but as a
technique it is brittle and prone to misuse <xref target="BDG2020"/> in practice so we
favor the use of an explicit post-fix label.</t>
        </section>
        <section anchor="fixed-length">
          <name>Fixed-length</name>
          <t>Variable-length secrets are generally dangerous. In particular, using key
material of variable length and processing it using hash functions may result
in a timing side channel. In broad terms, when the secret is longer, the hash
function may need to process more blocks internally. In some unfortunate
circumstances, this has led to timing attacks, e.g. the Lucky Thirteen
<xref target="LUCKY13"/> and Raccoon <xref target="RACCOON"/> attacks.</t>
          <t>Furthermore, <xref target="AVIRAM"/> identified a risk of using variable-length secrets when
the hash function used in the key derivation function is no longer
collision-resistant.</t>
          <t>If concatenation were to be used with values that are not fixed-length, a
length prefix or other unambiguous encoding would need to be used to ensure
that the composition of the two values is injective and requires a mechanism
different from that specified in this document.</t>
          <t>Therefore, this specification <bcp14>MUST</bcp14> only be used with algorithms which have
fixed-length shared secrets.</t>
        </section>
      </section>
    </section>
    <section anchor="in-scope">
      <name>In Scope</name>
      <section anchor="ghp-framework">
        <name>GHP Framework</name>
        <t>The GHP framework works for generic IND-CCA component schemes. GHP also has
an IND-CCA proof from <xref target="GHP2018"/>. Including the public encapsulation keys as
part of the KDF preimage fits in the 'additional data' parts of the split key
PRF proof there, and binds to the encapsulation keys, which is a nice
property for protocols integrating concrete instances. GHP also matches NIST
SP 800-227 IPD, and gives good binding properties <xref target="binding-properties"/> is
generally safe with no caveats on use for constructing concrete instances
using a broad array of components.</t>
      </section>
      <section anchor="qsf-framework">
        <name>QSF Framework</name>
        <t>QSF works for most elliptic curve groups and C2PRI-secure quantum-resistant
KEMs.  It is an optimization that leaves out large ciphertexts and
encapsulation keys from the KDF preimage, saving extra hashing, if the PQ KEM
meets requirements. More KEMs can be proven to be C2PRI-secure eventually for
use with QSF.</t>
      </section>
      <section anchor="pre-framework">
        <name>PRE Framework</name>
        <t>PRE offers many of the same benefits as GHP, while allowing an optimization
to pre-hash static encapsulation keys, which if large, can be a performance
improvement.</t>
      </section>
    </section>
    <section anchor="out-of-scope">
      <name>Out of Scope</name>
      <t>Considerations that were considered and not included in these designs:</t>
      <t>Anonymity <xref target="GMP22"/>, Deniability, Obfuscation, other forms of key-robustness
or binding <xref target="GMP22"/>, <xref target="CDM23"/></t>
      <section anchor="more-than-two-component-kems">
        <name>More than Two Component KEMs</name>
        <t>Design team decided to restrict the space to only two components, a
traditional and a post-quantum KEM.</t>
      </section>
      <section anchor="parameterized-output-length">
        <name>Parameterized Output Length</name>
        <t>Not analyzed as part of any security proofs in the literature, and a
complication deemed unnecessary.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="FIPS202">
          <front>
            <title>SHA-3 standard :: permutation-based hash and extendable-output functions</title>
            <author>
              <organization/>
            </author>
            <date year="2015"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.202"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="FIPS203">
          <front>
            <title>Module-lattice-based key-encapsulation mechanism standard</title>
            <author>
              <organization/>
            </author>
            <date month="August" year="2024"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.203"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </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="ABR01">
          <front>
            <title>The Oracle Diffie-Hellman Assumptions and an Analysis of DHIES</title>
            <author initials="" surname="Michel Abdalla">
              <organization/>
            </author>
            <author initials="" surname="Mihir Bellare">
              <organization/>
            </author>
            <author initials="" surname="Phillip Rogaway">
              <organization/>
            </author>
            <date year="2001" month="January"/>
          </front>
        </reference>
        <reference anchor="ABH_21">
          <front>
            <title>Analysing the HPKE standard.</title>
            <author initials="" surname="Joël Alwen">
              <organization/>
            </author>
            <author initials="" surname="Bruno Blanchet">
              <organization/>
            </author>
            <author initials="" surname="Eduard Hauck">
              <organization/>
            </author>
            <author initials="" surname="Eike Kiltz">
              <organization/>
            </author>
            <author initials="" surname="Benjamin Lipp">
              <organization/>
            </author>
            <author initials="" surname="Doreen Riepel">
              <organization/>
            </author>
            <date year="2021" month="April"/>
          </front>
        </reference>
        <reference anchor="ABN10" target="https://eprint.iacr.org/2008/440.pdf">
          <front>
            <title>Robust Encryption</title>
            <author>
              <organization/>
            </author>
            <date year="2010"/>
          </front>
        </reference>
        <reference anchor="ACM_25" target="https://eprint.iacr.org/2025/731.pdf">
          <front>
            <title>The Sponge is Quantum Indifferentiable</title>
            <author>
              <organization/>
            </author>
            <date year="2025"/>
          </front>
        </reference>
        <reference anchor="ANSIX9.62">
          <front>
            <title>Public Key Cryptography for the Financial Services Industry: the Elliptic Curve Digital Signature Algorithm (ECDSA)</title>
            <author>
              <organization>ANS</organization>
            </author>
            <date year="2005" month="November"/>
          </front>
          <seriesInfo name="ANS" value="X9.62-2005"/>
        </reference>
        <reference anchor="AOB_24" target="https://eprint.iacr.org/2024/843.pdf">
          <front>
            <title>Formally verifying Kyber Episode V: Machine-checked IND-CCA security and correctness of ML-KEM in EasyCrypt</title>
            <author>
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="AVIRAM" target="https://mailarchive.ietf.org/arch/msg/tls/F4SVeL2xbGPaPB2GW_GkBbD_a5M/">
          <front>
            <title>[TLS] Combining Secrets in Hybrid Key Exchange in TLS 1.3</title>
            <author initials="" surname="Nimrod Aviram">
              <organization/>
            </author>
            <author initials="" surname="Benjamin Dowling">
              <organization/>
            </author>
            <author initials="" surname="Ilan Komargodski">
              <organization/>
            </author>
            <author initials="" surname="Kenny Paterson">
              <organization/>
            </author>
            <author initials="" surname="Eyal Ronen">
              <organization/>
            </author>
            <author initials="" surname="Eylon Yogev">
              <organization/>
            </author>
            <date year="2021" month="September" day="01"/>
          </front>
        </reference>
        <reference anchor="BDFL_10" target="https://eprint.iacr.org/2010/428.pdf">
          <front>
            <title>Random Oracles in a Quantum World</title>
            <author>
              <organization/>
            </author>
            <date year="2010"/>
          </front>
        </reference>
        <reference anchor="BDG2020" target="https://eprint.iacr.org/2020/241.pdf">
          <front>
            <title>Separate Your Domains: NIST PQC KEMs, Oracle Cloning and Read-Only Indifferentiability</title>
            <author>
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="BDP_08" target="https://www.iacr.org/archive/eurocrypt2008/49650180/49650180.pdf">
          <front>
            <title>On the Indifferentiability of the Sponge Construction</title>
            <author>
              <organization/>
            </author>
            <date year="2008"/>
          </front>
        </reference>
        <reference anchor="BDP_11" target="https://keccak.team/files/CSF-0.1.pdf">
          <front>
            <title>Cryptographic sponge functions</title>
            <author>
              <organization/>
            </author>
            <date year="2011"/>
          </front>
        </reference>
        <reference anchor="BJKS24" target="https://www.usenix.org/system/files/usenixsecurity24-bhargavan.pdf">
          <front>
            <title>Formal verification of the PQXDH Post-Quantum key agreement protocol for end-to-end secure messaging</title>
            <author>
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="CAMPBELL25" target="https://mailarchive.ietf.org/arch/msg/cfrg/qp_YxofDEl5fN6W7Xyab-juwaCc/">
          <front>
            <title>Re: Binding and QSF-style hybrid KEMs</title>
            <author>
              <organization/>
            </author>
            <date year="2025"/>
          </front>
        </reference>
        <reference anchor="CDM23" target="https://eprint.iacr.org/2023/1933.pdf">
          <front>
            <title>Keeping Up with the KEMs: Stronger Security Notions for KEMs and automated analysis of KEM-based protocols</title>
            <author initials="C." surname="Cremers" fullname="Cas Cremers">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <author initials="A." surname="Dax" fullname="Alexander Dax">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <author initials="N." surname="Medinger" fullname="Niklas Medinger">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="DRS_13" target="https://eprint.iacr.org/2013/382.pdf">
          <front>
            <title>To Hash or Not to Hash Again? (In)differentiability Results for H^2 and HMAC</title>
            <author>
              <organization/>
            </author>
            <date year="2013"/>
          </front>
        </reference>
        <reference anchor="FIPS186">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization/>
            </author>
            <date month="February" year="2023"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.186-5"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="FG24" target="https://link.springer.com/chapter/10.1007/978-3-031-91823-0_5">
          <front>
            <title>Security Analysis of Signal's PQXDH Handshake</title>
            <author>
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="GHP2018" target="https://eprint.iacr.org/2018/024.pdf">
          <front>
            <title>KEM Combiners</title>
            <author initials="F." surname="Giacon" fullname="Federico Giacon">
              <organization/>
            </author>
            <author initials="F." surname="Heuer" fullname="Felix Heuer">
              <organization/>
            </author>
            <author initials="B." surname="Poettering" fullname="Bertram Poettering">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
        </reference>
        <reference anchor="GMP22" target="https://eprint.iacr.org/2021/708.pdf">
          <front>
            <title>Anonymous, Robust Post-Quantum Public-Key Encryption</title>
            <author initials="P." surname="Grubbs" fullname="P. Grubbs">
              <organization/>
            </author>
            <author initials="V." surname="Maram" fullname="V. Maram">
              <organization/>
            </author>
            <author initials="K.G." surname="Paterson" fullname="K.G. Paterson">
              <organization/>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="I-D.driscoll-pqt-hybrid-terminology">
          <front>
            <title>Terminology for Post-Quantum Traditional Hybrid Schemes</title>
            <author fullname="Flo D" initials="F." surname="D">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <date day="7" month="March" year="2023"/>
            <abstract>
              <t>   One aspect of the transition to post-quantum algorithms in
   cryptographic protocols is the development of hybrid schemes that
   incorporate both post-quantum and traditional asymmetric algorithms.
   This document defines terminology for such schemes.  It is intended
   to be used as a reference and, hopefully, to ensure consistency and
   clarity across different protocols, standards, and organisations.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-driscoll-pqt-hybrid-terminology-02"/>
        </reference>
        <reference anchor="KSMW2024" target="https://eprint.iacr.org/2024/1233">
          <front>
            <title>Binding Security of Implicitly-Rejecting KEMs and Application to BIKE and HQC</title>
            <author initials="J." surname="Kraemer">
              <organization/>
            </author>
            <author initials="P." surname="Struck">
              <organization/>
            </author>
            <author initials="M." surname="Weishaupl">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="LBB20" target="https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;arnumber=8806752">
          <front>
            <title>A Mechanised Cryptographic Proof of the WireGuard Virtual Private Network Protocol</title>
            <author>
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="LUCKY13" target="https://ieeexplore.ieee.org/iel7/6547086/6547088/06547131.pdf">
          <front>
            <title>Lucky Thirteen: Breaking the TLS and DTLS record protocols</title>
            <author initials="N. J." surname="Al Fardan">
              <organization/>
            </author>
            <author initials="K. G." surname="Paterson">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="HKDF">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="MOHASSEL10" target="https://www.iacr.org/archive/asiacrypt2010/6477505/6477505.pdf">
          <front>
            <title>A closer look at anonymity and robustness in encryption schemes.</title>
            <author>
              <organization/>
            </author>
            <date year="2010"/>
          </front>
        </reference>
        <reference anchor="MRH03" target="https://eprint.iacr.org/2003/161.pdf">
          <front>
            <title>Indifferentiability, Impossibility Results on Reductions, and Applications to the Random Oracle Methodology</title>
            <author>
              <organization/>
            </author>
            <date year="2003"/>
          </front>
        </reference>
        <reference anchor="RACCOON" target="https://raccoon-attack.com/">
          <front>
            <title>Raccoon Attack: Finding and Exploiting Most-Significant-Bit-Oracles in TLS-DH(E)</title>
            <author initials="R." surname="Merget">
              <organization/>
            </author>
            <author initials="M." surname="Brinkmann">
              <organization/>
            </author>
            <author initials="N." surname="Aviram">
              <organization/>
            </author>
            <author initials="J." surname="Somorovsky">
              <organization/>
            </author>
            <author initials="J." surname="Mittmann">
              <organization/>
            </author>
            <author initials="J." surname="Schwenk">
              <organization/>
            </author>
            <date year="2020" month="September"/>
          </front>
        </reference>
        <reference anchor="RS92" target="https://link.springer.com/chapter/10.1007/3-540-46766-1_35">
          <front>
            <title>Non-Interactive Zero-Knowledge Proof of Knowledge and Chosen Ciphertext Attack.</title>
            <author>
              <organization/>
            </author>
            <date year="1992"/>
          </front>
        </reference>
        <reference anchor="Rosulek" target="https://joyofcryptography.com/pdf/book.pdf">
          <front>
            <title>The Joy of Cryptography</title>
            <author>
              <organization/>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="RSS11" target="https://eprint.iacr.org/2011/339.pdf">
          <front>
            <title>Careful with Composition: Limitations of Indifferentiability and Universal Composability</title>
            <author>
              <organization/>
            </author>
            <date year="2011"/>
          </front>
        </reference>
        <reference anchor="SCHMIEG2024" target="https://eprint.iacr.org/2024/523.pdf">
          <front>
            <title>Unbindable Kemmy Schmidt: ML-KEM is neither MAL-BIND-K-CT nor MAL-BIND-K-PK</title>
            <author initials="S." surname="Schmieg" fullname="Sophie Schmieg">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="SEC1" target="https://secg.org/sec1-v2.pdf">
          <front>
            <title>Elliptic Curve Cryptography, Standards for Efficient Cryptography Group, ver. 2</title>
            <author>
              <organization/>
            </author>
            <date year="2009"/>
          </front>
        </reference>
        <reference anchor="XWING" target="https://eprint.iacr.org/2024/039.pdf">
          <front>
            <title>X-Wing: The Hybrid KEM You’ve Been Looking For</title>
            <author>
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="ZHANDRY19" target="https://doi.org/10.1007/978-3-030-26951-7_9">
          <front>
            <title>How to Record Quantum Queries, and Applications to Quantum Indifferentiability</title>
            <author>
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="I-D.ietf-pquip-pqt-hybrid-terminology">
          <front>
            <title>Terminology for Post-Quantum Traditional Hybrid Schemes</title>
            <author fullname="Flo D" initials="F." surname="D">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <author fullname="Michael P" initials="M." surname="P">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <author fullname="Britta Hale" initials="B." surname="Hale">
              <organization>Naval Postgraduate School</organization>
            </author>
            <date day="10" month="January" year="2025"/>
            <abstract>
              <t>   One aspect of the transition to post-quantum algorithms in
   cryptographic protocols is the development of hybrid schemes that
   incorporate both post-quantum and traditional asymmetric algorithms.
   This document defines terminology for such schemes.  It is intended
   to be used as a reference and, hopefully, to ensure consistency and
   clarity across different protocols, standards, and organisations.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-pquip-pqt-hybrid-terminology-06"/>
        </reference>
      </references>
    </references>
    <?line 1167?>

<section anchor="deterministic-encapsulation">
      <name>Deterministic Encapsulation</name>
      <t>When verifying the behavior of a KEM implementation (e.g., by generating or
verifying test vectors), it is useful for the implementation to expose a
"derandomized" version of the <tt>Encaps</tt> algorithm:</t>
      <ul spacing="normal">
        <li>
          <t><tt>EncapsDerand(ek, randomness) -&gt; (ct, shared_secret)</tt>: A deterministic
 encapsulation algorithm, which takes as input a public encapsulation key
 <tt>ek</tt> and randomness <tt>randomness</tt>, and outputs a ciphertext <tt>ct</tt> and shared
 secret <tt>shared_secret</tt>.</t>
        </li>
      </ul>
      <t>An implementation that exposes <tt>EncapsDerand</tt> must also define a required
amount of randomness:</t>
      <ul spacing="normal">
        <li>
          <t><tt>Nrandom</tt>: The length in bytes of the randomness provided to EncapsDerand</t>
        </li>
      </ul>
      <t>The corresponding change for a nominal group is to replace randomly-generated
inputs to <tt>RandomScalar</tt> with deterministic ones.  In other words, for a
nominal group, <tt>Nrandom = Nseed</tt>.</t>
      <t>When a hybrid KEM is instantiated with constituents that support derandomized
encapsulation (either KEMs or groups), the hybrid KEM can also support
<tt>EncapsDerand()</tt>, with <tt>Nrandom = T.Nrandom + PQ.Nrandom</tt>.  The structure of
the hybrid KEM's <tt>EncapsDerand</tt> algorithm is the same as its <tt>Encaps</tt> method,
with the following differences:</t>
      <ul spacing="normal">
        <li>
          <t>The <tt>EncapsDerand</tt> algorithm also takes a <tt>randomness</tt> parameter, which is a
byte string of length <tt>Nrandom</tt>.</t>
        </li>
        <li>
          <t>Invocations of <tt>Encaps</tt> or <tt>RandomScalar</tt> (with a random input) in the constituent
algorithms are replaced with calls to <tt>EncapsDerand</tt> or <tt>RandomScalar</tt> with a
deterministic input.</t>
        </li>
        <li>
          <t>The randomness used by the traditional constituent is the first <tt>T.Nrandom</tt>
bytes of the input randomness.</t>
        </li>
        <li>
          <t>The randomness used by the PQ constituent is the final <tt>PQ.Nrandom</tt> bytes of
the input randomness.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+192XIbV5bg+/2K29TEiCwB4CbJEqtc1dwksiguImnLbrdb
TAAXQJqJTDgzQRKm1TFPHf04MW/zNu/zFzN/Ul8yZ7tLJhIU7XJX90S0wmGS
QOZdzj37dtvttirjMjFbeulg1s3jvj57v3qpj8xM76e9aFJMk6iMs1Qfm94o
SuNiXCypqNvNzc2WHtEb7WszLlQvKs0wy2dbOk4HmVL9rJdGYxi3n0eDsh3n
5aDdG+TDdvBSe+2FKqbdcVwUMEU5m8Djh+eXb1QvSwuTFtNiSw+ipDAKJttU
t1l+Pcyz6QQWu5vPJmWm32T5dLykVDQtR1m+pXRbafg3mCYJz75n4ryfG72b
pWmWJDP6OsuHsJWfaGNb+iJK+93sbvs9fWfGUZzAqqcwcC+fFuU0mY7/foif
dnrZeH6G8xgAk/f1TpSnpmgYfzcuelk4dp50/z6e3HSKu/nRzqJpot/m0263
aaiv0vjG5EVcznQ20Mcwcwxfh2NP4P0hvb6+EaxaqTTLxzDKjQEg6TeHZxcb
axsAntPDzvpa5+XaxqvVk8OLyw5+04Gv3EObix/aVArPOhh3e+d8bX2L1mOx
6nJk9Gke9RKj9+LBIDbtA5Mk4yjV20UxHU9wY4WGI9D4URolsyIucHd7B4f7
F0s0Vh9wa0v/OUpbemNtbZ0+cydO/9ryUwP2AdIgZEyit7v9KEmiRc+M4lzv
wGKi3DQ/cjaKkySe6PNsGN1GM9rgwbON2g5l0elQl7DXg7OjfV2UsCFAik64
/u1JHie4g41H7ODP2f/937CB5NakzQ/s5NM00ztJlMJWy+Zn9vtTxMyDaNq7
XvBEfG30UZyUPy2YxaQ/ROM41e/iyaT5kb0sNyYFMjATkxCITtbXqhA6z7pA
SMhQkGrhwEOwbKytr/HTUT40JXCVspwUW6urBuCVlp046uUdIINVOPpXq8+f
r3Um/QHOs3v8bOPFPLJdTLJ0aDQg0ftplJbTsT5M+4B5JjdpGUfdxFRn33jx
yNk3Xqx+sbluZz+5OPzmdeflRnUBZ9NuEveIfTKHGubRZDTTQCWEHW/iFA4s
jhJ9YfKbuGcKXB0ABxknPrCPCFfCELvT/AZJZhiX+HQ8TKNyCoxsOwEuG5ej
sV7e39272F4Jd3OS3RCJ8JYKk8emQBK1SLYEy17a0rTwtntuESLCtrdwo7jd
051nG8+re32DlA8sVQNLigczJICjWdfken8SF1nf6K+ByCJgUalpA472rk1f
H57stXd3t2FpvWmObAwJv5fluemVwD2J8I/ftY/2jwG59H5UzAiMtRN7/tgT
e7766vmmPbGvD8+3j7caX0U+GeWw1BvTiU05oPfxg9VxMVwtk2L1zfOLr827
jbvu27PobGfj7YePb693unsfoxfHqxWofHf57uJ7EDfjbpwiSC5MLzdlgdsR
AUuy9Q6lKaJpquEFvd7ZrO1xvb32uv0YXncSj/Osr7dv4jwaf4aK97LbBBbV
/NQh8BJ9lI0BNlm/uI6bnzoyaToDMVWCHMoW8Kb9GaDseZYu4l37swQ0im+z
obmBL3b23rx7NscyADGysUgOgl7k6PlDlif9X8lC1tdWn2+8EpTY2XsLkK7N
fGEmUQ7DwvqmOUAMcIPADIIPdKNdDbhZtKxI24WN4CkjGp+bqN8+TYEgqgwn
TgDRlx6LsmurG88tkwnQYY2We/Zs7VV1tacpsY2GGZGUSs8PQQECLjPtefZb
X8zt7a1fiVDDqpnmGXFt5r6vX75YW3+15n6ZW+jaK1noek1KBuwQuFvBixpM
U1pQ0byia9PrRded0kTj1UEMeLC6e/GmvdaZh886EsrOn48umpkUs6i4x6qs
AObs/Td7B/osK8q2xaxrIM1oCPJsDIDUkzwrs16WEPc2ab9dZm34wczL6DHw
q2gIp/8o7oTQnYJSG98RfItZURq7K/7c8sSN5+0uaJTD6CZKZaO728dnO/vv
3tXl3Tn8byeGsxcUfA/gKcoZIOZIeA0gazNsH2Z5qKmv/jj5+O1dNtjbT14M
Tl5++OKbWdRt/zC9jXZ7q/MidHfveGOzurwjYya4tK8m+hZEFkEdVwQ6d5kj
AuTIHlkQnGSsCSKs8RlWCacl0F9pUDn0miF83e5GBXxqT2jBHhvIa3N1/fXm
5jx9bX6e0e52QKYDZuSF+5x19t2omPuGZOfu4cXZtgZ9dzzKQMXSu4BVsGfc
4qFVnAEfLQyap93u6L3orjbldmLuAEAwWPjdbzfpSQcMPkQrk9dmPomvE9jv
3Le/cu6984tn6zW0ucxAZS1GMCRihS7lz+0hcOI/6eXDdGWe2Z0bsFRLRp+D
f9og7Dk43t59LGKsb65uvtqY5yubYgitv3q5yBCCr9ov9BM7dnqTTKbdogO2
ctkZZjer+At+sopP19+TGd+8rTMuRxihTURqYPK0EN51ALssRtF1XaNt5kAg
+a87Be4czg2twlXQQSZwPquwp/W1tS9WX3/xqr3ZXttcb79ef7UBv31Ewn57
cAaAqMkd1NBYyQGsfzSQX63C4uaB/Gqe+NqCbm8MIHncy/RbGMfqG/7LJL4D
dJtaPLRf7Ji8BG0ImLspYYOs8rw9PtvYqJtuWTobZ1MQ6GKjVMQBa/NtcYZU
bJdHsJr11S/WXs1zmo0HOY14ATqhD2D++6+BPKMmdY+/Puq87YQq2mF7r9PP
0Q2RJO3Jj6X1wcADoBVmSTac4UqOLo4/IPY068iN6vX6xuZmBaJWGjn0Baw9
HE8AjPDArH1ufgBNn0wFy+O3J/gtMwYg9Z1DsJ+Jet8L8T5sJ3f0UR4h723+
HiB5gWrPAvv3uKM/mBhoaDpB2/Xdzk5dHdx2ni+QN1Ul5izPYHeiTXyIc/OW
zO2v47ycgs5xlsc3qEeemBI9V/g4Caua5vq6EdqxMeZukoBt3cFfWWcoo/GE
/9/5oZj8qZx8+V+jPJ2Owej68tWrtZdfvEDkevfV7tG3jqc+YtzYJF+svnzx
HND1pfwEQsVf1je9qmUB8g6AOdOXI9gl2P3oiDDRtfV+oC2Dh7eHv4BRl+Vz
Qjo8TnsaVubAaW4n+g1AUbxalQeOgCoqeH1wtPdmS5+/2X3x6iWC8fj0YPvi
Yv9d3ZjY1r0kA2tYJ1l2raMSloh0b+3PnEifzE+wM4yjdF2A2QpaXudBW2Pp
Qf05KvAj0p/B9Hj5/IsvXqy9sD8Rtjj28fnBWk0GNij0LSSkrCjimsiDhZ6b
Pmv2wMhqNFUgUeHRVCwqQGo4hT6RfnV3a5uPpP41UKVeWvQ4397dPT09acY5
mLGXZWk7Ksuod02Sp2br0fd6m77fQieJ02j3EVlj4hjHyJpRApImn5btnbhs
BwYioFx772B5f+UzeHaOug2ucP4rYAc7sM/rcZQ24B8gaGBlV74CxL3Ixlme
3RTXs8avj+OybB4W3+2Nbk16XTP52muI1OcXr2tS6wRgeYiKVdRDx6v+B5Nn
7aMUbHvTB6PKsSX/EUJydwQkkOrdeDIC6WjuSoF3BbvXX7/e+JXKw2b7xfO1
9vOXX7x82V7/uImaw3kGGGqu5310f85IMIQusrr7o3EVP2SzbNAL3qKVAAqu
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
BGYJC9xO90515J40HfX/AGway0rPuwAA

-->

</rfc>
