<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-hybrid-kems-08" 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-08"/>
    <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="2026" month="January" day="27"/>
    <workgroup>Crypto Forum</workgroup>
    <abstract>
      <?line 276?>

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

<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
uniformly pseudo-random 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 <xref target="CG26"/> 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. <xref target="CG26"/> by the
editorial team describes the analysis of UG in detail.</t>
          <t>The first IND-CCA analysis, based on SDH, is 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="CG26" target="https://eprint.iacr.org/2026/125">
          <front>
            <title>StarFortress: Hybrid Post-Quantum KEMs From SDH and IND-CCA</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </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 1490?>

<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:
H4sIAAAAAAAAA+19y3Ycy5HYvr4iB/QxgWF3Aw2QvCSkKxloEA+BAEEAvI+R
JXahO9EoobqqVVWNh0jOmdUcL318vPHOe6/9A/YH+B/0JY5XvqoKIMh7RyOP
xQUBdFdlRkZGRMY7u91uVCVVqtfVwu7tWZGM1dHb5VO1r2/Vq2wUz8p5GldJ
nqkDPbqIs6SclgtRfHZW6Kt1dUFvdC/1tIxGcaUneXG7rpLsPI+icT7K4imM
Oy7i86qbFNV5d3ReTLreS92VF1E5P5smZQlTVLczeHzv+HQ7GuVZqbNyXq6r
8zgtdQSTrUXXeXE5KfL5DIAdFLezKlfbeTGfLkRRPK8u8mI9Ut1Iwb/zeZry
7Fs6KcaFVoM8y/I0vaWv82ICS/kTLWxdncTZ+Cy/2XhL3+lpnKQA9RwGHhXz
spqn8+l/mOCnvVE+bc5wnABiirHajItMly3jD5JylPtjF+nZf0hmV73ypjna
UTxP1U4xPztrG+pdllzpokyqW5WfqwOYOYGv/bFn8P6EXu+velBHUZYXUxjl
SgOS1Pbe0cnqyiqg581er7/Se76y+mL5cO/ktIff9OAr+9Da3Q+tRRHutTfu
xubxSn+d4DFUdXqh1ZsiHqVabSXn54nu7uo0ncaZ2ijL+XSGCysVbIHCj7I4
vS2TEle3tbv36mSBxhoDba2r38RZR62urPTpM7vj9K8rPxVQHxANYkanauNs
HKdpfNczF0mhNgGYuNDtjxxdJGmazNRxPomv41ta4O6T1doKBehsoipY6+7R
/itVVrAgIIqeD//GrEhSXMHqA1bwm/x//w9YQHqts/YHNot5lqvNNM5gqVX7
M6/Gc6TM3Xg+urzjieRSq/0krf50xyw6+0M8TTL1OpnN2h/ZygutM2ADPdMp
oeiwvxJi6Dg/A0ZCgYJcCxvuo2V1pb/CT8fFRFcgVapqVq4vL2vAV1b1knhU
9IANlmHrXyw/fbrSm43PcZ7BwZPVZ01iO5nl2UQrIKK38zir5lO1l42B8nSh
syqJz1Idzr767IGzrz5b/matb2Y/PNn74WXv+WoIwNH8LE1GJD5ZQk2KeHZx
q4BLiDq2kww2LIlTdaKLq2SkS4QOkIOCEx94hQRXwRCDeXGFLDNJKnw6mWRx
NQdBtpGClE2qi6lafDXYOtlY8ldzmF8Ri/CSSl0kukQWNUS2AGAvrCsCvGuf
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

-->

</rfc>
