<?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-04" category="info" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="hybrid-kems">Hybrid PQ/T Key Encapsulation Mechanisms</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-hybrid-kems-04"/>
    <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>
    <date year="2025" month="July" day="07"/>
    <workgroup>Crypto Forum</workgroup>
    <abstract>
      <?line 237?>

<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 245?>

<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
construted 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 ellpitic 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 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 framwork 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 framwork 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 associated with the hybrid KEM are mostly derived from the
concatenation of keys and ciphertexts:</t>
        <artwork><![CDATA[
Nek = KEM_T.Nek + KEM_PQ.Nek
Ndk = KEM_T.Ndk + KEM_PQ.Ndk
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>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 associated with the hybrid KEM are mostly derived from the
concatenation of keys and ciphertexts:</t>
        <artwork><![CDATA[
Nek = Group_T.Nelem + KEM_PQ.Nek
Ndk = Group_T.Nscalar + KEM_PQ.Ndk
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>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 paramters. 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 diffentiation 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
complicatation 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>
              <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 1157?>

<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/Ul8yZ7tLJhIU7XJ190S0wmGS
QOZdzj37dtvttirjMjFbeulg1s3jvj57v3qpj8xM76e9aFJMk6iMs1Qfm94o
SuNiXCypqNvNzc2WHtEb7WszLlQvKs0wy2dbOk4HmVL9rJdGYxi3n0eDsh3n
5aDdG+TDdvBSe+25KqbdcVwUMEU5m8Djh+eXb1QvSwuTFtNiSw+ipDAKJttU
t1l+Pcyz6QQWu5vPJmWm32T5dLykVDQtR1m+pXRbafg3mCYJz75n4ryfG72b
pWmWJDP6OsuHsJWfaGNb+iJK+93sbvs9fWfGUZzAqqcwcC+fFuU0mY7/foif
dnrZeH6G8xgAk/f1TpSnpmgYfzcuelk4dp50/z6e3HSKO6XSLB/DczcG1q7f
HJ5dbKxtwKpPDzvra52XaxuvVk8OLy47+E0HvnIPbS5+aFMpPIJg3O2d87X1
LVqCPezLkdGnedRLjN6LB4PYtA9MkoyjVG8XxXQ8waUXGiCj8aM0SmZFXOhs
oPcODvcvlmisPhz5lv5zlLb0xtraOn3mDoL+teWnBqSAszwGUJlEb3f7UZJE
i54ZxbnegcVEuWl+5GwUJ0k80efZMLqNZrTBg2cbtR3KotOhLmGvB2dH+7oo
YUNwVp1w/duTPE5wBxuP2MGfs//7v2EDya1Jmx/YyadppneSKIWtls3P7Pen
iDAH0bR3veCJ+Nroozgpf1owi0l/iMZxqt/Fk0nzI3tZbkwK2GkmJiEQnayv
VSF0nnUBv5HOkZjgwEOwbKytr/HTUT40JRB7WU6KrdVVA/BKy04c9fIOIPoq
HP2r1efP1zqT/gDn2T1+tvFiHtkuJlk6NBqQ6P00SsvpWB+mfcA8k5u0jKNu
Yqqzb7x45OwbL1a/2Fy3s59cHH7zuvNyo7qAs2k3iXvE1ZhxDPNoMpppoBLC
jjdxCgcWR4m+MPlN3DMFrg6Ag/wMH9hHhCthiN1pfoMkM4xLfDoeplE5Bf6y
nQDzi8vRWC/v7+5dbK+EuznJbohEeEuFyWNTIIlaJFuCZS9taVp42z23CBFh
21u4Udzu6c6zjefVvb5BygdOp29gnsEMCeBo1jW53p/ERdY3+msgsqg3ilPT
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
f7k0ACQwS1jfdrp3qiP3pOmo/wfzfEeF3boAAA==

-->

</rfc>
