<?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-01" 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>

    <date year="2023" month="March" day="06"/>

    <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 flexible multi-share KEM combiner to join an arbitrary number of key shares, that is a multi-PRF compatible with NIST SP 800-56Cr2 <xref target="SP800-56C"></xref>.</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
        Limited Additional Mechanisms for PKIX and SMIME (lamps) Working Group mailing list (<eref target="mailto:spasm@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/spasm/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/spasm/"/>.
      </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 shared secret.</t>

<t>KEMs are typically used in cases where two parties, hereby refereed 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 mechanisms 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>

</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"/>, .. TODO: cite others.</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.

TODO: read and cite
Federico Giacon, Felix Heuer, and Bertram Poettering. KEM combiners. In Michel
Abdalla and Ricardo Dahab, editors, PKC 2018: 21st International Conference on Theory
and Practice of Public Key Cryptography, Part I, volume 10769 of Lecture Notes in Computer Science, pages 190–218. Springer, Heidelberg, March 2018.
-->

<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>, where all values are byte arrays.</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 multi-PRF as a KEM combiner, a function that can be keyed by any input.
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"><artwork><![CDATA[
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 cryptographic key derivation function,</t>
  <t><spanx style="verb">K_i</spanx> represent the constant-length input keys,</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 key,</t>
  <t><spanx style="verb">||</spanx> represents concatenation.</t>
</list></t>

<t>In section <xref target="sec-instantiation"/> are listed several possible practical instantiations, in compliance with NIST SP-800 56Cr2 <xref target="SP800-56C"/>.</t>

<t>Each <spanx style="verb">K_i</spanx> MUST be constant in length, therefore the secret shares <spanx style="verb">SS_i</spanx> can be used directly only if they are guaranteed to be constant length. For all other cases, it is REQUIRED to hash them first:</t>

<figure><artwork><![CDATA[
K_i = H(SS_i)
]]></artwork></figure>

<t>Any protocols making use of this construction MUST either hash all inputs <spanx style="verb">SS_i</spanx>, or justify that any un-hashed inputs will always be fixed length.</t>

<section anchor="protocol-binding"><name>Protocol binding</name>
<t>The <spanx style="verb">fixedInfo</spanx> string is a fixed-length string containing some context-specific information.
It MUST NOT depend on the secret shares. The intention is to prevent cross-protocol 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 are fixed length. This prevents a variable length structure from creating collisions between two different instances.
In cases some variable length input is necessary, such as the representation of a public key or an OID, then hashing or padding can be used.</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 and/or private information shared between communication parties before or during the transaction, such as nonces or pre-shared secrets.</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 one of the following Keccak-based option.
Each instance defines a function to be used as <spanx style="verb">KDF</spanx>, a hash <spanx style="verb">H</spanx> function to optionally derive the <spanx style="verb">K_i</spanx>, and a <spanx style="verb">counter</spanx>.</t>

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

<section anchor="hash-and-counter-based-construction"><name>Hash-and-counter based construction</name>
<t>Options 1 and 2 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 string <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 anchor="kmac-based-construction"><name>KMAC based construction</name>
<t>Options 3 and 4 are KMAC-based, as specified in NIST SP 800-185 <xref target="SP800-185"/>.
The context <spanx style="verb">S</spanx> MUST be the utf-8 string "KDF", the key <spanx style="verb">K</spanx> MUST be a context-specific string of at least <spanx style="verb">hashSize</spanx> bits, and <spanx style="verb">counter</spanx> MUST be the fixed string <spanx style="verb">0x00000001</spanx>.
The key <spanx style="verb">K</spanx> MAY be used as an additional option to perform context separation, in scenarios where <spanx style="verb">fixedInfo</spanx> is not sufficient.</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>.</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 multi-PRFs and this specification limits to the use of Keccak-based constructions. The sponge construction was proven to be indifferentiable from a random oracle <xref target="SPONGE"/>.
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>

<!-- 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="SPONGE" target="https://keccak.team/files/CSF-0.1.pdf">
  <front>
    <title>Cryptographic sponge functions</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="2011" month="January"/>
  </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, Andreas Huelsing, and Stavros Kousidis.</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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
9pDj+WCwfw13UpdP0Skmp/kvBLPZNKQ7AAA=

-->

</rfc>

