<?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-10" 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-10"/>
    <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="March" day="02"/>
    <workgroup>Crypto Forum</workgroup>
    <abstract>
      <?line 232?>

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

<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 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 (KEM) comprises the following algorithms:</t>
        <ul spacing="normal">
          <li>
            <t><tt>GenerateKeyPair() -&gt; (dk, ek)</tt>: A randomized algorithm that generates a
secret decapsulation key <tt>dk</tt> and a public encapsulation key <tt>ek</tt>, each of
which are byte strings.</t>
          </li>
          <li>
            <t><tt>DeriveKeyPair(seed) -&gt; (dk, ek)</tt>: A deterministic algorithm that takes as
input a seed <tt>seed</tt> and generates a secret decapsulation key <tt>dk</tt> and a
public encapsulation key <tt>ek</tt>, each of which are byte strings.</t>
          </li>
          <li>
            <t><tt>Encaps(ek) -&gt; (ss, ct)</tt>: A probabilistic encapsulation
algorithm, which takes as input a public encapsulation key <tt>ek</tt> and outputs
a shared secret <tt>ss</tt> and ciphertext <tt>ct</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>In this document, <tt>Decaps</tt> is modeled as always returning a
shared secret and never returning an error.  Component KEMs
that use implicit rejection (such as ML-KEM) produce a
deterministic pseudorandom output on invalid ciphertexts,
which propagates through the combiner's KDF.</t>
        <t>We also make use of internal algorithms such as:</t>
        <ul spacing="normal">
          <li>
            <t><tt>expandDecapsulationKey(dk) -&gt; (dk, ek)</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)

    (dk_PQ, ek_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.Decaps(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)
    (dk_PQ, ek_PQ) = KEM_PQ.DeriveKeyPair(seed_PQ)
    (dk_T, ek_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.Encaps(ek_PQ)
    (ss_T, ct_T) = KEM_T.Encaps(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.Decaps(dk_PQ, ct_PQ)
    ss_T = KEM_T.Decaps(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):
    return 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):
    return 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 environments <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>expandDecapsKeyG</tt> and <tt>expandDecapsKeyK</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 expandDecapsKey(dk):
    (dk_PQ, dk_T) = 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
protection 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 (seed, concat(ek_PQ, ek_T))

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, ek_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, ek_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 (seed, concat(ek_PQ, ek_T))

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, ek_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, ek_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 (seed, concat(ek_PQ, ek_T))

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 (seed, concat(ek_PQ, ek_T))

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 = 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-algorithms">
        <name>Security Properties for Component Algorithms</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-resistance-c2pri">
          <name>Ciphertext Second-Preimage Resistance (C2PRI)</name>
          <t>Ciphertext Second-Preimage Resistance (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 <xref target="FIPS203"/> 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 <xref target="SCHMIEG2024"/>. 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 <xref target="FIPS202"/> 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"/> when
the compression function underlying SHA-256 is a random oracle,
which is a regular assumption in the literature.</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 not targeted by these designs are listed in
<xref target="out-of-scope"/>.</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 a dedicated 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 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. <xref target="COS_26"/> by the editorial team
and collaborators describes the analysis of UG 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.  The CG and CK binding analyses additionally
require the corresponding LEAK-BIND property of <tt>KEM_PQ</tt>.
None of these exact results were known; thus the following
are 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 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>
          <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 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>
          <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 CG 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.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 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 traditional KEM 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>Security properties and design considerations that were considered
and not included in these designs:</t>
      <ul spacing="normal">
        <li>
          <t>Anonymity <xref target="GMP22"/>, deniability, obfuscation, other forms of key-robustness
or binding <xref target="GMP22"/>, <xref target="CDM23"/></t>
        </li>
        <li>
          <t>More than two components: this document restricts the scope to two
components: one post-quantum component and one traditional component</t>
        </li>
        <li>
          <t>Parameterized output length: not analyzed as part of any security
proofs in the literature, and a complication deemed unnecessary</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="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="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="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="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="COS_26" target="https://eprint.iacr.org/xxxx/108115">
          <front>
            <title>StarHunters— Secure Hybrid Post-Quantum KEMs From IND-CCA2 PKEs</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="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="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="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="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="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 1446?>

<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; (shared_secret, ct)</tt>: A deterministic
 encapsulation algorithm, which takes as input a public encapsulation key
 <tt>ek</tt> and randomness <tt>randomness</tt>, and outputs a shared secret
 <tt>shared_secret</tt> and ciphertext <tt>ct</tt>.</t>
        </li>
      </ul>
      <t>An implementation that exposes <tt>EncapsDerand</tt> must also define a required
amount of randomness:</t>
      <ul spacing="normal">
        <li>
          <t><tt>Nrandom</tt>: The length in bytes of the randomness provided to EncapsDerand</t>
        </li>
      </ul>
      <t>The corresponding change for a nominal group is to replace randomly-generated
inputs to <tt>RandomScalar</tt> with deterministic ones.  In other words, for a
nominal group, <tt>Nrandom = Nseed</tt>.</t>
      <t>When a hybrid KEM is instantiated with constituents that support derandomized
encapsulation (either KEMs or groups), the hybrid KEM can also support
<tt>EncapsDerand()</tt>, with <tt>Nrandom = PQ.Nrandom + T.Nrandom</tt>.  The structure of
the hybrid KEM's <tt>EncapsDerand</tt> algorithm is the same as its <tt>Encaps</tt> method,
with the following differences:</t>
      <ul spacing="normal">
        <li>
          <t>The <tt>EncapsDerand</tt> algorithm also takes a <tt>randomness</tt> parameter, which is
a byte string of length <tt>Nrandom</tt>.</t>
        </li>
        <li>
          <t>Invocations of <tt>Encaps</tt> or <tt>RandomScalar</tt> (with a random input) in the
constituent algorithms are replaced with calls to <tt>EncapsDerand</tt> or
<tt>RandomScalar</tt> with a deterministic input.</t>
        </li>
        <li>
          <t>The randomness used by the PQ constituent is the first <tt>PQ.Nrandom</tt> bytes
of the input randomness.</t>
        </li>
        <li>
          <t>The randomness used by the traditional constituent is the final <tt>T.Nrandom</tt>
bytes of the input randomness.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
Sd2L/j9PW55cK/YAAA==

-->

</rfc>
