<?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.6.17 (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-04" 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>stavros.kousidis@bsi.bund.de</email>
      </address>
    </author>

    <date year="2023" month="July" day="08"/>

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

    <abstract>


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


<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>.</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'>

&RFC2119;


    </references>

    <references title='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>


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

