<?xml version="1.0" encoding="utf-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.5 (Ruby 3.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8411 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8411.xml">
<!ENTITY RFC8784 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8784.xml">
<!ENTITY RFC8696 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8696.xml">
<!ENTITY I-D.ietf-lamps-cmp-updates SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-lamps-cmp-updates.xml">
<!ENTITY I-D.driscoll-pqt-hybrid-terminology SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.driscoll-pqt-hybrid-terminology.xml">
<!ENTITY I-D.ietf-tls-hybrid-design SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-tls-hybrid-design.xml">
<!ENTITY I-D.ietf-ipsecme-ikev2-multiple-ke SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ipsecme-ikev2-multiple-ke.xml">
<!ENTITY I-D.ounsworth-pq-composite-kem SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ounsworth-pq-composite-kem.xml">
<!ENTITY I-D.wussler-openpgp-pqc SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.wussler-openpgp-pqc.xml">
]>


<rfc ipr="trust200902" docName="draft-ounsworth-cfrg-kem-combiners-05" category="info" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="KEM Combiner">Combiner function for hybrid key encapsulation mechanisms (Hybrid KEMs)</title>

    <author initials="M." surname="Ounsworth" fullname="Mike Ounsworth">
      <organization abbrev="Entrust">Entrust Limited</organization>
      <address>
        <postal>
          <street>2500 Solandt Road – Suite 100</street>
          <city>Ottawa, Ontario</city>
          <code>K2K 3G5</code>
          <country>Canada</country>
        </postal>
        <email>mike.ounsworth@entrust.com</email>
      </address>
    </author>
    <author initials="A." surname="Wussler" fullname="Aron Wussler">
      <organization abbrev="Proton">Proton AG</organization>
      <address>
        <postal>
          <country>Switzerland</country>
        </postal>
        <email>aron@wussler.it</email>
      </address>
    </author>
    <author initials="S." surname="Kousidis" fullname="Stavros Kousidis">
      <organization>BSI</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>kousidis.ietf@gmail.com</email>
      </address>
    </author>

    <date year="2024" month="January" day="31"/>

    <area>Security</area>
    <workgroup>CFRG</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 195?>

<t>The migration to post-quantum cryptography often calls for performing multiple key encapsulations in parallel and then combining their outputs to derive a single shared secret.</t>

<t>This document defines a comprehensible and easy to implement Keccak-based KEM combiner to join an arbitrary number of key shares, that is compatible with NIST SP 800-56Cr2 <xref target="SP800-56C"></xref> when viewed as a key derivation function. The combiners defined here are practical split-key PRFs and are CCA-secure as long as at least one of the ingredient KEMs is.</t>

<!-- End of Abstract -->



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ounsworth-cfrg-kem-combiners/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Crypto Forum Research Group (CFRG) Research Group mailing list (<eref target="mailto:cfrg@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cfrg/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cfrg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/EntrustCorporation/draft-ounsworth-cfrg-kem-combiners"/>.</t>
    </note>


  </front>

  <middle>


<?line 204?>

<section anchor="sec-terminology"><name>Terminology</name>
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" 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>

<t>This document is consistent with all terminology defined in <xref target="I-D.driscoll-pqt-hybrid-terminology"/>.</t>

<section anchor="sec-kem-defn"><name>Key Encapsulation Mechanisms</name>

<t>For the purposes of this document, we consider a Key Encapsulation Mechanism (KEM) to be any asymmetric cryptographic scheme comprised of algorithms satisfying the following interfaces <xref target="PQCAPI"></xref>.</t>

<figure><artwork><![CDATA[
def kemKeyGen() -> (pk, sk)
def kemEncaps(pk) -> (ct, ss)
def kemDecaps(ct, sk) -> ss
]]></artwork></figure>

<t>where <spanx style="verb">pk</spanx> is public key, <spanx style="verb">sk</spanx> is secret key, <spanx style="verb">ct</spanx> is the ciphertext representing an encapsulated key, and <spanx style="verb">ss</spanx> is the shared secret.</t>

<t>KEMs are typically used in cases where two parties, hereby referred to as the "encapsulater" and the "decapsulater", wish to establish a shared secret via public key cryptography, where the decapsulater has an asymmetric key pair and has previously shared the public key with the encapsulater.</t>

</section>
</section>
<section anchor="sec-intro"><name>Introduction</name>

<t>The need for a KEM combiner function arises in three different contexts within IETF security protocols:</t>

<t><list style="numbers">
  <t>KEM / PSK hybrids where the output of a KEM is combined with a static pre-shared key.</t>
  <t>Post-quantum / traditional hybrid KEMs where output of a post-quantum KEM is combined with the output of a classical key transport or key exchange algorithm.</t>
  <t>KEM-based authenticated key exchanges (AKEs) where the output of two or more KEMs performed in different directions are combined.</t>
</list></t>

<t>This document normalizes a mechanism for combining the output of two or more KEMs.</t>

<section anchor="kempsk-hybrids"><name>KEM/PSK hybrids</name>

<t>As a post-quantum stop-gap, several IETF protocols have added extensions to allow for mixing a pre-shared key (PSK) into an (EC)DH based key exchange. Examples include CMS <xref target="RFC8696"></xref> and IKEv2 <xref target="RFC8784"></xref>.</t>

</section>
<section anchor="pqtraditional-hybrid-kems"><name>PQ/Traditional hybrid KEMs</name>

<t>A post-quantum / traditional hybrid key encapsulation mechanism (hybrid KEM) as defined in <xref target="I-D.driscoll-pqt-hybrid-terminology"/> as</t>

<dl>
  <dt>PQ/T Hybrid Key Encapsulation Mechanism:</dt>
  <dd>
    <t>A Key Encapsulation Mechanism (KEM) made up of two or more component KEM algorithms where at least one is a post-quantum algorithm and at least one is a traditional algorithm.</t>
  </dd>
</dl>

<t>Building a PQ/T hybrid KEM requires a secure function which combines the output of both component KEMs to form a single output. Several IETF protocols are adding PQ/T hybrid KEM mechanisms as part of their overall post-quantum migration strategies, examples include TLS 1.3 <xref target="I-D.ietf-tls-hybrid-design"></xref>, IKEv2 <xref target="I-D.ietf-ipsecme-ikev2-multiple-ke"></xref>, X.509; PKIX; CMS <xref target="I-D.ounsworth-pq-composite-kem"></xref>, OpenPGP <xref target="I-D.wussler-openpgp-pqc"></xref>, JOSE / COSE (CITE once Orie's drafts are up).</t>

<t>The traditional algorithm may in fact be a key transport or key agreement scheme, but since simple transformations exist to turn both of those schemes into KEMs, this document assumes that all cryptograhpic algorithms satisfy the KEM interface described in <xref target="sec-kem-defn"/>.</t>

</section>
<section anchor="kem-based-ake"><name>KEM-based AKE</name>

<t>The need for a KEM-based authenticated key establishment arises, for example, when two communicating parties each have long-term KEM keys (for example in X.509 certificates), and wish to involve both KEM keys in deriving a mutually-authenticated shared secret. In particular this will arise for any protocol that needs to provide post-quantum replacements for static-static (Elliptic Curve) Diffie-Hellman mechanisms. Examples include a KEM replacement for CMP's DHBasedMac <xref target="I-D.ietf-lamps-cmp-updates"/>.</t>

</section>
</section>
<section anchor="sec-kem-combiner"><name>KEM Combiner construction</name>

<!-- TODO: read and cite the ETSI doc "Quantum-safe Hybrid Key Exchanges"
https://www.etsi.org/deliver/etsi_ts/103700_103799/103744/01.01.01_60/ts_103744v010101p.pdf

TODO: as per https://www.enisa.europa.eu/publications/post-quantum-cryptography-integration-study section 4.2, might need to specify behaviour in light of KEMs with a non-zero failure probability.
-->

<t>A KEM combiner is a function that takes in two or more shared secrets <spanx style="verb">ss_i</spanx> and returns a combined shared secret <spanx style="verb">ss</spanx>.</t>

<figure><artwork><![CDATA[
ss = kemCombiner(ss_1, ss_2, ..., ss_n)
]]></artwork></figure>

<t>This document assumes that shared secrets are the output of a KEM, but without loss of generality they MAY also be any other source of cryptographic key material, such as pre-shared keys (PSKs), with PQ/PSK being a quantum-safe migration strategy being made available by some protocols, see for example IKEv2 in <xref target="RFC8784"></xref>.</t>

<t>In general it is desirable to use a split-key PRF as a KEM combiner, meaning that the combiner has the properties of a PRF when keyed by any of its single inputs.
The following simple yet generic construction can be used in all IETF protocols that need to combine the output of two or more KEMs:</t>

<figure title="general KEM combiner construction" anchor="tab-kemCombiner"><artwork><![CDATA[
ss = KDF(counter || k_1 || ... || k_n || fixedInfo, outputBits)
]]></artwork></figure>

<t>where:</t>

<t><list style="symbols">
  <t><spanx style="verb">KDF</spanx> represents a suitable choice of a cryptographic key derivation function,</t>
  <t><spanx style="verb">k_i</spanx> represent the constant-length input keys and is discussed in <xref target="sec-k_i-construction"/>,</t>
  <t><spanx style="verb">fixedInfo</spanx> is some protocol-specific KDF binding,</t>
  <t><spanx style="verb">counter</spanx> parameter is instantiation-specific and is discussed in <xref target="sec-instantiation"/>.</t>
  <t><spanx style="verb">outputBits</spanx> determines the length of the output keying material,</t>
  <t><spanx style="verb">||</spanx> represents concatenation.</t>
</list></t>

<t>In <xref target="sec-instantiation"/> several possible practical instantiations are listed that are in compliance with NIST SP-800 56Cr2 <xref target="SP800-56C"/>.
The shared secret <spanx style="verb">ss</spanx> MAY be used directly as a symmetric key, for example as a MAC key or as a Key Encryption Key (KEK).</t>

<t>The values <spanx style="verb">k_i</spanx> can be processed individually, without requiring to store intermediate values except for the hash state and the protocol binding information required for <spanx style="verb">fixedInfo</spanx>.</t>

<section anchor="length-encoding"><name>Length encoding</name>
<t>All variable length string inputs <spanx style="verb">s</spanx> MUST be suffixed with the length, right-encoded using the <spanx style="verb">rlen</spanx> function, having the following construction:</t>

<figure><artwork><![CDATA[
Validity Conditions: 0 <= len(s) < 2^{2040}
1. Let x = len(s)
1. Let n be the smallest positive integer for which 2^{8n} > x
2. Let x_1, x_2, ..., x_n be the base-256 encoding of x satisfying:
    x = sum 28(n-i)x i, for i = 1 to n
3. Let O_i = uint8(x_i), for i = 1 to n
4. Let O_{n+1} = uint8(n)
5. rlen(s) = O_1 || O_2 || ... || O_n || O_{n+1}
]]></artwork></figure>

<t>This is compatible with the <spanx style="verb">right_encode</spanx> construction presented in <xref target="SP800-185"/>, and encodes the length of the string <spanx style="verb">s</spanx> as a byte string in a way that can be unambiguously parsed from the end.</t>

<t>Right encoding is preferred to left encoding, since it provides the same security guarantees but allows
encoding ciphertext where length is a priori unknown.</t>

</section>
<section anchor="sec-k_i-construction"><name>k_i construction</name>

<t>Following the guidance of Giacon et al. <xref target="GHP18"></xref>, we wish for a KEM combiner that is CCA-secure as long as at least one of the ingredient KEMs is. In order to protect against chosen ciphertext attacks, it is necessary to include both the shared secret <spanx style="verb">ss_i</spanx> and its corresponding ciphertext <spanx style="verb">ct_i</spanx>.
If both the secret share <spanx style="verb">ss_i</spanx> and the ciphertext <spanx style="verb">ct_i</spanx> are constant length, then <spanx style="verb">k_i</spanx> MAY be constructed concatenating the two values:</t>

<figure><artwork><![CDATA[
k_i = ct_i || ss_i
]]></artwork></figure>

<t>If <spanx style="verb">ss_i</spanx> or <spanx style="verb">ct_i</spanx> are not guaranteed to have constant length, it is REQUIRED to append the <spanx style="verb">rlen</spanx> encoded length when concatenating, prior to inclusion in the overall construction described in <xref target="tab-kemCombiner"/>:</t>

<figure><artwork><![CDATA[
k_i = ct_i || rlen(ct_i) || ss_i || rlen(ss_i)
]]></artwork></figure>

<t>Any protocols making use of this construction MUST either right-encode the length of all inputs <spanx style="verb">ss_i</spanx> and <spanx style="verb">ct_i</spanx>, or justify that any inputs will always be fixed length.
In the case of a PSK the associated ciphertext is the empty string.</t>

<t>Including the ciphertext guarantees that the combined kem is IND-CCA2 secure as long as one of the ingredient KEMs is, as stated by <xref target="GHP18"></xref>.</t>

<t>The ciphertext precedes the secret share, as memory-constrained devices can write <spanx style="verb">c_i</spanx> into the hash state and no further caching is required when streaming.</t>

</section>
<section anchor="note-on-the-order-of-parameters"><name>Note on the order of parameters</name>

<t>For a two-KEM instantiation, the construction is</t>

<t><spanx style="verb">
KDF(counter || ct_1 || rlen(ct_1) || ss_1 || rlen(ss_1) || 
               ct_2 || rlen(ct_2) || ss_2 || rlen(ss_2) || 
               fixedInfo, outputBits)
</spanx></t>

<t>The order of parameters is chosen intentionally to facilitate streaming implementations
on devices that lack sufficient memory to hold the entirety of <spanx style="verb">ct_1</spanx> or <spanx style="verb">ct_2</spanx>.</t>

<t>This construction aims to have two streaming-friendly properties. First, 
<spanx style="verb">ct_i</spanx> can be written to <spanx style="verb">KDF</spanx>'s update interface as it is received and 
does not need to be stored, finally adding its corresponding <spanx style="verb">ss_i</spanx> once 
it is available. And second, the first KEM can be processed in its entirety and
written to <spanx style="verb">KDF</spanx>'s update interface before beginning to process the second KEM.</t>

</section>
<section anchor="protocol-binding"><name>Protocol binding</name>
<t>The <spanx style="verb">fixedInfo</spanx> parameter is a fixed-format string containing some context-specific information.
This serves to prevent cross-context attacks by making this key derivation unique to its protocol context.</t>

<t>The <spanx style="verb">fixedInfo</spanx> string MUST have a definite structure depending on the protocol where all parts strictly defined by the protocol specification.</t>

<figure><artwork><![CDATA[
fixedInfo = fixedInfo || s
]]></artwork></figure>

<t>Each fixed-length input string <spanx style="verb">f</spanx> MAY be directly used as input:</t>

<figure><artwork><![CDATA[
s = f ; f is guaranteed to have fixed length
]]></artwork></figure>

<t>Each variable-length input string <spanx style="verb">v</spanx> MUST be suffixed with a right-encoding of the length:</t>

<figure><artwork><![CDATA[
s = v || rlen(v) ; v may have variable length
]]></artwork></figure>

<t><spanx style="verb">fixedInfo</spanx> MUST NOT include the shared secrets and ciphertexts, as they are already represented in the KDF input.</t>

<t>The parameter fixedInfo MAY contain any of the following information:</t>

<t><list style="symbols">
  <t>Public information about the communication parties, such as their identifiers.</t>
  <t>The public keys or certificates contributed by each party to the key-agreement transaction.</t>
  <t>Other public information shared between communication parties before or during the transaction, such as nonces.</t>
  <t>An indication of the protocol or application employing the key-derivation method.</t>
  <t>Protocol-related information, such as a label or session identifier.</t>
  <t>An indication of the key-agreement scheme and/or key-derivation method used.</t>
  <t>An indication of the domain parameters associated with the asymmetric key pairs employed for key establishment.</t>
  <t>An indication of other parameter or primitive choices.</t>
  <t>An indication of how the derived keying material should be parsed, including an indication of which algorithm(s) will use the (parsed) keying material.</t>
</list></t>

<t>This is a non-comprehensive list, further information can be found in paragraph 5.8.2 of NIST SP800-56Ar3 <xref target="SP800-56A"/>.</t>

</section>
</section>
<section anchor="sec-instantiation"><name>Practical instantiations</name>

<t>The KDF must be instantiated with cryptographically-secure choices for <spanx style="verb">KDF</spanx>. The following are RECOMMENDED Keccak-based instatiations, but other choices MAY be made for example to allow for future cryptographic agility. A protocol using a different instantiation MUST justify that it will behave as a split-key PRF, as required in <xref target="GHP18"/>.</t>

<t>Each instance defines a function to be used as <spanx style="verb">KDF</spanx>, a <spanx style="verb">hashSize</spanx> to determine parameter size, and optionally a <spanx style="verb">counter</spanx>:</t>

<t><list style="numbers">
  <t><spanx style="verb">KDF = KMAC128</spanx>, with <spanx style="verb">hashSize = 128 bit</spanx>.</t>
  <t><spanx style="verb">KDF = KMAC256</spanx>, with <spanx style="verb">hashSize = 256 bit</spanx>.</t>
  <t><spanx style="verb">KDF = SHA3-256</spanx>, with <spanx style="verb">hashSize = 256 bit</spanx>.</t>
  <t><spanx style="verb">KDF = SHA3-512</spanx>, with <spanx style="verb">hashSize = 512 bit</spanx>.</t>
</list></t>

<t>As justified in the security considerations, we recommend only Keccak-based instantiations because assuming there are no weaknesses found in the Keccak permutation, it behaves as a split-key PRF that can be keyed by any input <spanx style="verb">k_i</spanx>.
SHAKE is also not included in the list as it is not allowed by <xref target="SP800-56A"/> section 7, and does not provide any implementation advantage over KMAC.</t>

<t>KMAC constructions are RECOMMENDED over SHA-3, as KMAC offers a simple cSHAKE-based construction, with the advantage of returning an unrelated output when requesting a different <spanx style="verb">outputBits</spanx> KEK length.</t>

<section anchor="kmac-based-construction"><name>KMAC based construction</name>
<t>Options 1 and 2 are KMAC-based, as specified in NIST SP 800-185 <xref target="SP800-185"/>.
To instantiate the function:</t>

<t><list style="symbols">
  <t>The context <spanx style="verb">S</spanx> MUST be the utf-8 string "KDF".</t>
  <t>The key <spanx style="verb">K</spanx> MUST be a context-specific string of at least <spanx style="verb">hashSize</spanx> bits, and it MAY be used as an additional option to perform context separation, in scenarios where <spanx style="verb">fixedInfo</spanx> is not sufficient.</t>
  <t>The parameter <spanx style="verb">counter</spanx> MUST be the fixed value <spanx style="verb">0x00000001</spanx>, corresponding to a 32-bit binary big-endian representation of the number zero.
  <list style="symbols">
      <t>This aligns with <xref target="SP800-56C"/> where <spanx style="verb">counter</spanx> is initialized to <spanx style="verb">0x00000000</spanx> is Section 4.1 Step 3, but is first incremented in 6.1 before being used in a hash in 6.2.</t>
    </list></t>
</list></t>

<t>To derive a shared secret <spanx style="verb">ss</spanx> of desired length, KMAC is called a single time with the input string <spanx style="verb">X</spanx> defined in <xref target="sec-kem-combiner"/> and length <spanx style="verb">L</spanx> being <spanx style="verb">outputBits</spanx>.
This is compatible with the one-step KDF definition given in NIST SP800-56Cr2 <xref target="SP800-56C"/>, Section 4.</t>

</section>
<section anchor="hash-and-counter-based-construction"><name>Hash-and-counter based construction</name>
<t>Options 3 and 4 instantiate the KDF using SHA3, specified in NIST FIPS 202 <xref target="FIPS202"/>.
To generate an <spanx style="verb">outputBits</spanx> long secret share <spanx style="verb">ss</spanx>:</t>

<t><list style="symbols">
  <t>the <spanx style="verb">counter</spanx> MUST be initialized with the value <spanx style="verb">0x00000001</spanx>.</t>
  <t>The hash is performed over the string defined in <xref target="sec-kem-combiner"/>, and repeated <spanx style="verb">ceil(outputBits/hashSize)</spanx> times. For each iteration the <spanx style="verb">counter</spanx> MUST be increased by <spanx style="verb">0x01</spanx>.</t>
  <t>The strings are concatenated ordered by <spanx style="verb">counter</spanx>.</t>
  <t>The leftmost <spanx style="verb">outputBits</spanx> are returned as <spanx style="verb">ss</spanx>.</t>
</list></t>

<t>An implementation MUST NOT overflow and reuse the <spanx style="verb">counter</spanx> and an error MUST be returned when producing more than 2^32 consecutive hashes.</t>

</section>
</section>
<section anchor="sec-iana"><name>IANA Considerations</name>

<t>None.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>The proposed instantiations in <xref target="sec-instantiation"/> are practical split-key PRFs since this specification limits to the use of Keccak-based constructions. The sponge construction was proven to be indifferentiable from a random oracle <xref target="BDPA08"/>.
More precisely, for a given capacity <spanx style="verb">c</spanx> the indifferentiability proof shows that assuming there are no weaknesses found in the Keccak permutation, an attacker has to make an expected number of <spanx style="verb">2^(c/2)</spanx> calls to the permutation to tell Keccak from a random oracle.
For a random oracle, a difference in only a single bit gives an unrelated, uniformly random output.
Hence, to be able to distinguish a key <spanx style="verb">k</spanx>, derived from shared keys <spanx style="verb">k_i</spanx> from a random bit string, an adversary has to correctly guess all key shares <spanx style="verb">k_i</spanx> entirely.</t>

<t>The proposed construction in <xref target="sec-kem-combiner"/> with the instantiations in
<xref target="sec-instantiation"/> preserves IND-CCA2 of any of its ingredient KEMs, i.e.
the newly formed combined KEM is IND-CCA2 secure as long as at least one of the
ingredient KEMs is. Indeed, the above stated indifferentiability from a random
oracle qualifies Keccak as a split-key pseudorandom function as defined in
<xref target="GHP18"/>. That is, Keccak behaves like a random function if at least one input
shared secret <spanx style="verb">ss_i</spanx> is picked uniformly at random. Our construction can thus
be seen as an instantiation of the IND-CCA2 preserving Example 3 in Figure 1 of
<xref target="GHP18"/>, up to some reordering of input shared secrets <spanx style="verb">ss_i</spanx> and ciphertexts
<spanx style="verb">ct_i</spanx> and their potential compression <spanx style="verb">H(ss_i || ct_i)</spanx> by a cryptographic
hash function.</t>

<!-- Start of Appendices -->

</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">

&RFC2119;


    </references>

    <references title='Informative References' anchor="sec-informative-references">

&RFC8174;
&RFC8411;
&RFC8784;
&RFC8696;
&I-D.ietf-lamps-cmp-updates;
&I-D.driscoll-pqt-hybrid-terminology;
&I-D.ietf-tls-hybrid-design;
&I-D.ietf-ipsecme-ikev2-multiple-ke;
&I-D.ounsworth-pq-composite-kem;
&I-D.wussler-openpgp-pqc;
<reference anchor="PQCAPI" target="https://csrc.nist.gov/CSRC/media/Projects/Post-Quantum-Cryptography/documents/example-files/api-notes.pdf">
  <front>
    <title>PQC - API notes</title>
    <author initials="N. P.-Q. C." surname="Project" fullname="NIST Post-Quantum Cryptography Project">
      <organization></organization>
    </author>
    <date year="2022" month="November"/>
  </front>
</reference>
<reference anchor="SP800-56A" target="https://doi.org/10.6028/NIST.SP.800-56Ar3">
  <front>
    <title>Recommendation for Pair-Wise Key-Establishment Schemes Using Discrete Logarithm Cryptography</title>
    <author initials="E." surname="Barker" fullname="Elaine Barker">
      <organization></organization>
    </author>
    <author initials="L." surname="Chen" fullname="Lily Chen">
      <organization></organization>
    </author>
    <author initials="A." surname="Roginsky" fullname="Allen Roginsky">
      <organization></organization>
    </author>
    <author initials="A." surname="Vassilev" fullname="Apostol Vassilev">
      <organization></organization>
    </author>
    <author initials="R." surname="Davis" fullname="Richard Davis">
      <organization></organization>
    </author>
    <date year="2018" month="April"/>
  </front>
  <seriesInfo name="NIST Special Publication 800-56A" value=""/>
</reference>
<reference anchor="SP800-56C" target="https://doi.org/10.6028/NIST.SP.800-56Cr2">
  <front>
    <title>Recommendation for Key-Derivation Methods in Key-Establishment Schemes</title>
    <author initials="E." surname="Barker" fullname="Elaine Barker">
      <organization></organization>
    </author>
    <author initials="L." surname="Chen" fullname="Lily Chen">
      <organization></organization>
    </author>
    <author initials="R." surname="Davis" fullname="Richard Davis">
      <organization></organization>
    </author>
    <date year="2020" month="August"/>
  </front>
  <seriesInfo name="NIST Special Publication 800-56C" value=""/>
</reference>
<reference anchor="SP800-185" target="https://doi.org/10.6028/NIST.SP.800-185">
  <front>
    <title>SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, and ParallelHash</title>
    <author initials="J." surname="Kelsey" fullname="John Kelsey">
      <organization></organization>
    </author>
    <author initials="S." surname="Chan" fullname="Shu-jen Chan">
      <organization></organization>
    </author>
    <author initials="R." surname="Perln" fullname="Ray Perln">
      <organization></organization>
    </author>
    <date year="2016"/>
  </front>
  <seriesInfo name="NIST Special Publication 800-185" value=""/>
</reference>
<reference anchor="FIPS202" target="https://doi.org/10.6028/NIST.FIPS.202">
  <front>
    <title>SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions</title>
    <author >
      <organization></organization>
    </author>
    <date year="2015"/>
  </front>
  <seriesInfo name="Federal information Processing Standards Publication (FIPS) 202" value=""/>
</reference>
<reference anchor="BDPA08" target="https://doi.org/10.1007/978-3-540-78967-3_11">
  <front>
    <title>On the Indifferentiability of the Sponge Construction</title>
    <author initials="G." surname="Bertoni" fullname="Guido Bertoni">
      <organization></organization>
    </author>
    <author initials="J." surname="Daemen" fullname="Joan Daemen">
      <organization></organization>
    </author>
    <author initials="M." surname="Peters" fullname="Michael Peters">
      <organization></organization>
    </author>
    <author initials="G." surname="Assche" fullname="Gilles van Assche">
      <organization></organization>
    </author>
    <date year="2008"/>
  </front>
</reference>
<reference anchor="GHP18" target="https://doi.org/10.1007/978-3-319-76578-5_7">
  <front>
    <title>KEM Combiners</title>
    <author initials="F." surname="Giacon" fullname="Federico Giacon">
      <organization></organization>
    </author>
    <author initials="F." surname="Heuer" fullname="Felix Heuer">
      <organization></organization>
    </author>
    <author initials="B." surname="Poettering" fullname="Bertram Poettering">
      <organization></organization>
    </author>
    <date year="2018"/>
  </front>
</reference>
<reference anchor="ETSI-QHKE" target="https://www.etsi.org/deliver/etsi_ts/103700_103799/103744/01.01.01_60/ts_103744v010101p.pdf">
  <front>
    <title>Quantum-safe Hybrid Key Exchanges</title>
    <author >
      <organization></organization>
    </author>
    <date year="2020" month="December"/>
  </front>
  <seriesInfo name="ETSI TS 103 744 V1.1.1" value=""/>
</reference>
<reference anchor="ADKPRY22" target="https://eprint.iacr.org/2022/065">
  <front>
    <title>Practical (Post-Quantum) Key Combiners from One-Wayness and Applications to TLS.</title>
    <author initials="N." surname="Aviram" fullname="Nimrod Aviram">
      <organization></organization>
    </author>
    <author initials="B." surname="Dowling" fullname="Benjamin Dowling">
      <organization></organization>
    </author>
    <author initials="I." surname="Komargodski" fullname="Ilan Komargodski">
      <organization></organization>
    </author>
    <author initials="K. G." surname="Paterson" fullname="Kenneth G Paterson">
      <organization></organization>
    </author>
    <author initials="E." surname="Ronen" fullname="Eyal Ronen">
      <organization></organization>
    </author>
    <author initials="E." surname="Yogev" fullname="Eylon Yogev">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>


<?line 460?>

<section numbered="false" anchor="acknowledgements"><name>Acknowledgements</name>

<t>This document incorporates contributions and comments from a large group of experts. The authors would especially like to acknowledge the expertise and tireless dedication of the following people, who attended many long meetings and generated millions of bytes of electronic mail and VOIP traffic over the past years in pursuit of this document:</t>

<t>Douglas Stebila, Nimrod Aviram, and Andreas Huelsing.</t>

<t>We are grateful to all, including any contributors who may have
been inadvertently omitted from this list.</t>

<t>This document borrows text from similar documents, including those referenced below. Thanks go to the authors of those
   documents.  "Copying always makes things easier and less error prone" - <xref target="RFC8411"></xref>.</t>

<!-- End of Contributors section -->

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

