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

<t>This document defines generic constructions for hybrid Key Encapsulation
Mechanisms (KEMs) based on combining a post-quantum (PQ) KEM with a
traditional cryptographic component. 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 280?>

<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 PQ KEM and a traditional algorithm.  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>We define four generic frameworks as variants of a common overall scheme.
The variations are based on (1) what type of cryptographic object is being
used for the traditional component, and (2) whether the PQ KEM is assumed to
have an additional property known as Ciphertext Second Preimage Resistance
(C2PRI).  Hybrid KEMs built using PQ KEMs that satisfy C2PRI can achieve the
same security level with more efficient computations, trading off performance
for an additional security assumption.</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="hybrid-ind-cca"/>.  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 <tt>Encaps</tt></t>
          </li>
          <li>
            <t><tt>Nss</tt>: The length in bytes of a shared secret produced by <tt>Encaps</tt> or
<tt>Decaps</tt></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>Groups used with the hybrid KEM framework in this document should be secure
with respect to the strong Diffie-Hellman problem (see <xref target="sdh"/>).</t>
      </section>
      <section anchor="prgs">
        <name>Pseudorandom Generators</name>
        <t>A pseudorandom generator (PRG) is a deterministic function whose outputs are
longer than its inputs. When the input is chosen uniformly at random, this
induces a certain distribution over the possible output. The output
distribution is pseudorandom if it is indistinguishable from the uniform
distribution.</t>
        <t>The <tt>PRG</tt>s used in this document have a simpler form, with 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><tt>PRG</tt>s used with the frameworks in this document <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 <tt>PRG</tt>s 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
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>Any KDF that utilizes HKDF <xref target="HKDF"/> <bcp14>MUST</bcp14> fully specify HKDF's salt, IKM,
info, and L arguments.</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 four frameworks for building hybrid KEMs.  These
frameworks are based on a common set of subroutines for things like key
generation and computing a final shared secret.</t>
      <t>The four frameworks vary along two axes:</t>
      <ol spacing="normal" type="1"><li>
          <t>Whether traditional component is a nominal group or a KEM</t>
        </li>
        <li>
          <t>Whether to rely on the C2PRI property for the post-quantum component</t>
        </li>
      </ol>
      <t>The choice of which framework to use when building a hybrid KEM will depend
on the application's needs along these two axes.</t>
      <table anchor="variants">
        <name>Hybrid KEM frameworks</name>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">PQ C2PRI?</th>
            <th align="left">T component</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">UG</td>
            <td align="left">No</td>
            <td align="left">Nominal group</td>
          </tr>
          <tr>
            <td align="left">UK</td>
            <td align="left">No</td>
            <td align="left">KEM</td>
          </tr>
          <tr>
            <td align="left">CG</td>
            <td align="left">Yes</td>
            <td align="left">Nominal group</td>
          </tr>
          <tr>
            <td align="left">CK</td>
            <td align="left">Yes</td>
            <td align="left">KEM</td>
          </tr>
        </tbody>
      </table>
      <t>Instantiating one of these frameworks creates a hybrid KEM <tt>KEM_H</tt> based on
the following constituent components:</t>
      <ul spacing="normal">
        <li>
          <t>A traditional component that is either a nominal group or a KEM:
          </t>
          <ul spacing="normal">
            <li>
              <t><tt>Group_T</tt>: A nominal group</t>
            </li>
            <li>
              <t><tt>KEM_T</tt>: A traditional KEM</t>
            </li>
          </ul>
        </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_PQ.Nseed +
Comp_T.Nseed</tt> (<tt>PRG.Nout == KEM_PQ.Nseed + Comp_T.Nseed</tt>)</t>
        </li>
        <li>
          <t><tt>KDF</tt>: A KDF producing byte strings of length <tt>KEM_H.Nss</tt> (<tt>KDF.Nout
== KEM_H.Nss</tt>)</t>
        </li>
        <li>
          <t><tt>Label</tt> - A byte string used to label the specific combination of the above
components being used, as well as which framework is being instantiated.
This value should be registered in the Hybrid KEM
Labels IANA registry to avoid conflict with other instantiations (see
<xref target="iana-considerations"/>).</t>
        </li>
      </ul>
      <t><tt>KEM_PQ</tt>, <tt>Group_T</tt>, <tt>PRG</tt>, and <tt>KDF</tt> <bcp14>MUST</bcp14> meet the interfaces
described in <xref target="cryptographic-deps"/> and <bcp14>MUST</bcp14> meet the security requirements
described in <xref target="hybrid-ind-cca"/>.</t>
      <t>The constants for public values are derived from the concatenation of
encapsulation keys and ciphertexts:</t>
      <artwork><![CDATA[
KEM_H.Nek = KEM_PQ.Nek + (KEM_T.Nek or Group_T.Nelem)
KEM_H.Nct = KEM_PQ.Nct + (KEM_T.Nct or Group_T.Nelem)
]]></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[
KEM_H.Nseed = max(KEM_PQ.Nseed, (KEM_T.Nseed or Group_T.Nseed))
KEM_H.Nss = min(KEM_PQ.Nss, (KEM_T.Nss or Group_T.Nss))
]]></artwork>
      <t>Since we use the seed as the decapsulation key, <tt>Ndk = Nseed</tt>.  For legacy
cases where it is not possible to derive per-component decapsulation keys
from a common seed, see <xref target="key-generation"/>.</t>
      <section anchor="subroutines">
        <name>Subroutines</name>
        <t>The four hybrid KEM frameworks share a substantial amount of structure, which
we capture in a set of subroutines.</t>
        <section anchor="using-a-nominal-group">
          <name>Using a Nominal Group</name>
          <t>Hybrid KEM frameworks that use a nominal group for the traditional component
invoke the <tt>DeriveKeyPair</tt>, <tt>Encaps</tt>, and <tt>Decaps</tt> functions of PQ KEMs,
alongside analogous functions of the nominal group.  The "encapsulation key"
is the receiver's public key group element; the "ciphertext" is an ephemeral
group element; and the shared secret is the secret value resulting from an
ephemeral-static Diffie-Hellman exchange.</t>
          <artwork><![CDATA[
def expandDecapsKeyG(seed):
    seed_full = PRG(seed)
    (seed_PQ, seed_T) = split(KEM_PQ.Nseed, Group_T.Nseed, seed_full)

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

    return (ek_PQ, ek_T, dk_PQ, dk_T)

def prepareEncapsG(ek_PQ, ek_T):
    (ss_PQ, ct_PQ) = KEM_PQ.Encaps(ek_PQ)
    sk_E = Group_T.RandomScalar(random(Group_T.Nseed))
    ct_T = Group_T.Exp(Group_T.g, sk_E)
    ss_T = Group_T.ElementToSharedSecret(Group_T.Exp(ek_T, sk_E))
    return (ss_PQ, ss_T, ct_PQ, ct_T)

def prepareDecapsG(ct_PQ, ct_T, dk_PQ, dk_T):
    ss_PQ = KEM_PQ.Decap(dk_PQ, ct_PQ)
    ss_T = Group_T.ElementToSharedSecret(Group_T.Exp(ct_T, dk_T))
    return (ss_PQ, ss_T)
]]></artwork>
        </section>
        <section anchor="using-a-traditional-kem">
          <name>Using a Traditional KEM</name>
          <t>Hybrid KEM frameworks that use a KEM for the traditional component invoke the
<tt>DeriveKeyPair</tt>, <tt>Encaps</tt>, and <tt>Decaps</tt> functions of the traditional and PQ
KEMs in parallel.</t>
          <artwork><![CDATA[
def expandDecapsKeyK(seed):
    seed_full = PRG(seed)
    (seed_PQ, seed_T) = split(KEM_PQ.Nseed, KEM_T.Nseed, seed_full)
    (ek_PQ, dk_PQ) = KEM_PQ.DeriveKeyPair(seed_PQ)
    (ek_T, dk_T) = KEM_T.DeriveKeyPair(seed_T)
    return (ek_PQ, ek_T, dk_PQ, dk_T)

def prepareEncapsK(ek_PQ, ek_T):
    (ss_PQ, ct_PQ) = KEM_PQ.Encap(ek_PQ)
    (ss_T, ct_T) = KEM_T.Encap(ek_T)
    return (ss_PQ, ss_T, ct_PQ, ct_T)

def prepareDecapsK(ct_PQ, ct_T, dk_PQ, dk_T):
    ss_PQ = KEM_PQ.Decap(dk_PQ, ct_PQ)
    ss_T = KEM_T.Decap(dk_T, ct_T)
    return (ss_PQ, ss_T)
]]></artwork>
        </section>
        <section anchor="combiners">
          <name>Combiners</name>
          <t>A combiner function uses the <tt>KDF</tt> used in the hybrid KEM to combine the
shared secrets output by the component algorithms with contextual
information.</t>
          <t>The two combiner functions defined in this document are as follows:</t>
          <artwork><![CDATA[
def UniversalCombiner(ss_PQ, ss_T, ct_PQ, ct_T, ek_PQ, ek_T, label):
    KDF(concat(ss_PQ, ss_T, ct_PQ, ct_T, ek_PQ, ek_T, label))

def C2PRICombiner(ss_PQ, ss_T, ct_T, ek_T, label):
    KDF(concat(ss_PQ, ss_T, ct_T, ek_T, label))
]]></artwork>
          <t>Note that while the names of the inputs are suggestive of the shared secret,
ciphertext, and encapsulation key outputs of a KEM, the inputs to this
function in the hybrid KEM framework are not necessarily the output of a
secure KEM. In particular, when the framework is instantiated with a nominal
group, the "ciphertext" component is an ephemeral group element, and the
"encapsulation key" is the group element that functions as the recipient's
public key.</t>
          <t>The choice of combiner brings with it certain assumptions
under which the resulting hybrid KEM is secure.</t>
          <t>The <tt>UniversalCombiner</tt> combiner explicitly computes over shared secrets,
ciphertexts, and encapsulation keys from both components.  This allows the
resulting hybrid KEM to be secure as long as either component is secure, with
no further assumptions on the components.</t>
          <t>The <tt>C2PRICombiner</tt> combiner does not compute over the ciphertext or
encapsulation key from the PQ component. The resulting hybrid KEM will
be secure if the PQ component is IND-CCA secure, or, the traditional
component is secure and the PQ component also satisfies the C2PRI property.</t>
        </section>
      </section>
      <section anchor="key-generation">
        <name>Key Generation</name>
        <t>All four frameworks share a common key generation function:</t>
        <artwork><![CDATA[
def GenerateKeyPair():
    seed = random(Nseed)
    return DeriveKeyPair(seed)
]]></artwork>
        <t>In some deployment environments, it is not possible to instantiate this
process.  Some implementations of component schemes do not support the
<tt>DeriveKeyPair</tt> function, only <tt>GenerateKeyPair</tt>. Likewise in the nominal
group case, a (scalar, group element) pair will only be generated when the
scalar is generated internal to the implementation.</t>
        <t>An implementation of a hybrid KEM in such environemnts <bcp14>MAY</bcp14> deviate from the
above description in the following ways:</t>
        <ul spacing="normal">
          <li>
            <t><tt>DeriveKeyPair</tt> is not implemented.</t>
          </li>
          <li>
            <t>The decapsulation key returned by <tt>GenerateKeyPair</tt> and consumed by
<tt>Decaps</tt> is a tuple <tt>(dk_PQ, dk_T)</tt> of per-constituent decapsulation keys
(or pointers/handles to keys).</t>
          </li>
          <li>
            <t>The <tt>expandDecapsulationKeyG</tt> and <tt>expandDecapsulationKeyK</tt> functions are
replaced by the following, where <tt>decapsToEncaps()</tt> is a function that
returns the encapsulation key associated with a decapsulation key:</t>
          </li>
        </ul>
        <artwork><![CDATA[
def expandDecapsulationKey(dk):
    (dk_PQ, dkT) = dk # depending on the private key storage format
    ek_PQ = decapsToEncaps(dk_PQ)
    ek_T = decapsToEncaps(dk_T)
    return (ek_PQ, ek_T, dk_PQ, dk_T)
]]></artwork>
        <t>These deviations have both interoperability and security impacts.</t>
        <t>From an interoperability point of view, the use of a second format for the
hybrid KEM decapsulation key (other than the shared seed) introduces the risk
of incompatibilities in cases where a private key needs to be moved from one
system to another.</t>
        <t>Separate key generation / handling also reduces binding properties from
MAL-BIND-P-Q to LEAK-BIND-P-Q. As discussed below, binding properties can
address a variety of attack scenarios, including LEAK scenarios in which an
attacker has passive access to the decapsulation key and MAL scenarios in
which an attacker can cause the victim to use a crafted decapsulation
key. The above hybrid KEM framework assures binding properties in the face of
a LEAK attacker, irrespective of how key generation is done. The additional
provided by the default "shared seed" key generation upgrades this to
protection against a MAL attacker.</t>
        <t>Allowing for separate private key generation and handling also introduces a
risk of inappropriate key reuse and cross-protocol attacks.  A given key pair
<bcp14>MUST</bcp14> never be used in both a hybrid KEM and with a non-hybrid algorithm. A
pair of key pairs generated for a hybrid algorithm <bcp14>MUST</bcp14> only be used with
that hybrid algorithm, not separately with their component algorithms.
Likewise, key pairs generated outside of the context of a hybrid KEM <bcp14>MUST NOT</bcp14>
be used with a hybrid KEM.  The "shared seed" style of key generation
prevents such reuse, because the per-component private keys are derived
internally to the hybrid KEM.</t>
        <t>As a result, this alternative style of key generation should only be used in
environments where implementations of component algorithms do not allow
decapsulation keys to be imported or exported.  In scenarios where separate
key generation is used and decapsulation keys can be imported/exported,
additional measures should be put in place to mitigate the key reuse risks
noted above.</t>
      </section>
      <section anchor="ug-framework-universal-combiner-with-a-nominal-group">
        <name>UG Framework: Universal Combiner with a Nominal Group</name>
        <t>This framework combines a PQ KEM with a nominal group, using the universal
combiner function.  It should be used in cases where the application wants to
use a nominal group for the traditional component, and does not want to rely
on the C2PRI assumption for the PQ KEM.</t>
        <artwork><![CDATA[
def DeriveKeyPair(seed):
    (ek_PQ, ek_T, dk_PQ, dk_T) = expandDecapsKeyG(seed)
    return (concat(ek_PQ, ek_T), seed)

def Encaps(ek):
    (ek_PQ, ek_T) = split(KEM_PQ.Nek, Group_T.Nelem, ek)
    (ss_PQ, ss_T, ct_PQ, ct_T) = prepareEncapsG(ek_PQ, ek_T)
    ss_H = UniversalCombiner(ss_PQ, ss_T, ct_PQ, ct_T, ex_PQ, ek_T, Label))
    ct_H = concat(ct_PQ, ct_T)
    return (ss_H, ct_H)

def Decaps(dk, ct):
    (ct_PQ, ct_T) = split(KEM_PQ.Nct, Group_T.Nelem, ct)
    (ek_PQ, ek_T, dk_PQ, dk_T) = expandDecapsKeyG(dk)
    (ss_PQ, ss_T) = prepareDecapsG(ct_PQ, ct_T, dk_PQ, dk_T)
    ss_H = UniversalCombiner(ss_PQ, ss_T, ct_PQ, ct_T, ex_PQ, ek_T, Label))
    return ss_H
]]></artwork>
      </section>
      <section anchor="uk-framework-universal-combiner-with-a-kem">
        <name>UK Framework: Universal Combiner with a KEM</name>
        <t>This framework combines a PQ KEM with a traditional KEM, using the universal
combiner function.  It should be used in cases where the application wants to
use a KEM for the traditional component, and does not want to rely on the
C2PRI assumption for the PQ KEM.</t>
        <artwork><![CDATA[
def DeriveKeyPair(seed):
    (ek_PQ, ek_T, dk_PQ, dk_T) = expandDecapsKeyK(seed)
    return (concat(ek_PQ, ek_T), seed)

def Encaps(ek):
    (ek_PQ, ek_T) = split(KEM_PQ.Nek, KEM_T.Nek, ek)
    (ss_PQ, ss_T, ct_PQ, ct_T) = prepareEncapsK(ek_PQ, ek_T)
    ss_H = UniversalCombiner(ss_PQ, ss_T, ct_PQ, ct_T, ex_PQ, ek_T, Label))
    ct_H = concat(ct_PQ, ct_T)
    return (ss_H, ct_H)

def Decaps(dk, ct):
    (ct_PQ, ct_T) = split(KEM_PQ.Nct, KEM_T.Nct, ct)
    (ek_PQ, ek_T, dk_PQ, dk_T) = expandDecapsKeyK(dk)
    (ss_PQ, ss_T) = prepareDecapsK(ct_PQ, ct_T, dk_PQ, dk_T)
    ss_H = UniversalCombiner(ss_PQ, ss_T, ct_PQ, ct_T, ex_PQ, ek_T, Label))
    return ss_H
]]></artwork>
      </section>
      <section anchor="cg-framework-c2pri-combiner-with-a-nominal-group">
        <name>CG Framework: C2PRI Combiner with a Nominal Group</name>
        <t>This framework combines a PQ KEM with a nominal group, using the C2PRI
combiner function.  It should be used in cases where the application wants to
use a nominal group for the traditional component, and is comfortable relying
on the C2PRI assumption for the PQ KEM.</t>
        <artwork><![CDATA[
def DeriveKeyPair(seed):
    (ek_PQ, ek_T, dk_PQ, dk_T) = expandDecapsKeyG(seed)
    return (concat(ek_PQ, ek_T), seed)

def Encaps(ek):
    (ek_PQ, ek_T) = split(KEM_PQ.Nek, Group_T.Nelem, ek)
    (ss_PQ, ss_T, ct_PQ, ct_T) = prepareEncapsG(ek_PQ, ek_T)
    ss_H = C2PRICombiner(ss_PQ, ss_T, ct_T, ek_T, Label))
    ct_H = concat(ct_PQ, ct_T)
    return (ss_H, ct_H)

def Decaps(dk, ct):
    (ct_PQ, ct_T) = split(KEM_PQ.Nct, Group_T.Nelem, ct)
    (ek_PQ, ek_T, dk_PQ, dk_T) = expandDecapsKeyG(dk)
    (ss_PQ, ss_T) = prepareDecapsG(ct_PQ, ct_T, dk_PQ, dk_T)
    ss_H = C2PRICombiner(ss_PQ, ss_T, ct_T, ek_T, Label))
    return ss_H
]]></artwork>
      </section>
      <section anchor="ck-framework-c2pri-combiner-with-a-kem">
        <name>CK Framework: C2PRI Combiner with a KEM</name>
        <t>This framework combines a PQ KEM with a traditional KEM, using the C2PRI
combiner function.  It should be used in cases where the application wants to
use a KEM for the traditional component, and is comfortable relying on the
C2PRI assumption for the PQ KEM.</t>
        <artwork><![CDATA[
def DeriveKeyPair(seed):
    (ek_PQ, ek_T, dk_PQ, dk_T) = expandDecapsKeyK(seed)
    return (concat(ek_PQ, ek_T), seed)

def Encaps(ek):
    (ek_PQ, ek_T) = split(KEM_PQ.Nek, Group_T.Nelem, ek)
    (ss_PQ, ss_T, ct_PQ, ct_T) = prepareEncapsK(ek_PQ, ek_T)
    ss_H = C2PRICombiner(ss_PQ, ss_T, ct_T, ek_T, Label))
    ct_H = concat(ct_PQ, ct_T)
    return (ss_H, ct_H)

def Decaps(dk, ct):
    (ct_PQ, ct_T) = split(KEM_PQ.Nct, KEM_T.Nct, ct)
    (ek_PQ, ek_T, dk_PQ, dk_T) = expandDecapsKeyK(dk)
    (ss_PQ, ss_T) = prepareDecapsK(ct_PQ, ct_T, dk_PQ, dk_T)
    ss_H = C2PRICombiner(ss_PQ, ss_T, ct_T, ek_T, Label))
    return ss_H
]]></artwork>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>Hybrid KEMs provide security by combining two or more schemes so that
security is preserved if all but one scheme is broken. 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.</t>
      <t>In this section, we review the important security properties for hybrid KEMs,
and discuss how these security properties are provided by hybrid KEMs
constructed according to the framework in this document.</t>
      <section anchor="security-properties-for-component-algortihms">
        <name>Security Properties for Component Algortihms</name>
        <t>In order to precisely define our security objectives for a hybrid KEM, we
need to describe some properties that we will require from the component
algorithms.</t>
        <section anchor="indistinguishability-under-chosen-ciphertext-attack-ind-cca">
          <name>Indistinguishability under Chosen Ciphertext Attack (IND-CCA)</name>
          <t>The first goal we have for our hybrid KEM constructions is
indistinguishability under adaptive chosen ciphertext attack, or
IND-CCA <xref target="BHK09"/>. 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 definitions for public-key encryption <xref target="BHK09"/>.)</t>
          <t>Whether a given KEM provides IND-CCA depends on whether the attacker is
assumed to have access to quantum computing capabilities or not (assuming the
scheme is without bugs and the implementation is correct).  Post-quantum KEMs
are intended to provide IND-CCA security against such an attacker.
Traditional KEMs are not.</t>
          <t>IND-CCA is the standard security notion for KEMs; most PQ KEMs were
explicitly designed to achieve this type of security against both a
quantum attacker and a traditional one.</t>
          <t>For traditional algorithms, things are less clear.  The DHKEM construction in
<xref target="RFC9180"/> is an IND-CCA KEM based on Diffie-Hellman <xref target="ABH_21"/>, but "raw"
ephemeral-static Diffie-Hellman, interpreting the ephemeral public key as the
ciphertext, is not IND-CCA secure.  RSA-KEM is IND-CCA secure <xref target="ISO18033-2"/>,
and RSA-OAEP public-key encryption can be used to construct an IND-CCA KEM,
but "classical" RSA encryption (RSAES-PKCS1-v1_5 as defined in <xref target="RFC8017"/>)
is not even IND-CCA secure as a public-key encryption algorithm.</t>
        </section>
        <section anchor="ciphertext-second-preimage-resistence-c2pri">
          <name>Ciphertext Second-Preimage Resistence (C2PRI)</name>
          <t>Ciphertext Second-Preimage Resistence (C2PRI) is the property that given an
honestly generated ciphertext, it is difficult for an attacker to generate a
different ciphertext that decapsulates to the same shared secret.  In other
words, if an honest party computes <tt>(ss, ct) = Encaps(ek)</tt>, then it is
infeasible for an attacker to find another ciphertext <tt>ct'</tt> such that
<tt>Decaps(dk, ct) == ss</tt> (where <tt>dk</tt> is the decapsulation key corresponding to
the encapsulation key <tt>ek</tt>).</t>
          <t>A related notion in the literature is chosen-ciphertext resistance (CCR)
<xref target="CDM23"/>. C2PRI targets preimage-resistance, whereas CCR targets
collision-resistance, much like the analogous properties for hash functions.
In the language of the binding properties discussed in
<xref target="binding-properties"/>, CCR is equivalent to the property LEAK-BIND-K,PK-CT.</t>
          <t>C2PRI is a weaker property than CCR / LEAK-BIND-K,PK-CT because it requires
the attacker to match a specific, honestly generated ciphertext, as opposed
to finding an arbitrary pair.</t>
          <t>Several PQ KEMs have been shown to have C2PRI.  ML-KEM was shown to have this
property in <xref target="XWING"/>, and <xref target="CHH_25"/> proves C2PRI for several other
algorithms, including FrodoKEM, HQC, Classic McEliece, and sntrup.</t>
        </section>
        <section anchor="sdh">
          <name>Strong Diffie-Hellman Problem (SDH)</name>
          <t>The standard Diffie-Hellman problem is whether an attacker can compute <tt>g^xy</tt>
given access to <tt>g^x</tt> and <tt>g^y</tt> and an oracle <tt>DH(Y, Z)</tt> that answers whether
<tt>Y^x = Z</tt>. (This is the notion specified in <xref target="XWING"/>, not the notion of the
same name used in the context of bilinear pairings <xref target="Cheon06"/>.)</t>
          <t>When we say that the strong Diffie-Hellman problem is hard in a group, we
always mean this in the context of classical attackers, without access to
quantum computers.  An attacker with access to a quantum computer that can
execute Shor's algorithm for a group can efficiently solve the discrete log
problem in that group, which implies the ability to solve the strong
Diffie-Hellman problem.</t>
          <t>As shown in <xref target="ABH_21"/>, this problem is hard in prime-order groups such as
the NIST elliptic curve groups P-256, P-384, and P-521, as well as in the
Montgomery curves Curve25519 and Curve448.</t>
        </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 model for how the attacker
can access the decapsulation key: HON for the case where the attacker never
accesses the decapsulation key, LEAK for the case where the attacker has
access to the honestly-generated decapsulation key, or MAL for the case where
the attacker can choose or manipulate the keys used by the victim.  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>There is quite a bit of diversity in the binding properties provided by KEMs.
Table 5 of <xref target="CDM23"/> shows the binding properties of a few KEMs.  For
example: DHKEM provides MAL-level binding for several properties. ML-KEM
provides only LEAK-level binding. Classic McEliece provides MAL-BIND-K-CT,
but no assurance at all of X-BIND-K-PK.</t>
        </section>
        <section anchor="security-kdfs">
          <name>Indifferentiability from a Random Oracle</name>
          <t>The <tt>KDF</tt> used with a hybrid KEM <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: most IND-CCA analyses for the four
frameworks require only that the <tt>KDF</tt> is some kind of pseudorandom function,
but the SDH-based IND-CCA analysis of CG in <xref target="XWING"/>, and the corresponding
analysis for UG (forthcoming) relies on the <tt>KDF</tt> being a RO. Proofs of our
target binding properties for our hybrid KEMs require the <tt>KDF</tt> is a
collision-resistant function.</t>
          <t>If the <tt>KDF</tt> 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 <tt>KDF</tt> to be a PRF, such as the one given in <xref target="GHP18"/> for
UK, or the standard-model analysis of CG 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 HKDF'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 HKDF as its <tt>KDF</tt>.</t>
            </li>
          </ul>
          <t>The choice of the <tt>KDF</tt> security level <bcp14>SHOULD</bcp14> be made based on the security
level provided by the constituent KEMs. The <tt>KDF</tt> <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 (<tt>PRG</tt>) in its security requirements <xref target="AOB_24"/>.  A
secure PRG is an algorithm <tt>PRG</tt> : {0, 1}<sup>n</sup> → {0, 1}<sup>m</sup>,
such that no polynomial-time adversary can distinguish between <tt>PRG(r)</tt> (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 <tt>PRG</tt>.</t>
          <t>A <tt>PRG</tt> is not to be confused with a random (or pseudorandom) <em>number</em>
generator (RNG): a <tt>PRG</tt> 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><tt>PRG</tt>s are related to extendable output functions (XOFs) which can be built
from random oracles. Examples include SHAKE256.</t>
        </section>
      </section>
      <section anchor="security-properties">
        <name>Security Goals for Hybrid KEMs</name>
        <t>The security notions for hybrid KEMs are largely the same as for other
algorithms, but they are contingent on the security properties of the
component algorithms.  In this section we discuss the intended security
properties for hybrid KEMs and the requirements that the component algorithms
must meet in order for those properties to hold.</t>
        <section anchor="hybrid-ind-cca">
          <name>IND-CCA Security</name>
          <t>The idea of a hybrid KEM is that it should maintain its security if only one
of the two component KEMs is secure.  For a PQ/T hybrid KEM, this means that
the hybrid KEM should be secure against a quantum attacker if the T component
is broken, and secure against at least a classical attacker if the PQ
component is broken.</t>
          <t>More precisely, the hybrid KEM should meet two different notions of IND-CCA
security, under different assumptions about the component algorithms:</t>
          <ul spacing="normal">
            <li>
              <t>IND-CCA against a classical attacker all of the following are true:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>KDF</tt> is indifferentiable from a random oracle</t>
                </li>
                <li>
                  <t>If using <tt>Group_T</tt>: The strong Diffie-Hellman problem is hard in
<tt>Group_T</tt></t>
                </li>
                <li>
                  <t>If using <tt>KEM_T</tt>: <tt>KEM_T</tt> is IND-CCA against a classical attacker</t>
                </li>
                <li>
                  <t>If using <tt>C2PRICombiner</tt>: <tt>KEM_PQ</tt> is C2PRI</t>
                </li>
              </ul>
            </li>
            <li>
              <t>IND-CCA against a quantum attacker if all of the following are true:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>KDF</tt> is indifferentiable from a random oracle</t>
                </li>
                <li>
                  <t><tt>KEM_PQ</tt> is IND-CCA against a quantum attacker</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>Some IND-CCA analyses do not strictly require the <tt>KDF</tt> to be
indifferentiable from a random oracle; they instead only require a kind of
PRF assumption on the KDF. For simplicity we ignore this here; the security
analyses described below for our constructions will elaborate on this point
when appropriate.</t>
        </section>
        <section anchor="hybrid-binding">
          <name>Binding Properties</name>
          <t>The most salient binding properties for a hybrid KEM to be used in Internet
protocols are LEAK-BIND-K-PK and LEAK-BIND-K-CT.</t>
          <t>The LEAK attack model is most appropriate for Internet protocols.  There have
been attacks in the LEAK model <xref target="BJKS24"/> <xref target="FG24"/>, so a hybrid KEM needs to
be resilient at least to LEAK attacks (i.e., HON is too weak).  Internet
applications generally assume that private keys are honestly generated, so
MAL is too strong an attack model to address.</t>
          <t>The LEAK-BIND-K-PK and LEAK-BIND-K-CT properties are naturally aligned with
the needs of protocol design.  Protocols based on traditional algorithms
frequently need to incorporate transcript hashing in order to protect against
key confusion attacks <xref target="FG24"/> or KEM re-encapsulation attacks <xref target="BJKS24"/>.
The LEAK-BIND-K-PK and LEAK-BIND-K-CT properties prevent these attacks at the
level of the hybrid KEM. 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>
      <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>
      </section>
      <section anchor="security-analysis">
        <name>Security Analysis</name>
        <t>In this section, we describe how the hybrid KEM framework in this document
provides the security properties described above.</t>
        <section anchor="ind-cca-analyses">
          <name>IND-CCA analyses</name>
          <t>The UG construction has two complementary IND-CCA analyses: one for when the
SDH problem holds but the PQ KEM is broken, and one for the reverse. Both are
technically novel but are substantially similar to the existing peer-reviewed
analyses of the CG <xref target="XWING"/> and UK <xref target="GHP18"/> constructions. A forthcoming
document by the editorial team will describe the analysis of UG in detail.</t>
          <t>The first IND-CCA analysis, based on SDH, is very similar to the
corresponding analysis of CG given in <xref target="XWING"/>: it gives a straightforward
reduction to the SDH hardness in the underlying group. Notably, since the PQ
KEM key and ciphertext are hashed, the C2PRI security of the PQ KEM does not
appear in the bound.</t>
          <t>The second IND-CCA analysis is a straightforward reduction to the IND-CCA
security of the PQ KEM, and the PRF security of the RO when keyed with the PQ
KEM's shared secret.</t>
          <t>This document's UK construction does not have an IND-CCA analysis; the
<xref target="GHP18"/> paper on which the construction is based 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. (<xref target="GHP18"/> 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 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 <xref target="GHP18"/> meets the split-key pseudorandomness property used in
<xref target="GHP18"/>'s analysis: this is shown in <xref target="GHP18"/>, Lemma 6, where a
pseudorandom skPRF is constructed from any almost-uniform keymixing function
in the random oracle model by <tt>H(g(k1,...,kn), x)</tt> , where <tt>H</tt> is modeled as
a random oracle and <tt>g</tt> is ϵ-almost uniform. Example 3 from <xref target="GHP18"/>
qualifies <tt>g(k_1,...,k_n) = k_1 || ... || k_n</tt> as ϵ-almost uniform with <tt>ϵ =
1/len(k_1 || ... || k_n)</tt>.</t>
          <t>Like UG, the CG 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 CG construction satisfies
IND-CCA security.</t>
          <t>The CK construction's IND-CCA analysis is based on forthcoming work by the
editorial team.</t>
          <t>The CK construction has two complementary IND-CCA analyses: one for when the
IND-CCA security of the traditional PKE-based KEM holds but the PQ KEM is
broken, except for the PQ KEM's C2PRI security, and one for where the IND-CCA
security of the PQ KEM holds.  Both are technically novel but are
substantially similar to the existing peer-reviewed analyses of the CG
<xref target="XWING"/> and UK <xref target="GHP18"/> constructions. A forthcoming document by the
editorial team will describe the analysis of CK in detail.</t>
          <t>Therefore all four 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 four hybrid KEM frameworks, and two target binding properties, so
we need eight 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.  <!--
TODO: Also cite https://eprint.iacr.org/2025/1416.pdf which has some results
about hybrid kem binding; unclear how they compare to ours though.-->
          </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.</t>
          <section anchor="ug-binding">
            <name>UG Binding</name>
            <section anchor="leak-bind-k-ct-of-ug">
              <name>LEAK-BIND-K-CT of UG</name>
              <t>Claim: If KDF is collision-resistant, then UG is LEAK-BIND-K-CT.</t>
              <t>Justification: To win LEAK-BIND-K-CT, given knowledge of two
honestly-generated UG secret keys, the adversary must construct two distinct
UG ciphertexts that decapsulate to the same (non-bot) key. Since UG
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-ug">
            <name>LEAK-BIND-K-PK of UG</name>
            <t>Claim: If KDF is collision-resistant, then UG 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 UG public keys. Again, since UG 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="uk-binding">
            <name>UK Binding</name>
            <section anchor="leak-bind-k-ct-of-uk">
              <name>LEAK-BIND-K-CT of UK</name>
              <t>Claim: If KDF is collision-resistant, then UK is LEAK-BIND-K-CT.</t>
              <t>Justification: To win LEAK-BIND-K-CT, given knowledge of two
honestly-generated UK secret keys, the adversary must construct two distinct
UK ciphertexts that decapsulate to the same (non-bot) key. Since UK
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-uk">
            <name>LEAK-BIND-K-PK of UK</name>
            <t>Claim: If KDF is collision-resistant, then UK 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 UK public keys. Again, since UK 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="cg-binding">
            <name>CG Binding</name>
            <t>The LEAK-BIND proofs for CG are a bit more subtle than for UK; the
main reason for this is CG's omission of the PQ KEM key and ciphertext from
the KDF. We will show that UK 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 that 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-cg">
              <name>LEAK-BIND-K-CT of CG</name>
              <t>Claim: If KDF is collision-resistant and the PQ KEM is LEAK-BIND-K-CT, then
CG is LEAK-BIND-K-CT.</t>
              <t>Justification: To win the adversary must construct two distinct CG
ciphertexts that decapsulate to the same non-bot key.  Call the CG
ciphertexts output by the adversary (ct_PQ^0, ct_T^0) and (ct_PQ^1,
ct_T^1). Distinctness implies (ct_PQ^0, ct_T^0) != (ct_PQ^1, ct_T^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.Decaps(dk_PQ^0, ct_PQ^0)) is not equal to ss_PQ^1 (:=
KEM_PQ.Decaps(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
CG 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-cg">
              <name>LEAK-BIND-K-PK of CG</name>
              <t>Claim: If KDF is collision-resistant and the PQ KEM is LEAK-BIND-K-PK, then
CG 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_PQ^0, ek_T^0) !=
(ek_PQ^1, ek_T^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 anchor="ck-binding">
            <name>CK Binding</name>
            <section anchor="leak-bind-k-ct-of-ck">
              <name>LEAK-BIND-K-CT of CK</name>
              <t>Claim: If KDF is collision-resistant and the PQ KEM is LEAK-BIND-K-CT, then
CK is LEAK-BIND-K-CT.</t>
              <t>Justification: To win the adversary must construct two distinct CK
ciphertexts that decapsulate to the same non-bot key.  Call the CK
ciphertexts output by the adversary (ct_PQ^0, ct_T^0) and (ct_PQ^1,
ct_T^1). Distinctness implies (ct_PQ^0, ct_T^0) != (ct_PQ^1, ct_T^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.Decaps(dk_PQ^0, ct_PQ^0)) is not equal to ss_PQ^1 (:=
KEM_PQ.Decaps(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
CK 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-ck">
              <name>LEAK-BIND-K-PK of CK</name>
              <t>Claim: If KDF is collision-resistant and the PQ KEM is LEAK-BIND-K-PK, then
CK 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_PQ^0, ek_T^0) !=
(ek_PQ^1, ek_T^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.Decaps 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="BDG20"/> 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="GHP18"/>.</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="BDG20"/> 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="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests that IANA create a registry "Hybrid KEM Labels", which
lists labels that uniquely identify instantiations of the frameworks in this
document.  The registry should be administered under the First Come First
Served policy <xref target="RFC8126"/>.</t>
      <t>Template:</t>
      <ul spacing="normal">
        <li>
          <t>Label: The name of the wire format</t>
        </li>
        <li>
          <t>Framework: The framework used in the hybrid KEM.  This value <bcp14>MUST</bcp14> be one of
the following values: "UG", "UK", "CG", or "CK".</t>
        </li>
        <li>
          <t>PQ component: The name of the post-quantum KEM used in the hybrid KEM.</t>
        </li>
        <li>
          <t>Traditional component: The name of the traditional KEM or nominal group
used in the hybrid KEM.</t>
        </li>
        <li>
          <t>KDF: The name of the Key Derivation Function used in the hybrid KEM.</t>
        </li>
        <li>
          <t>PRG: The name of the Pseudo-Random Generator used in the hybrid KEM.</t>
        </li>
        <li>
          <t>Nseed: An integer representing the size of a seed for this hybrid KEM.</t>
        </li>
        <li>
          <t>Nss: An integer representing the size of a shared secret for this hybrid
KEM.</t>
        </li>
        <li>
          <t>Reference (optional): The document where this hybrid KEM is defined</t>
        </li>
      </ul>
      <t>The registry should initially be empty.</t>
    </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
post-quantum and a traditional 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>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </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="BDG20" 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="BHK09" target="https://eprint.iacr.org/2009/418">
          <front>
            <title>Subtleties in the Definition of IND-CCA: When and How Should Challenge-Decryption be Disallowed?</title>
            <author fullname="Mihir Bellare">
              <organization>University of California San Diego</organization>
            </author>
            <author fullname="Dennis Hofheinz">
              <organization>CWI Amsterdam</organization>
            </author>
            <author fullname="Eike Kiltz">
              <organization>CWI Amsterdam</organization>
            </author>
            <date year="2009"/>
          </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="Cheon06">
          <front>
            <title>Security Analysis of the Strong Diffie-Hellman Problem</title>
            <author fullname="Jung Hee Cheon">
              <organization>Seoul National University</organization>
            </author>
            <date year="2006"/>
          </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="CHH_25" target="https://eprint.iacr.org/2025/1397">
          <front>
            <title>Starfighters — on the general applicability of X-Wing</title>
            <author>
              <organization/>
            </author>
            <date year="2025"/>
          </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="GHP18" 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="ISO18033-2" target="https://www.iso.org/standard/37971.html">
          <front>
            <title>Information technology -- Security techniques -- Encryption algorithms -- Part 2: Asymmetric ciphers</title>
            <author>
              <organization/>
            </author>
            <date year="2006"/>
          </front>
        </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>
        <reference anchor="RFC9180">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
            <author fullname="B. Lipp" initials="B." surname="Lipp"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9180"/>
          <seriesInfo name="DOI" value="10.17487/RFC9180"/>
        </reference>
        <reference anchor="RFC8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
      </references>
    </references>
    <?line 1486?>

<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 = PQ.Nrandom + T.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 PQ constituent is the first <tt>PQ.Nrandom</tt> bytes
of the input randomness.</t>
        </li>
        <li>
          <t>The randomness used by the traditional constituent is the final <tt>T.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:
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
NEKXQ95kee/kAcq1DQL3MqqQjEtDEgxqAtWHRyJPNYSBO/7d/+3H8NuaQFGX
L2o3f+vddefYrdeZ97X39JP6fRr+exIu5glex69uZnevR77+pXvn40Mn8bbx
0fv/zn/y0E9/53Pganlndrlx3yuzy82fsLYSBjfgCvECxOZeiCbmIXhpM5yt
9u8/LrfOee87y//xAe+EK3ys1OOWFf5rnNIXY93XYLf6UhKyy7vv38e/EPUj
Hm+CXHvHP8TjDZZ0DW9klsghKpn19CiMg0iR9YahIfJ4hy1cLBJd6yhhWxbe
nvUUtzB978MHrqNAzo4NlfmLiJxcHZPlZLiDFqAJuwnFUjdmG8w8KS+Q/ceY
4iIWFjWcDNHSFC2EtpQFtEywCYpcKfH8BsS9uLh1FzLfs4AKizM0h6Ls8UcU
OrK6fCsXD9sVzbR/JCsprlasLHAg9svZ0JS4QBkDE+mGNyAu4Vn9PV138nHJ
9rVCk5kS9rZQwi9xUS6gPuxtm7xoPBODjQ/emJnM0LiboZpifoqYzOAPULVd
4gTGIWBMEE0DM0/YTE9WtjI3chX+I8hY6HTULdqVzd8w1+0Si6wcaX1CAzrt
AYWKI4YbHKAYp8TE3hV7hizCGB7JlO7ZoUkAYkmet3man5BAwDn2i0dOPn51
wwhcFxmMAUzghPIsR8YQEEHU7E16HZLXXGbCDyDIkT8P8RrFkKxODrMcjm+p
KRjK2bG0SRNYMyAecaFncCiYckcijC8GRl8tBZKitcjiL8ZKeoexxAPQ7/cO
QU+wGAnrvX+2IolTUl2DDf4UWQ4OpfV8o0gkOPLn2ARVz2RkTXZNf6BEXFiL
EgPY0IRYmMvW9FyJGlSIy2h3Gl98+rTENqe7rHEfHpExDi0JgRPJenvU4tHx
zhLb8kOVxjklMGDdqVuw5JRTcAG1mGbZDNrj7HV2o+Cpo4eNg91bTMAcoASs
WhiYjTZD3lIkZ3N2YVxJSIYLfKR19Og4+fcoeAODnvydJhhWhZ9iMoPlWhzW
YvwKsrxgIHHjDQE8QznpxllySIgqKX6KrIhTX22KeH01uoEP78HGTDZlFgfT
wQqI18BPx8X4qYCV3eEYpAktv6GTuYOfsd+SSL0ESmLegEonRSwGlVJoy5gQ
dwuv+TCy1FAPNfDhRk4nE/FE3pek6prxI7HOUqBlmc+LkcEnPlHKD8JVkYHc
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
bOyjcC1qIEREj0riiErDEY3EM4RTkZgxCk3ngPdIAcJE17YscVW9NiTVHx/H
yzkiZ1WGpfJsyT8MhMmJnXpnhaNa3SWTchh+zauNiC57WJgZ27/PucxA/S12
lRnRwEaQRKSj1B/usDQjwMPCKOLiSYpWxb4XGdml07ok0OnIAC9ap1gAGmKE
KZwS+SsMHjGW+QBryuo21QYa7nABW7CenqmISCcGXEE7ogp9Mx6KBC6/yAhI
6a0ham9BgHDIS1igl/pwcUovEJncsTjjcwsOBPiAL7Ea99J9AqhnXBEZlBSq
qCmYmHo5U5RQ2bmGIfT4O9YxzDx+xPOa44+aJE6rRTRtmUYqWpp5ls0kncgr
fzXVMXMh57OecYQSSTO4Vkyvn8RSy8KRHJJkGXFNBeJyrKG823GhS+thQWNW
4wSVah4rLldieaMofaWrPRfaEJTYEGz9VAxy5ZmihtUKoepHJhuC9+/WWkAO
yL4UepJHX+wvY+XbKqvXUuIUY49M5A9rdk4ZtgPyXj3jcouOtR7YfpuyEgha
7Q6lQNQS05ZvqmX7sljMXA5vc76mrRozRwN/Nz64FJh+m1ZaGOUej46xtu7C
Y19kQrzx4PJaDHTiu8GxZOOBubhmtd2lz3cFEmFmsECjto8QGpjwXIMGvPkV
xzZugaEHts96fX52GAqQcEhj0cYIsQcRPHl4HkrmtVCnvxyhf9bDdA95i74U
/YXJe/8vQt42IuZrSHv/3xJp2yifryPr/YeR9T0Oq78IWQ+Ce5xR+l/6DqdZ
/jruby7sDA9yiVgkb6yb87cL/Ksu8Af63/52Xf8UiLVS8f7nqfjnupj/5aj3
gZdyO83+m76VfzLN3n0z/9XT7F/VPfyz0KtrdjYIIrnVh0e2CpsfJeV1CfEK
0LueJRjDAUhOlbKNg8zkmjvjOI6iS12gCTk5pyqxWLgY8yikQYbtEdAz7Uqp
ajKlWHh2cL/FiHGachiL5xImz3RSmVrkn3GWole1mZcTONHX2dQjfv/HvJzH
kec3bUuYKjQa+o2bDVlGVrXW0/M7x3AUK4r/bOImuysnmrT2Zym08s2tfmH9
++pY35NfLZHHZrKjcJ0DC8ANtEZVycW0pO1zGUDqL6FHSYm6imSMoe/Yrp0L
zGMtxdB2ycHlOso051jYaoXk5vV2zOEv2rTZ4DKEXqC+CSkO0ksxKmovzF5m
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

-->

</rfc>
