<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-lamps-pq-composite-kem-05" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="Composite ML-KEM">Composite ML-KEM for use in X.509 Public Key Infrastructure and CMS</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-pq-composite-kem-05"/>
    <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="J." surname="Gray" fullname="John Gray">
      <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>john.gray@entrust.com</email>
      </address>
    </author>
    <author initials="M." surname="Pala" fullname="Massimiliano Pala">
      <organization>OpenCA Labs</organization>
      <address>
        <postal>
          <city>New York City, New York</city>
          <country>United States of America</country>
        </postal>
        <email>director@openca.org</email>
      </address>
    </author>
    <author initials="J." surname="Klaussner" fullname="Jan Klaussner">
      <organization>Bundesdruckerei GmbH</organization>
      <address>
        <postal>
          <street>Kommandantenstr. 18</street>
          <city>Berlin</city>
          <code>10969</code>
          <country>Germany</country>
        </postal>
        <email>jan.klaussner@bdr.de</email>
      </address>
    </author>
    <author initials="S." surname="Fluhrer" fullname="Scott Fluhrer">
      <organization>Cisco Systems</organization>
      <address>
        <email>sfluhrer@cisco.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="21"/>
    <area>Security</area>
    <workgroup>LAMPS</workgroup>
    <keyword>X.509</keyword>
    <keyword>CMS</keyword>
    <keyword>Post-Quantum</keyword>
    <keyword>KEM</keyword>
    <abstract>
      <?line 248?>

<t>This document defines combinations of ML-KEM <xref target="FIPS.203"/> in hybrid with traditional algorithms RSA-OAEP, ECDH, X25519, and X448. These combinations are tailored to meet security best practices and regulatory requirements. Composite ML-KEM is applicable in any application that uses X.509, PKIX, and CMS data structures and protocols that accept ML-KEM, but where the operator wants extra protection against breaks or catastrophic bugs in ML-KEM. For use within CMS, this document is intended to be coupled with the CMS KEMRecipientInfo mechanism in <xref target="RFC9629"/>.</t>
      <!-- End of Abstract -->



    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://lamps-wg.github.io/draft-composite-kem/draft-ietf-lamps-pq-composite-kem.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-lamps-pq-composite-kem/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        LAMPS Working Group mailing list (<eref target="mailto:spams@ietf.org"/>),
        which is archived at <eref target="https://datatracker.ietf.org/wg/lamps/about/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/spams/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/lamps-wg/draft-composite-kem"/>.</t>
    </note>
  </front>
  <middle>
    <?line 255?>

<section anchor="changes-in-version-05">
      <name>Changes in version -05</name>
      <t>Interop-affecting changes:</t>
      <ul spacing="normal">
        <li>
          <t>Fixed a bug in the definition of the Encaps() functions: KEMs, according to both RFC9180 and FIPS 203 should always return (ss, ct), but we had (ct, ss).</t>
        </li>
        <li>
          <t>Interoperable composite private key format requires component public keys (because public keys are required for decapsulation).</t>
        </li>
        <li>
          <t>Specified that the tradCT and tradPK inputs to the KEM combiner must be the raw values without the OCTET STRING wrapper.</t>
        </li>
        <li>
          <t>Adjusted RSA-OAEP section to follow RFC8017 instead of RFC3560. Does not use the RSA-OAEP label.</t>
        </li>
        <li>
          <t>Aligning algorithm list with LAMPS WG on-list discussions and draft-openpgp-pqc
          </t>
          <ul spacing="normal">
            <li>
              <t>ML-KEM-768 aligned with P-384 as per Quynh's OpenPGP presentation: https://datatracker.ietf.org/meeting/120/materials/slides-120-openpgp-pqc-with-nist-and-brainpool-curves</t>
            </li>
            <li>
              <t>Removing ML-KEM-512 combinations as per Sophie's recommendation: https://mailarchive.ietf.org/arch/msg/spasm/khasPf3y0_-Lq_0NtJe92unUw6o/</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Specified some options to use HKDF-SHA2, and some to use SHA3 / KMAC to facilitate implementations that do not have easy access to SHA3 outside the ML-KEM module.</t>
        </li>
        <li>
          <t>All levels now use 256-bit KDFs, to match ML-KEM's 256-bit shared secret key.</t>
        </li>
        <li>
          <t>Tweaks to combiner function, thanks to Quynh and authors of draft-ietf-openpgp-PQC:
          </t>
          <ul spacing="normal">
            <li>
              <t>Removed the <tt>counter</tt>.</t>
            </li>
            <li>
              <t>Un-twisted <tt>tradSS || mlkemSS</tt> to <tt>mlkemSS || tradSS</tt> as you would expect (thanks Quynh for pointing that this is allowed).</t>
            </li>
            <li>
              <t>Simplified to use 256-bit hashes at all security levels (HKDF-SHA256, SHA3-256, KMAC256), which matches ML-KEM's 256 bit shared secret key at all levels.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Updated prototype OIDs and domain separators to reflect that this version is not compatible with previous version.</t>
        </li>
      </ul>
      <t>Editorial changes:</t>
      <ul spacing="normal">
        <li>
          <t>Added an Implementation Consideration section explaining why private keys need to contain the public keys.</t>
        </li>
        <li>
          <t>Added a security consideration about key reuse.</t>
        </li>
        <li>
          <t>Added security considerations about SHA3-vs-HKDF-SHA2 and a warning against generifying this construction to other combinations of ciphers.</t>
        </li>
        <li>
          <t>Enhanced the section about how to get this FIPS-certified.</t>
        </li>
        <li>
          <t>ASN.1 module fixes (thanks Russ and Carl).
          </t>
          <ul spacing="normal">
            <li>
              <t>Renamed the module from Composite-KEM-2023 -&gt; Composite-MLKEM-2024</t>
            </li>
            <li>
              <t>Simplified the ASN.1 module to make it more compiler-friendly (thanks Carl!) -- should not affect wire encodings.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>Still to do in a future version:</t>
      <ul spacing="normal">
        <li>
          <t><tt>[ ]</tt> Wait for NIST SP 800-227 to make sure KEM combiner aligns, and update the section explaining how to get this FIPS-certified.</t>
        </li>
        <li>
          <t><tt>[ ]</tt> We need PEM samples … hackathon? OQS friends? David @ BC? The right format for samples is probably to follow the hackathon ... a Dilithium or ECDSA trust anchor certificate, a composite KEM end entity certificate, and a CMS EnvelopedData sample encrypted for that composite KEM certificate.</t>
        </li>
        <li>
          <t><tt>[ ]</tt> Open question: do we need to include the ECDH, X25519, X448, and RSA public keys in the KDF? X-Wing does, but previous versions of this spec do not. In general existing ECC and RSA hardware decrypter implementations might not know their own public key.</t>
        </li>
        <li>
          <t><tt>[ ]</tt> Other outstanding github issues: https://github.com/lamps-wg/draft-composite-kem/issues</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-intro">
      <name>Introduction</name>
      <t>The advent of quantum computing poses a significant threat to current cryptographic systems. Traditional cryptographic algorithms such as RSA-OAEP, ECDH and their elliptic curve variants are vulnerable to quantum attacks. During the transition to post-quantum cryptography (PQC), there is considerable uncertainty regarding the robustness of both existing and new cryptographic algorithms. While we can no longer fully trust traditional cryptography, we also cannot immediately place complete trust in post-quantum replacements until they have undergone extensive scrutiny and real-world testing to uncover and rectify potential implementation flaws.</t>
      <t>Unlike previous migrations between cryptographic algorithms, the decision of when to migrate and which algorithms to adopt is far from straightforward. Even after the migration period, it may be advantageous for an entity's cryptographic identity to incorporate multiple public-key algorithms to enhance security.</t>
      <t>Cautious implementers may opt to combine cryptographic algorithms in such a way that an attacker would need to break all of them simultaneously to compromise the protected data. These mechanisms are referred to as Post-Quantum/Traditional (PQ/T) Hybrids <xref target="I-D.ietf-pquip-pqt-hybrid-terminology"/>.</t>
      <t>Certain jurisdictions are already recommending or mandating that PQC lattice schemes be used exclusively within a PQ/T hybrid framework. The use of Composite scheme provides a straightforward implementation of hybrid solutions compatible with (and advocated by) some governments and cybersecurity agencies <xref target="BSI2021"/>.</t>
      <t>In addition, <xref target="BSI2021"/> specifically references this specification as a concrete example of hybrid X.509 certificates.</t>
      <t>A more recent example is <xref target="ANSSI2024"/>, a document co-authored by French Cybersecurity Agency (ANSSI),
Federal Office for Information Security (BSI), Netherlands National Communications Security Agency (NLNCSA), and
Swedish National Communications Security Authority, Swedish Armed Forces which makes the following statement:</t>
      <ul empty="true">
        <li>
          <t>“In light of the urgent need to stop relying only on quantum-vulnerable public-key cryptography for key establishment, the clear priority should therefore be the migration to post-quantum cryptography in hybrid solutions”</t>
        </li>
      </ul>
      <t>This specification represents the straightforward implementation of the hybrid solutions called for by European cyber security agencies.</t>
      <t>PQ/T Hybrid cryptography can, in general, provide solutions to two migration problems:</t>
      <ul spacing="normal">
        <li>
          <t>Algorithm strength uncertainty: During the transition period, some post-quantum signature and encryption algorithms will not be fully trusted, while also the trust in legacy public key algorithms will start to erode.  A relying party may learn some time after deployment that a public key algorithm has become untrustworthy, but in the interim, they may not know which algorithm an adversary has compromised.</t>
        </li>
        <li>
          <t>Ease-of-migration: During the transition period, systems will require mechanisms that allow for staged migrations from fully classical to fully post-quantum-aware cryptography.</t>
        </li>
      </ul>
      <t>This document defines a specific instantiation of the PQ/T Hybrid paradigm called "composite" where multiple cryptographic algorithms are combined to form a single key encapsulation mechanism (KEM) key and ciphertext such that they can be treated as a single atomic algorithm at the protocol level. Composite algorithms address algorithm strength uncertainty because the composite algorithm remains strong so long as one of its components remains strong. Concrete instantiations of composite ML-KEM algorithms are provided based on ML-KEM, RSA-OAEP and ECDH. Backwards compatibility is not directly covered in this document, but is the subject of <xref target="sec-backwards-compat"/>.</t>
      <t>Composite ML-KEM is intended for general applicability anywhere that key establishment or enveloped content encryption is used within PKIX or CMS structures.</t>
      <section anchor="sec-terminology">
        <name>Conventions and 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.
These words may also appear in this document in
lower case as plain English words, absent their normative meanings.
<?line -8?>
        </t>
        <t>This document is consistent with all terminology from <xref target="I-D.ietf-pquip-pqt-hybrid-terminology"/>.
In addition, the following terms are used in this document:</t>
        <t><strong>ALGORITHM</strong>:
          The usage of the term "algorithm" within this
          document generally refers to any function which
          has a registered Object Identifier (OID) for
          use within an ASN.1 AlgorithmIdentifier. This
          loosely, but not precisely, aligns with the
          definitions of "cryptographic algorithm" and
          "cryptographic scheme" given in <xref target="I-D.ietf-pquip-pqt-hybrid-terminology"/>.</t>
        <t><strong>COMBINER:</strong>
  A combiner specifies how multiple shared secrets are combined into
  a single shared secret.</t>
        <t><strong>DER:</strong>
  Distinguished Encoding Rules as defined in <xref target="X.690"/>.</t>
        <t><strong>KEM:</strong>
   A key encapsulation mechanism as defined in <xref target="sec-kems"/>.</t>
        <t><strong>PKI:</strong>
  Public Key Infrastructure, as defined in <xref target="RFC5280"/>.</t>
        <t><strong>SHARED SECRET KEY:</strong>
  A value established between two communicating parties for use as
  cryptographic key material suitable for direct use by symmetric
  cryptographic algorithms. This document is concerned with shared
  secrets established via public key cryptographic operations.</t>
      </section>
      <section anchor="composite-design-philosophy">
        <name>Composite Design Philosophy</name>
        <t><xref target="I-D.ietf-pquip-pqt-hybrid-terminology"/> defines composites as:</t>
        <ul empty="true">
          <li>
            <t><em>Composite Cryptographic Element</em>:  A cryptographic element that
     incorporates multiple component cryptographic elements of the same
     type in a multi-algorithm scheme.</t>
          </li>
        </ul>
        <t>Composite keys, as defined here, follow this definition and should be regarded as a single key that performs a single cryptographic operation such as key generation, signing, verifying, encapsulating, or decapsulating -- using its internal sequence of component keys as if they form a single key. This generally means that the complexity of combining algorithms can and should be handled by the cryptographic library or cryptographic module, and the single composite public key, private key, ciphertext and signature can be carried in existing fields in protocols such as PKCS#10 <xref target="RFC2986"/>, CMP <xref target="RFC4210"/>, X.509 <xref target="RFC5280"/>, CMS <xref target="RFC5652"/>, and the Trust Anchor Format <xref target="RFC5914"/>. In this way, composites achieve "protocol backwards-compatibility" in that they will drop cleanly into any protocol that accepts an analogous single-algorithm cryptographic scheme without requiring any modification of the protocol to handle multiple algorithms.</t>
      </section>
    </section>
    <section anchor="sec-kems">
      <name>Overview of the Composite ML-KEM Scheme</name>
      <t>We borrow here the definition of a key encapsulation mechanism (KEM) from <xref target="I-D.ietf-tls-hybrid-design"/>, in which a KEM is a cryptographic primitive that consists of three algorithms:</t>
      <ul spacing="normal">
        <li>
          <t><tt>KeyGen() -&gt; (pk, sk)</tt>: A probabilistic key generation algorithm,
which generates a public key <tt>pk</tt> and a secret key <tt>sk</tt>.</t>
        </li>
        <li>
          <t><tt>Encap(pk) -&gt; (ss, ct)</tt>: A probabilistic encapsulation algorithm,
which takes as input a public key <tt>pk</tt> and outputs a ciphertext <tt>ct</tt>
and shared secret ss. Note: this document uses <tt>Encap()</tt> to conform to <xref target="RFC9180"/>,
but <xref target="FIPS.203"/> uses <tt>Encaps()</tt>.</t>
        </li>
        <li>
          <t><tt>Decap(sk, ct) -&gt; ss</tt>: A decapsulation algorithm, which takes as
input a secret key <tt>sk</tt> and ciphertext <tt>ct</tt> and outputs a shared
secret <tt>ss</tt>, or in some cases a distinguished error value.
Note: this document uses <tt>Decap()</tt> to conform to <xref target="RFC9180"/>,
but <xref target="FIPS.203"/> uses <tt>Decaps()</tt>.</t>
        </li>
      </ul>
      <t>The KEM interface defined above differs from both traditional key transport mechanism (for example for use with KeyTransRecipientInfo defined in <xref target="RFC5652"/>), and key agreement (for example for use with KeyAgreeRecipientInfo defined in <xref target="RFC5652"/>).</t>
      <t>The KEM interface was chosen as the interface for a composite key establishment because it allows for arbitrary combinations of component algorithm types since both key transport and key agreement mechanisms can be promoted into KEMs as described in <xref target="sec-RSAOAEPKEM"/> and <xref target="sec-DHKEM"/> below.</t>
      <t>This specification uses the Post-Quantum KEM ML-KEM as specified in <xref target="FIPS.203"/> and <xref target="I-D.ietf-lamps-kyber-certificates"/>. For Traditional KEMs, this document uses the RSA-OAEP algorithm defined in <xref target="RFC8017"/>, the Elliptic Curve Diffie-Hellman key agreement schemes ECDH defined in section 5.7.1.2 of <xref target="SP.800-56Ar3"/>, and X25519 / X448 which are defined in <xref target="RFC8410"/>. A combiner function is used to combine the two component shared secrets into a single shared secret.</t>
      <section anchor="sec-RSAOAEPKEM">
        <name>Promotion of RSA-OAEP into a KEM</name>
        <t>The RSA Optimal Asymmetric Encryption Padding (OAEP), as defined in section 7.1 of <xref target="RFC8017"/> is a public key encryption algorithm used to transport key material from a sender to a receiver. It is promoted into a KEM by having the sender generate a random 256 bit secret and encrypt it.</t>
        <t>Note that, at least at the time of writing, the algorithm <tt>RSAOAEPKEM</tt> is not defined as a standalone algorithm within PKIX standards and it does not have an assigned algorithm OID, so it cannot be used directly with CMS KEMRecipientInfo <xref target="RFC9629"/>; it is merely a building block for the composite algorithm.</t>
        <artwork><![CDATA[
RSAOAEPKEM.Encap(pkR):
  shared_secret = SecureRandom(ss_len)
  enc = RSAES-OAEP-ENCRYPT(pkR, shared_secret)

  return shared_secret, enc
]]></artwork>
        <t>Note that the OAEP label <tt>L</tt> is left to its default value, which is the empty string as per <xref target="RFC8017"/>. The shared secret output by the overall Composite ML-KEM already binds a composite domain separator, so there is no need to also utilize the component domain separators.</t>
        <t>The value of <tt>ss_len</tt> as well as the RSA-OAEP parameters used within this specification can be found in <xref target="sect-rsaoaep-params"/>.</t>
        <t><tt>Decap(sk, ct) -&gt; ss</tt> is accomplished in the analogous way.</t>
        <artwork><![CDATA[
RSAOAEPKEM.Decap(skR, enc):
  shared_secret = RSAES-OAEP-DECRYPT(skR, enc)

  return shared_secret
]]></artwork>
      </section>
      <section anchor="sec-DHKEM">
        <name>Promotion of ECDH into a KEM</name>
        <t>An elliptic curve Diffie-Hellman key agreement is promoted into a KEM <tt>Encap(pk) -&gt; (ss, ct)</tt> using a simplified version of the DHKEM definition from <xref target="RFC9180"/>; simplified to remove the context-binding labels since the shared secret output by the overall Composite ML-KEM already binds a composite domain separator, so there is no need to also utilize labels within DHKEM.</t>
        <t>Note that, at least at the time of writing, the algorithm <tt>DHKEM</tt> is not defined as a standalone algorithm within PKIX standards and it does not have an assigned algorithm OID, so it cannot be used directly with CMS KEMRecipientInfo <xref target="RFC9629"/>; it is merely a building block for the composite algorithm.</t>
        <artwork><![CDATA[
DHKEM.Encap(pkR):
  skE, pkE = GenerateKeyPair()
  shared_secret = DH(skE, pkR)
  enc = SerializePublicKey(pkE)

  return shared_secret, enc
]]></artwork>
        <t><tt>Decap(sk, ct) -&gt; ss</tt> is accomplished in the analogous way.</t>
        <artwork><![CDATA[
DHKEM.Decap(skR, enc):
  pkE = DeserializePublicKey(enc)
  shared_secret = DH(skR, pkE)

  return shared_secret
]]></artwork>
        <t>This construction applies for all variants of elliptic curve Diffie-Hellman used in this specification: ECDH, X25519, and X448.</t>
        <t>The simplifications from the DHKEM definition in <xref target="RFC9180"/> is that since the ciphertext and receiver's public key are included explicitly in the Composite ML-KEM combiner, there is no need to construct the <tt>kem_context</tt> object, and since a domain separator is included explicitly in the Composite ML-KEM combiner there is no need to perform the labeled steps of <tt>ExtractAndExpand()</tt>.</t>
      </section>
      <section anchor="sec-kem-combiner">
        <name>KEM Combiner</name>
        <t>The following KEM combiner construction is as follows is used by both <tt>Composite-ML-KEM.Encap()</tt> and <tt>Composite-ML-KEM.Decap()</tt> and is split out here for easier analysis.</t>
        <figure anchor="code-generic-kem-combiner">
          <name>KEM combiner construction</name>
          <artwork><![CDATA[
  KDF(mlkemSS || tradSS || tradCT || tradPK || Domain)
]]></artwork>
        </figure>
        <t>where:</t>
        <ul spacing="normal">
          <li>
            <t><tt>KDF(message)</tt> represents a key derivation function suitable to the chosen KEMs according to {tab-kem-combiners}. All KDFs produce a 256-bit shared secret key to match ML-KEM.</t>
          </li>
          <li>
            <t><tt>mlkemSS</tt> is the shared secret key from the ML-KEM component.</t>
          </li>
          <li>
            <t><tt>tradSS</tt> is the shared secret from the traditional component (elliptic curve or RSA).</t>
          </li>
          <li>
            <t><tt>tradCT</tt> is the ciphertext from the traditional component (elliptic curve or RSA).</t>
          </li>
          <li>
            <t><tt>tradPK</tt> is the public key of the traditional component (elliptic curve or RSA).</t>
          </li>
          <li>
            <t><tt>Domain</tt> is the DER encoded value of the object identifier of the Composite ML-KEM algorithm as listed in <xref target="sec-domsep-values"/>.</t>
          </li>
          <li>
            <t><tt>||</tt> represents concatenation.</t>
          </li>
        </ul>
        <t>Each registered Composite ML-KEM algorithm specifies the choice of <tt>KDF</tt> and<tt>Domain</tt> to be used in <xref target="sec-alg-ids"/> and <xref target="sec-domsep-values"/> below. Given that each Composite ML-KEM algorithm fully specifies the component algorithms, including for example the size of the RSA modulus, all inputs to the KEM combiner are fixed-size and thus do not require length-prefixing. The <tt>CompositeKEM.Decap()</tt> specified in <xref target="sect-composite-decaps"/> adds further error handling to protect the KEM combiner from malicious inputs.</t>
        <t>The construction of the KEM combiner has implications for security, discussed in <xref target="sec-cons-kem-combiner"/>, and for FIPS-certifiability, discussed in <xref target="sec-fips"/>.</t>
      </section>
      <section anchor="decapsulation-failure">
        <name>Decapsulation failure</name>
        <t>Provided all inputs are well-formed, the key establishment procedure of ML-KEM will never explicitly fail. Specifically, the ML-KEM.Encaps and ML-KEM.Decaps algorithms from <xref target="FIPS.203"/> will always output a value with the same data type as a shared secret key, and will never output an error or failure symbol. However, it is possible (though extremely unlikely) that the process will fail in the sense that ML-KEM.Encaps and ML-KEM.Decaps will produce different outputs, even though both of them are behaving honestly and no adversarial interference is present. In this case, the sender and recipient clearly did not succeed in producing a shared secret key. This event is called a decapsulation failure. Estimates for the decapsulation failure probability (or rate) for each of the ML-KEM parameter sets are provided in Table 1  of <xref target="FIPS.203"/> and reproduced here in <xref target="tab-mlkem-failure-rate"/>.</t>
        <table anchor="tab-mlkem-failure-rate">
          <name>ML-KEM decapsulation failure rates</name>
          <thead>
            <tr>
              <th align="left">Parameter set</th>
              <th align="left">Decapsulation failure rate</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ML-KEM-512</td>
              <td align="left">2^(-139)</td>
            </tr>
            <tr>
              <td align="left">ML-KEM-768</td>
              <td align="left">2^(-164)</td>
            </tr>
            <tr>
              <td align="left">ML-KEM-1024</td>
              <td align="left">2^(-174)</td>
            </tr>
          </tbody>
        </table>
        <t>In the case of ML-KEM decapsulation failure, Composite ML-KEM MUST preserve the same behaviour and return a well-formed output.</t>
      </section>
    </section>
    <section anchor="composite-ml-kem-functions">
      <name>Composite ML-KEM Functions</name>
      <section anchor="key-generation">
        <name>Key Generation</name>
        <t>To generate a new keypair for Composite schemes, the <tt>KeyGen() -&gt; (pk, sk)</tt> function is used. The KeyGen() function calls the two key generation functions of the component algorithms for the Composite keypair in no particular order. Multi-process or multi-threaded applications might choose to execute the key generation functions in parallel for better key generation performance.</t>
        <t>The following process is used to generate composite keypair values:</t>
        <figure anchor="alg-composite-keygen">
          <name>Composite KeyGen(pk, sk)</name>
          <artwork><![CDATA[
KeyGen() -> (pk, sk)

Explicit Inputs:
     None

Implicit Input:
  ML-KEM     A placeholder for the specific ML-KEM algorithm and
             parameter set to use, for example, could be "ML-KEM-65".

  Trad       A placeholder for the specific traditional algorithm and
             parameter set to use, for example "RSA-OAEP"
             or "X25519".

Output:
  (pk, sk)  The composite keypair.

Key Generation Process:

  1. Generate componint keys

    (mlkemPK, mlkemSK) = ML-KEM.KeyGen()
    (tradPK, tradSK)   = Trad.KeyGen()

  2. Check for component key gen failure
    if NOT (mlkemPK, mlkemSK) or NOT (tradPK, tradSK):
      output "Key generation error"

  3. Encode the component keys into composite structures

    pk = CompositeKEMPublicKey(mlkemPK, tradPK)
    sk = CompositeKEMPrivateKey(mlkemSK, tradSK)

  4. Output the composite keys

    return (pk, sk)

]]></artwork>
        </figure>
        <t>The structures CompositeKEMPublicKey and CompositeKEMPrivateKey are described in <xref target="sec-composite-pub-keys"/> and <xref target="sec-priv-key"/> respectively and are used here as placeholders since implementations MAY use their own internal key representations in cases where interoperability is not required.</t>
        <t>In order to ensure fresh keys, the key generation functions MUST be executed for both component algorithms. Compliant parties MUST NOT use or import component keys that are used in other contexts, combinations, or by themselves as keys for standalone algorithm use.</t>
        <t>Note that in step 2 above, both component key generation processes are invoked, and no indication is given about which one failed. This SHOULD be done in a timing-invariant way to prevent side-channel attackers from learning which component algorithm failed.</t>
      </section>
      <section anchor="composite-ml-kemencap">
        <name>Composite-ML-KEM.Encap</name>
        <t>The <tt>Encap(pk)</tt> of a Composite ML-KEM algorithm is designed to behave exactly the same as <tt>ML-KEM.Encaps(ek)</tt> defined in Algorithm 20 in Section 7.2 of <xref target="FIPS.203"/>. Specifically, <tt>Composite-ML-KEM.Encap(pk)</tt> produces a 256-bit shared secret key that can be used directly with any symmetric-key cryptographic algorithm. In this way, Composite ML-KEM can be used as a direct drop-in replacement anywhere that ML-KEM is used.</t>
        <figure anchor="alg-composite-mlkem-encap">
          <name>Composite-ML-KEM.Encap(pk)</name>
          <artwork><![CDATA[
Composite-ML-KEM.Encap(pk) -> (ss, ct)

Explicit Input:

  pk          Composite public key conisting of encryption public keys
              for each component.

Implicit inputs:

  ML-KEM   A placeholder for the specific ML-KEM algorithm and
           parameter set to use, for example, could be "ML-KEM-768".

  Trad     A placeholder for the specific ML-KEM algorithm and
           parameter set to use, for example "RSA-OAEP"
           or "X25519".

  KDF      The KDF specified for the given Composite ML-KEM algorithm.
           See algorithm specifications below.

  Domain   Domain separator value for binding the signature to the
           Composite OID. See section on Domain Separators below.

Output:

  ss      The shared secret key, a 256-bit key suitable for use with
          symmetric cryptographic algorithms.

  ct      The ciphertext, a CompositeCiphertextValue.

Encap Process:

  1. Separate the public keys.

      (mlkemPK, tradPK) = pk

  2.  Perform the respective component Encap operations according to
      their algorithm specifications.

      (mlkemCT, mlkemSS) = MLKEM.Encaps(mlkemPK)
      (tradCT, tradSS) = TradKEM.Encap(tradPK)

  3. If either ML-KEM.Encaps() or TradKEM.Encap() return an error,
     then this process must return an error.

      if NOT (mlkemCT, mlkemSS) or NOT (tradCT, tradSS):
        output "Encapsulation error"

  4. Encode and combine

     ct = CompositeCiphertextValue(mlkemCT, tradCT)
     ss = KDF(mlkemSS || tradSS || tradCT || tradPK || Domain)

  5. Output shared secret key and ciphertext

     return (ss, ct)
]]></artwork>
        </figure>
        <t>The specific values for <tt>KDF</tt> are defined per Composite ML-KEM algorithm in <xref target="tab-kem-algs"/> and the specific values for <tt>Domain</tt> are defined per Composite ML-KEM algorithm in <xref target="sec-alg-ids"/>. <tt>CompositeCiphertextValue</tt> is defined in <xref target="sec-CompositeCiphertextValue"/>.</t>
      </section>
      <section anchor="sect-composite-decaps">
        <name>Composite-ML-KEM.Decap</name>
        <t>The <tt>Decap(sk, ct) -&gt; ss</tt> of a Composite ML-KEM algorithm is designed to behave exactly the same as <tt>ML-KEM.Decaps(dk, c)</tt> defined in Algorithm 21 in Section 7.3 of <xref target="FIPS.203"/>. Specifically, <tt>Composite-ML-KEM.Decap(sk, ct)</tt> produces a 256-bit shared secret key that can be used directly with any symmetric-key cryptographic algorithm. In this way, Composite ML-KEM can be used as a direct drop-in replacement anywhere that ML-KEM is used.</t>
        <figure anchor="alg-composite-mlkem-decap">
          <name>Composite-ML-KEM.Decap(sk, ct)</name>
          <artwork><![CDATA[
Composite-ML-KEM.Decap(sk, ct) -> ss

Explicit Input:

  sk    Composite private key consisting of decryption private keys for
        each component.

  ct      The ciphertext, a CompositeCiphertextValue.

Implicit inputs:

  ML-KEM   A placeholder for the specific ML-KEM algorithm and
           parameter set to use, for example, could be "ML-KEM-768".

  Trad     A placeholder for the specific traditional algorithm and
           parameter set to use, for example "RSA-OAEP"
           or "X25519".

  KDF      The KDF specified for the given Composite ML-KEM algorithm.
           See algorithm specifications below.

  Domain   Domain separator value for binding the signature to the
           Composite OID. See section on Domain Separators below.

Output:

  ss      The shared secret key, a 256-bit key suitable for use with
          symmetric cryptographic algorithms.

Decap Process:

  1. Separate the private keys and ciphertexts
      (mlkemSK, tradSK) = sk
      (mlkemCT, tradCT) = ct

  2.  Perform the respective component Encap operations according to
      their algorithm specifications.

      mlkemSS = MLKEM.Decaps(mlkemSK, mlkemCT)
      tradSS  = TradKEM.Decap(tradSK, tradCT)

  3. If either ML-KEM.Decaps() or TradKEM.Decap() return an error,
     then this process must return an error.

      if NOT mlkemSS or NOT tradSS:
        output "Encapsulation error"

  4. Combine

      ss = KDF(mlkemSS || tradSS || tradCT || tradPK || Domain)

  5. Output shared secret key

     return ss
]]></artwork>
        </figure>
        <t>It is possible to use component private keys stored in separate software or hardware keystores. Variations in the process to accommodate particular private key storage mechanisms are considered to be conformant to this document so long as it produces the same output and error handling as the process sketched above.</t>
        <t>In order to properly achieve its security properties, the KEM combiner requires that all inputs are fixed-length. Since each Composite ML-KEM algorithm fully specifies its component algorithms, including key sizes, all inputs should be fixed-length in non-error scenarios, however some implementations may need to perform additional checking to handle certain error conditions. In particular, the KEM combiner step should not be performed if either of the component decapsulations returned an error condition indicating malformed inputs. For timing-invariance reasons, it is RECOMMENDED to perform both decapsulation operations and check for errors afterwards to to prevent an attacker from using a timing channel to tell which component failed decapsulation. Also, RSA-based composites MUST ensure that the modulus size (ie the size of tradCT and tradPK) matches that specified for the given Composite ML-KEM algorithm in <xref target="tab-kem-algs"/>; depending on the cryptographic library used, this check may be done by the library or may require an explicit check as part of the <tt>CompositeKEM.Decap()</tt> routine.</t>
        <!-- End of Introduction section -->

</section>
    </section>
    <section anchor="sec-composite-keys">
      <name>Composite Key Structures</name>
      <t>In order to form composite public keys and ciphertext values, we define ASN.1-based composite encodings such that these structures can be used as a drop-in replacement for existing public key and ciphertext fields such as those found in PKCS#10 <xref target="RFC2986"/>, CMP <xref target="RFC4210"/>, X.509 <xref target="RFC5280"/>, CMS <xref target="RFC5652"/>.</t>
      <section anchor="sec-composite-pub-keys">
        <name>CompositeKEMPublicKey</name>
        <t>The wire encoding of a Composite ML-KEM public key is:</t>
        <sourcecode type="ASN.1" name="CompositeKEMPublicKey-asn.1-structures"><![CDATA[
CompositeKEMPublicKey ::= SEQUENCE SIZE (2) OF BIT STRING
]]></sourcecode>
        <t>Since RSA and ECDH component public keys are themselves in a DER encoding, the following ASN.1 structures show the internal structure of the various public key types used in this specification:</t>
        <sourcecode type="ASN.1"><![CDATA[
RsaCompositeKEMPublicKey ::= SEQUENCE {
        firstPublicKey BIT STRING (ENCODED BY id-raw-key),
        secondPublicKey BIT STRING (CONTAINING RSAPublicKey)
      }

EcCompositeKEMPublicKey ::= SEQUENCE {
        firstPublicKey BIT STRING (ENCODED BY id-raw-key),
        secondPublicKey BIT STRING (CONTAINING ECPoint)
      }

EdCompositeKEMPublicKey ::= SEQUENCE {
        firstPublicKey BIT STRING (ENCODED BY id-raw-key),
        secondPublicKey BIT STRING (ENCODED BY id-raw-key)
      }

]]></sourcecode>
        <t><tt>id-raw-key</tt> is defined by this document. It signifies that the public key has no ASN.1 wrapping and the raw bits are placed here according to the encoding of the underlying algorithm specification. In some situations and protocols, the key might be wrapped in ASN.1 or
may have some other additional decoration or encoding. If so, such wrapping MUST be removed prior to encoding the key itself as a BIT STRING.</t>
        <t>For use with this document, ML-KEM keys MUST be be the raw BIT STRING representation as specified in <xref target="I-D.ietf-lamps-kyber-certificates"/> and Edwards Curve keys MUST be the raw BIT STRING representation as specified in <xref target="RFC8410"/>.</t>
        <t>Some applications may need to reconstruct the <tt>SubjectPublicKeyInfo</tt> objects corresponding to each component public key. <xref target="tab-kem-algs"/> in <xref target="sec-alg-ids"/> provides the necessary mapping between composite and their component algorithms for doing this reconstruction. This also motivates the design choice of <tt>SEQUENCE OF BIT STRING</tt> instead of <tt>SEQUENCE OF OCTET STRING</tt>; using <tt>BIT STRING</tt> allows for easier transcription between CompositeKEMPublicKey and SubjectPublicKeyInfo.</t>
        <t>When the CompositeKEMPublicKey must be provided in octet string or bit string format, the data structure is encoded as specified in <xref target="sec-encoding-rules"/>.</t>
        <t>In order to maintain security properties of the composite, applications that use composite keys MUST always perform fresh key generations of both component keys and MUST NOT reuse existing key material. See <xref target="sec-cons-key-reuse"/> for a discussion.</t>
        <t>The following ASN.1 Information Object Class is defined to allow for compact definitions of each composite algorithm, leading to a smaller overall ASN.1 module.</t>
        <sourcecode type="ASN.1" name="CompositeKeyObject-asn.1-structures"><![CDATA[
  pk-CompositeKEM {OBJECT IDENTIFIER:id, PublicKeyType}
    PUBLIC-KEY ::= {
      IDENTIFIER id
      KEY PublicKeyType
      PARAMS ARE absent
      CERT-KEY-USAGE { keyEncipherment }
    }
]]></sourcecode>
        <t>As an example, the public key type <tt>pk-MLKEM768-ECDH-P384</tt> can be defined compactly as:</t>
        <artwork><![CDATA[
pk-MLKEM768-ECDH-P384 PUBLIC-KEY ::=
  pk-CompositeKEM {
    id-MLKEM768-ECDH-P384,
    EcCompositeKemPublicKey }
]]></artwork>
        <t>The full set of key types defined by this specification can be found in the ASN.1 Module in <xref target="sec-asn1-module"/>.</t>
      </section>
      <section anchor="sec-priv-key">
        <name>CompositeKEMPrivateKey</name>
        <t>When a Composite ML-KEM private key is to be exported from a cryptographic module, it uses an analogous definition to the public keys:</t>
        <sourcecode type="ASN.1" name="CompositeKEMPrivateKey-asn.1-structures"><![CDATA[
CompositeKEMPrivateKey ::= SEQUENCE SIZE (2) OF OCTET STRING
]]></sourcecode>
        <t>Each element of the <tt>CompositeKEMPrivateKey</tt> Sequence is an <tt>OCTET STRING</tt> according to the encoding of the underlying algorithm specification and will decode into the respective private key structures in an analogous way to the public key structures defined in <xref target="sec-composite-pub-keys"/>. This document does not provide helper classes for private keys.  The PrivateKey for each component algorithm MUST be in the same order as defined in <xref target="sec-composite-pub-keys"/>.</t>
        <t>Use cases that require an interoperable encoding for composite private keys will often need to place a <tt>CompositeKEMPrivateKey</tt> inside a <tt>OneAsymmetricKey</tt> structure defined in <xref target="RFC5958"/>, such as when private keys are carried in PKCS #12 <xref target="RFC7292"/>, CMP <xref target="RFC4210"/> or CRMF <xref target="RFC4211"/>. The definition of <tt>OneAsymmetricKey</tt> is copied here for convenience:</t>
        <sourcecode type="ASN.1" name="RFC5958-OneAsymmetricKey-asn.1-structure"><![CDATA[
 OneAsymmetricKey ::= SEQUENCE {
       version                   Version,
       privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,
       privateKey                PrivateKey,
       attributes            [0] Attributes OPTIONAL,
       ...,
       [[2: publicKey        [1] PublicKey OPTIONAL ]],
       ...
     }

  ...
  PrivateKey ::= OCTET STRING
                        -- Content varies based on type of key.  The
                        -- algorithm identifier dictates the format of
                        -- the key.
]]></sourcecode>
        <t>When a <tt>CompositeKEMPrivateKey</tt> is conveyed inside a OneAsymmetricKey structure (version 1 of which is also known as PrivateKeyInfo) <xref target="RFC5958"/>, the privateKeyAlgorithm field SHALL be set to the corresponding composite algorithm identifier defined according to <xref target="sec-alg-ids"/> and its parameters field MUST be absent.  The privateKey field SHALL contain the <tt>CompositeKEMPrivateKey</tt>, and the <tt>publicKey</tt> field remains OPTIONAL.  If the <tt>publicKey</tt> field is present, it MUST be a <tt>CompositeSignaturePublicKey</tt>.</t>
        <t>Some applications may need to reconstruct the <tt>OneAsymmetricKey</tt> objects corresponding to each component private key. <xref target="sec-alg-ids"/> provides the necessary mapping between composite and their component algorithms for doing this reconstruction.</t>
        <t>Component keys of a CompositeKEMPrivateKey MUST NOT be used in any other type of key or as a standalone key. For more details on the security considerations around key reuse, see section <xref target="sec-cons-key-reuse"/>.</t>
      </section>
      <section anchor="sec-encoding-rules">
        <name>Encoding Rules</name>
        <!-- EDNOTE 7: Examples of how other specifications specify how a data structure is converted to a bit string can be found in RFC 2313, section 10.1.4, 3279 section 2.3.5, and RFC 4055, section 3.2. -->

<t>Many protocol specifications will require that the composite public key and composite private key data structures be represented by an octet string or bit string.</t>
        <t>When an octet string is required, the DER encoding of the composite data structure SHALL be used directly.</t>
        <sourcecode type="ASN.1"><![CDATA[
CompositeKEMPublicKeyOs ::= OCTET STRING
                      (CONTAINING CompositeKEMPublicKey ENCODED BY der)
]]></sourcecode>
        <t>When a bit string is required, the octets of the DER encoded composite data structure SHALL be used as the bits of the bit string, with the most significant bit of the first octet becoming the first bit, and so on, ending with the least significant bit of the last octet becoming the last bit of the bit string.</t>
        <sourcecode type="ASN.1"><![CDATA[
CompositeKEMPublicKeyBs ::= BIT STRING
                      (CONTAINING CompositeKEMPublicKey ENCODED BY der)
]]></sourcecode>
        <t>In the interests of simplicity and avoiding compatibility issues, implementations that parse these structures MAY accept both BER and DER.</t>
      </section>
      <section anchor="key-usage-bits">
        <name>Key Usage Bits</name>
        <t>When any of the Composite ML-KEM <tt>AlgorithmIdentifier</tt> appears in the <tt>SubjectPublicKeyInfo</tt> field of an X.509 certificate <xref target="RFC5280"/>, the key usage certificate extension MUST only contain</t>
        <artwork><![CDATA[
keyEncipherment
]]></artwork>
        <t>Composite ML-KEM keys MUST NOT be used in a "dual usage" mode because even if the
traditional component key supports both signing and encryption,
the post-quantum algorithms do not and therefore the overall composite algorithm does not.</t>
      </section>
    </section>
    <section anchor="composite-ml-kem-structures">
      <name>Composite ML-KEM Structures</name>
      <section anchor="sec-kema-CompositeKEM">
        <name>kema-CompositeKEM</name>
        <t>The ASN.1 algorithm object for a Composite ML-KEM is:</t>
        <artwork><![CDATA[
kema-CompositeKEM {
  OBJECT IDENTIFIER:id,
    PUBLIC-KEY:publicKeyType }
    KEM-ALGORITHM ::= {
         IDENTIFIER id
         VALUE CompositeCiphertextValue
         PARAMS ARE absent
         PUBLIC-KEYS { publicKeyType }
        }
]]></artwork>
      </section>
      <section anchor="sec-CompositeCiphertextValue">
        <name>CompositeCiphertextValue</name>
        <t>The <tt>CompositeCipherTextValue</tt> is the DER encoding of a SEQUENCE of the ciphertexts from the
underlying component algorithms.  It is represented in ASN.1 as follows:</t>
        <artwork><![CDATA[
CompositeCiphertextValue ::= SEQUENCE SIZE (2) OF OCTET STRING
]]></artwork>
        <t>The order of the component ciphertexts is the same as the order defined in <xref target="sec-composite-pub-keys"/>.</t>
      </section>
    </section>
    <section anchor="sec-alg-ids">
      <name>Algorithm Identifiers</name>
      <t>This table summarizes the list of Composite ML-KEM algorithms and lists the OID, two component algorithms, and the KDF to be used within combiner function. Domain separator values are defined below in <xref target="sec-domsep-values"/>.</t>
      <t>EDNOTE: these are prototyping OIDs to be replaced by IANA.</t>
      <t>&lt;CompKEM&gt;.1 is equal to 2.16.840.1.114027.80.5.2.1</t>
      <section anchor="composite-ml-kem-algorithm-identifiers">
        <name>Composite-ML-KEM Algorithm Identifiers</name>
        <table anchor="tab-kem-algs">
          <name>Composite ML-KEM key types</name>
          <thead>
            <tr>
              <th align="left">Composite ML-KEM Algorithm</th>
              <th align="left">OID</th>
              <th align="left">First Algorithm</th>
              <th align="left">Second Algorithm</th>
              <th align="left">KDF</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">id-MLKEM768-RSA2048</td>
              <td align="left">&lt;CompKEM&gt;.21</td>
              <td align="left">MLKEM768</td>
              <td align="left">RSA-OAEP 2048</td>
              <td align="left">HKDF-SHA256/256</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-RSA3072</td>
              <td align="left">&lt;CompKEM&gt;.22</td>
              <td align="left">MLKEM768</td>
              <td align="left">RSA-OAEP 3072</td>
              <td align="left">HKDF-SHA256/256</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-RSA4096</td>
              <td align="left">&lt;CompKEM&gt;.23</td>
              <td align="left">MLKEM768</td>
              <td align="left">RSA-OAEP 4096</td>
              <td align="left">HKDF-SHA256/256</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-X25519</td>
              <td align="left">&lt;CompKEM&gt;.24</td>
              <td align="left">MLKEM768</td>
              <td align="left">X25519</td>
              <td align="left">SHA3-256</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-ECDH-P384</td>
              <td align="left">&lt;CompKEM&gt;.25</td>
              <td align="left">MLKEM768</td>
              <td align="left">ECDH-P384</td>
              <td align="left">HKDF-SHA256/256</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-ECDH-brainpoolP256r1</td>
              <td align="left">&lt;CompKEM&gt;.26</td>
              <td align="left">MLKEM768</td>
              <td align="left">ECDH-brainpoolp256r1</td>
              <td align="left">HKDF-SHA256/256</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM1024-ECDH-P384</td>
              <td align="left">&lt;CompKEM&gt;.27</td>
              <td align="left">MLKEM1024</td>
              <td align="left">ECDH-P384</td>
              <td align="left">SHA3-256</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM1024-ECDH-brainpoolP384r1</td>
              <td align="left">&lt;CompKEM&gt;.28</td>
              <td align="left">MLKEM1024</td>
              <td align="left">ECDH-brainpoolP384r1</td>
              <td align="left">SHA3-256</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM1024-X448</td>
              <td align="left">&lt;CompKEM&gt;.29</td>
              <td align="left">MLKEM1024</td>
              <td align="left">X448</td>
              <td align="left">SHA3-256</td>
            </tr>
          </tbody>
        </table>
        <t>For the use of HKDF <xref target="RFC5869"/>: a salt is not provided; ie the default salt (all zeroes of length HashLen) will be used. The output length of HKDF is the same as the block size of the underlying hash function; in particular, <tt>HKDF-SHA256/256</tt> means HKDF-SHA256 with an output length <tt>L</tt> of 256 bits (32 octets).</t>
        <t>Full specifications for the referenced algorithms can be found in <xref target="appdx_components"/>.</t>
      </section>
      <section anchor="sec-domsep-values">
        <name>Domain Separators</name>
        <t>The KEM combiner defined in section <xref target="sec-kem-combiner"/> requires a domain separator <tt>Domain</tt> input.  The following table shows the HEX-encoded domain separator for each Composite ML-KEM AlgorithmID; to use it, the value should be HEX-decoded and used in binary form. The domain separator is simply the DER encoding of the composite algorithm OID.</t>
        <table anchor="tab-kem-domains">
          <name>Composite ML-KEM fixedInfo Domain Separators</name>
          <thead>
            <tr>
              <th align="left">Composite ML-KEM Algorithm</th>
              <th align="left">Domain Separator (in Hex encoding)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">id-MLKEM768-RSA2048</td>
              <td align="left">060B6086480186FA6B50050215</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-RSA3072</td>
              <td align="left">060B6086480186FA6B50050216</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-RSA4096</td>
              <td align="left">060B6086480186FA6B50050217</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-X25519</td>
              <td align="left">060B6086480186FA6B5005021A</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-ECDH-P384</td>
              <td align="left">060B6086480186FA6B50050218</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-ECDH-brainpoolP256r1</td>
              <td align="left">060B6086480186FA6B50050219</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM1024-ECDH-P384</td>
              <td align="left">060B6086480186FA6B5005021B</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM1024-ECDH-brainpoolP384r1</td>
              <td align="left">060B6086480186FA6B5005021C</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM1024-X448</td>
              <td align="left">060B6086480186FA6B5005021D</td>
            </tr>
          </tbody>
        </table>
        <t>EDNOTE: these domain separators are based on the prototyping OIDs assigned on the Entrust arc. We will need to ask for IANA early allocation of these OIDs so that we can re-compute the domain separators over the final OIDs.</t>
      </section>
      <section anchor="rationale-for-choices">
        <name>Rationale for choices</name>
        <ul spacing="normal">
          <li>
            <t>Pair equivalent levels.</t>
          </li>
          <li>
            <t>NIST-P-384 is CNSA approved <xref target="CNSA2.0"/> for all classification levels.</t>
          </li>
          <li>
            <t>521 bit curve not widely used.</t>
          </li>
        </ul>
        <t>A single invocation of SHA3 is known to behave as a dual-PRF, and thus is sufficient for use as a KDF, see <xref target="sec-cons-kem-combiner"/>, however SHA2 is not us must be wrapped in the HKDF construction.</t>
        <t>The lower security levels (ie ML-KEM768) are provided with HKDF-SHA2 as the KDF in order to facilitate implementations that do not have easy access to SHA3 outside of the ML-KEM function. Higher security levels (ie ML-KEM1024) are paired with SHA3 for computational efficiency, and the Edwards Curve (X25519 and X448) combinations are paired with SHA3 for compatibility with other similar specifications.</t>
        <t>While it may seem odd to use 256-bit hash functions at all security levels, this aligns with ML-KEM which produces a 256-bit shared secret key at all security levels. SHA-256 and SHA3-256 both have &gt;= 256 bits of (2nd) pre-image resistance, which is the required property for a KDF to provide 128 bits of security, as allowed in Table 3 of <xref target="SP.800-57pt1r5"/>.</t>
      </section>
      <section anchor="sect-rsaoaep-params">
        <name>RSA-OAEP Parameters</name>
        <t>Use of RSA-OAEP <xref target="RFC8017"/> within <tt>id-MLKEM768-RSA2048</tt>, <tt>id-MLKEM768-RSA3072</tt>, and <tt>id-MLKEM768-RSA4096</tt> requires additional specification.</t>
        <t>First, a quick note on the choice of RSA-OAEP as the supported RSA encryption primitive. RSA-KEM <xref target="RFC5990"/> is more straightforward to work with, but it has fairly limited adoption and therefore is of limited backwards compatibility value. Also, while RSA-PKCS#1v1.5 <xref target="RFC8017"/> is still everywhere, but hard to make secure and no longer FIPS-approved as of the end of 2023 <xref target="SP800-131Ar2"/>, so it is of limited forwards value. This leaves RSA-OAEP <xref target="RFC8017"/> as the remaining choice.</t>
        <t>The RSA component keys MUST be generated at the 2048-bit and 3072-bit security levels respectively.</t>
        <t>As with the other Composite ML-KEM algorithms, when <tt>id-MLKEM768-RSA2048</tt>, <tt>id-MLKEM768-RSA3072</tt>, or <tt>id-MLKEM-RSA4096</tt> is used in an AlgorithmIdentifier, the parameters MUST be absent. The RSA-OAEP SHALL be instantiated with the following hard-coded parameters which are the same for the 2048, 3072 and 4096 bit security levels.</t>
        <table anchor="rsa-oaep-params">
          <name>RSA-OAEP Parameters</name>
          <thead>
            <tr>
              <th align="left">RSAES-OAEP-params</th>
              <th align="left">Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">hashAlgorithm</td>
              <td align="left">id-sha256</td>
            </tr>
            <tr>
              <td align="left">maskGenAlgorithm</td>
              <td align="left">mgf1SHA256Identifier</td>
            </tr>
            <tr>
              <td align="left">pSourceAlgorithm</td>
              <td align="left">pSpecifiedEmpty</td>
            </tr>
            <tr>
              <td align="left">ss_len</td>
              <td align="left">256 bits</td>
            </tr>
          </tbody>
        </table>
        <t>where:</t>
        <ul spacing="normal">
          <li>
            <t><tt>id-sha256</tt> is defined in <xref target="RFC8017"/>.</t>
          </li>
          <li>
            <t><tt>mgf1SHA256Identifier</tt> is defined in <xref target="RFC4055"/>, which refers to the MFG1 function defined in <xref target="RFC8017"/> appendix B.2.1.</t>
          </li>
          <li>
            <t><tt>pSpecifiedEmpty</tt> is defined in <xref target="RFC8017"/> to indicate that the empty string is used for the label.</t>
          </li>
        </ul>
        <t>Note: The mask length, according to <xref target="RFC8017"/>, is <tt>k - hLen - 1</tt>, where <tt>k</tt> is the size of the RSA modulus. Since the choice of hash function and the RSA key size is fixed for each composite algorithm, implementations could choose to pre-compute and hard-code the mask length.</t>
      </section>
    </section>
    <section anchor="use-in-cms">
      <name>Use in CMS</name>
      <t>[EDNOTE: The convention in LAMPS is to specify algorithms and their CMS conventions in separate documents. Here we have presented them in the same document, but this section has been written so that it can easily be moved to a standalone document.]</t>
      <t>Composite ML-KEM algorithms MAY be employed for one or more recipients in the CMS enveloped-data content type <xref target="RFC5652"/>, the CMS authenticated-data content type <xref target="RFC5652"/>, or the CMS authenticated-enveloped-data content type <xref target="RFC5083"/>. In each case, the KEMRecipientInfo <xref target="RFC9629"/> is used with the chosen Composite ML-KEM Algorithm to securely transfer the content-encryption key from the originator to the recipient.</t>
      <t>All recommendations for using Composite ML-KEM in CMS are fully aligned with the use of ML-KEM in CMS <xref target="I-D.ietf-lamps-cms-kyber"/>.</t>
      <section anchor="underlying-components">
        <name>Underlying Components</name>
        <t>A compliant implementation MUST support the following algorithm combinations for the KEMRecipientInfo <tt>kdf</tt> and <tt>wrap</tt> fields when the corresponding Composite ML-KEM algorithm is listed in the KEMRecipientInfo <tt>kem</tt> field. The KDFs listed below align with the KDF used internally within the KEM combiner. An implementation MAY also support other key-derivation functions and other key-encryption algorithms within CMS KEMRecipientInfo and SHOULD use algorithms of equivalent strength or greater.</t>
        <table anchor="tab-cms-kdf-wrap">
          <name>Mandatory-to-implement pairings for CMS KDF and WRAP</name>
          <thead>
            <tr>
              <th align="left">Composite ML-KEM Algorithm</th>
              <th align="left">KDF</th>
              <th align="left">Wrap</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">id-MLKEM768-RSA2048</td>
              <td align="left">id-alg-hkdf-with-sha256</td>
              <td align="left">id-aes128-wrap</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-RSA3072</td>
              <td align="left">id-alg-hkdf-with-sha256</td>
              <td align="left">id-aes128-wrap</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-RSA4096</td>
              <td align="left">id-alg-hkdf-with-sha256</td>
              <td align="left">id-aes128-wrap</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-X25519</td>
              <td align="left">id-kmac256</td>
              <td align="left">id-aes128-wrap</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-ECDH-P384</td>
              <td align="left">id-alg-hkdf-with-sha256</td>
              <td align="left">id-aes256-wrap</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM768-ECDH-brainpoolP256r1</td>
              <td align="left">id-alg-hkdf-with-sha256</td>
              <td align="left">id-aes256-wrap</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM1024-ECDH-P384</td>
              <td align="left">id-kmac256</td>
              <td align="left">id-aes256-wrap</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM1024-ECDH-brainpoolP384r1</td>
              <td align="left">id-kmac256</td>
              <td align="left">id-aes256-wrap</td>
            </tr>
            <tr>
              <td align="left">id-MLKEM1024-X448</td>
              <td align="left">id-kmac256</td>
              <td align="left">id-aes256-wrap</td>
            </tr>
          </tbody>
        </table>
        <t>Full specifications for the referenced algorithms can be found either further down in this section, or in <xref target="appdx_components"/>.</t>
        <t>Note that here we differ slightly from the internal KDF used within the KEM combiner in <xref target="sec-alg-ids"/> because <xref target="RFC9629"/> requires that the KDF listed in the KEMRecipientInfo <tt>kdf</tt> field must have an interface which accepts <tt>KDF(IKM, L, info)</tt>, so here we need to use KMAC and cannot directly use SHA3. Since we require 256-bits of (2nd) pre-image resistance, we use KMAC256 for the Composite ML-KEM algorithms with internally use SHA3-256, as aligned with Table 3 of <xref target="SP.800-57pt1r5"/>.</t>
        <section anchor="use-of-the-hkdf-based-key-derivation-function">
          <name>Use of the HKDF-based Key Derivation Function</name>
          <t>The HMAC-based Extract-and-Expand Key Derivation Function (HKDF) is defined in <xref target="RFC5869"/>.</t>
          <t>The HKDF function is a composition of the HKDF-Extract and HKDF-Expand functions.</t>
          <artwork><![CDATA[
HKDF(salt, IKM, info, L)
  = HKDF-Expand(HKDF-Extract(salt, IKM), info, L)
]]></artwork>
          <t>HKDF(salt, IKM, info, L) takes the following parameters:</t>
          <dl>
            <dt>salt:</dt>
            <dd>
              <t>optional salt value (a non-secret random value). In this document this parameter is unused, that is it is the zero-length string "".</t>
            </dd>
            <dt>IKM:</dt>
            <dd>
              <t>input keying material. In this document this is the shared secret outputted from the Encapsulate() or Decapsulate() functions.  This corresponds to the IKM KDF input from <xref section="5" sectionFormat="of" target="RFC9629"/>.</t>
            </dd>
            <dt>info:</dt>
            <dd>
              <t>optional context and application specific information. In this document this corresponds to the info KDF input from <xref section="5" sectionFormat="of" target="RFC9629"/>. This is the ASN.1 DER encoding of CMSORIforKEMOtherInfo.</t>
            </dd>
            <dt>L:</dt>
            <dd>
              <t>length of output keying material in octets. This corresponds to the L KDF input from <xref section="5" sectionFormat="of" target="RFC9629"/>, which is identified in the kekLength value from KEMRecipientInfo. Implementations MUST confirm that this value is consistent with the key size of the key-encryption algorithm.</t>
            </dd>
          </dl>
          <t>HKDF may be used with different hash functions, including SHA-256 <xref target="FIPS.180-4"/>. The object identifier id-alg-hkdf-with-sha256 is defined in <xref target="RFC8619"/>, and specifies the use of HKDF with SHA-256. The parameter field MUST be absent when this algorithm identifier is used to specify the KDF for ML-KEM in KemRecipientInfo.</t>
        </section>
        <section anchor="use-of-the-kmac-based-key-derivation-function">
          <name>Use of the KMAC-based Key Derivation Function</name>
          <t>KMAC256-KDF is a KMAC-based KDF specified for use in CMS in <xref target="I-D.ietf-lamps-cms-sha3-hash"/>. The definition of KMAC is copied here for convenience.  Here, KMAC# indicates the use of either KMAC128-KDF or KMAC256-KDF, although only KMAC256 is used in this specification.</t>
          <t>KMAC#(K, X, L, S) takes the following parameters:</t>
          <ul empty="true">
            <li>
              <t>K: the input key-derivation key.  In this document this is the shared secret outputted from the Encapsulate() or Decapsulate() functions.  This corresponds to the IKM KDF input from Section 5 of <xref target="RFC9629"/>.</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>X: the context, corresponding to the info KDF input from Section 5 of <xref target="RFC9629"/>. This is the ASN.1 DER encoding of CMSORIforKEMOtherInfo.</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>L: the output length, in bits.  This corresponds to the L KDF input from Section 5 of <xref target="RFC9629"/>, which is identified in the kekLength value from KEMRecipientInfo.  The L KDF input and kekLength values are specified in octets while this L parameter is specified in bits.</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>S: the optional customization label.  In this document this parameter is unused, that is it is the zero-length string "".</t>
            </li>
          </ul>
          <t>The object identifier for KMAC256-KDF is id-kmac256, as defined in <xref target="I-D.ietf-lamps-cms-sha3-hash"/>.</t>
          <t>Since the customization label to KMAC# is not used, the parameter field MUST be absent when id-kmac256 is used as part of an algorithm identifier specifying the KDF to use for Composite ML-KEM in KemRecipientInfo.</t>
        </section>
      </section>
      <section anchor="sec-using-recipientInfo">
        <name>RecipientInfo Conventions</name>
        <t>When Composite ML-KEM is employed for a recipient, the RecipientInfo alternative for that recipient MUST be OtherRecipientInfo using the KEMRecipientInfo structure as defined in <xref target="RFC9629"/>.</t>
        <t>The fields of the KEMRecipientInfo MUST have the following values:</t>
        <ul empty="true">
          <li>
            <t>version is the syntax version number; it MUST be 0.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>rid identifies the recipient's certificate or public key.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>kem identifies the KEM algorithm; it MUST contain one of the Composite ML-KEM identifiers listed in <xref target="sec-alg-ids"/>.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>kemct is the ciphertext produced for this recipient.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>kdf identifies the key-derivation algorithm. Note that the Key Derivation Function (KDF) used for CMS RecipientInfo process MAY be different than the KDF used within the Composite ML-KEM algorithm or one of its components.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>kekLength is the size of the key-encryption key in octets.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>ukm is an optional random input to the key-derivation function. ML-KEM doesn't place any requirements on the ukm contents.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>wrap identifies a key-encryption algorithm used to encrypt the content-encryption key.</t>
          </li>
        </ul>
        <!-- End of recipientinfo conventions section -->

</section>
      <section anchor="certificate-conventions">
        <name>Certificate Conventions</name>
        <t>The conventions specified in this section augment RFC 5280 <xref target="RFC5280"/>.</t>
        <t>The willingness to accept a Composite ML-KEM Algorithm MAY be signaled by the use of the SMIMECapabilities Attribute as specified in Section 2.5.2. of <xref target="RFC8551"/> or the SMIMECapabilities certificate extension as specified in <xref target="RFC4262"/>.</t>
        <t>The intended application for the public key MAY be indicated in the key usage certificate extension as specified in Section 4.2.1.3 of <xref target="RFC5280"/>. If the keyUsage extension is present in a certificate that conveys a Composite ML-KEM public key, then the key usage extension MUST contain only the following value:</t>
        <artwork><![CDATA[
keyEncipherment
]]></artwork>
        <t>The digitalSignature and dataEncipherment values MUST NOT be present. That is, a public key intended to be employed only with a Composite ML-KEM algorithm MUST NOT also be employed for data encryption or for digital signatures. This requirement does not carry any particular security consideration; only the convention that KEM keys be identified with the <tt>keyEncipherment</tt> key usage.</t>
      </section>
      <section anchor="smimecapabilities-attribute-conventions">
        <name>SMIMECapabilities Attribute Conventions</name>
        <t>Section 2.5.2 of <xref target="RFC8551"/> defines the SMIMECapabilities attribute to announce a partial list of algorithms that an S/MIME implementation can support. When constructing a CMS signed-data content type <xref target="RFC5652"/>, a compliant implementation MAY include the SMIMECapabilities attribute that announces support for the RSA-OAEP Algorithm.</t>
        <t>The SMIMECapability SEQUENCE representing a Composite ML-KEM Algorithm MUST include the appropriate object identifier as per <xref target="tab-kem-algs"/> in the capabilityID field.</t>
      </section>
    </section>
    <section anchor="sec-asn1-module">
      <name>ASN.1 Module</name>
      <sourcecode type="ASN.1"><![CDATA[
<CODE STARTS>

Composite-MLKEM-2024
      { iso(1) identified-organization(3) dod(6) internet(1) 
        security(5) mechanisms(5) pkix(7) id-mod(0) 
        id-mod-composite-mlkem-2024(TBDMOD) }

DEFINITIONS IMPLICIT TAGS ::= BEGIN

EXPORTS ALL;

IMPORTS

PUBLIC-KEY, AlgorithmIdentifier{}, SMIME-CAPS
  FROM AlgorithmInformation-2009  -- RFC 5912 [X509ASN1]
      { iso(1) identified-organization(3) dod(6) internet(1)
        security(5) mechanisms(5) pkix(7) id-mod(0)
        id-mod-algorithmInformation-02(58) }

KEM-ALGORITHM
  FROM KEMAlgorithmInformation-2023
      { iso(1) identified-organization(3) dod(6) internet(1)
        security(5) mechanisms(5) pkix(7) id-mod(0)
        id-mod-kemAlgorithmInformation-2023(109) }

SubjectPublicKeyInfo
  FROM PKIX1Explicit-2009
      { iso(1) identified-organization(3) dod(6) internet(1)
        security(5) mechanisms(5) pkix(7) id-mod(0)
        id-mod-pkix1-explicit-02(51) }

OneAsymmetricKey
    FROM AsymmetricKeyPackageModuleV1
      { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
        pkcs-9(9) smime(16) modules(0)
        id-mod-asymmetricKeyPkgV1(50) }

RSAPublicKey, ECPoint
  FROM PKIXAlgs-2009 
    { iso(1) identified-organization(3) dod(6)
      internet(1) security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-algorithms2008-02(56) }

;


--
-- Object Identifiers
--

-- Defined in ITU-T X.690
der OBJECT IDENTIFIER ::=
  {joint-iso-itu-t asn1(1) ber-derived(2) distinguished-encoding(1)}


-- Just for testing, to be assigned by IANA
id-raw-key OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) raw(999) 1 }

--
-- Composite KEM basic structures
--

CompositeKEMPublicKey ::= SEQUENCE SIZE (2) OF BIT STRING

CompositeKEMPublicKeyOs ::= OCTET STRING (CONTAINING 
                                CompositeKEMPublicKey ENCODED BY der)

CompositeKEMPublicKeyBs ::= BIT STRING (CONTAINING 
                                CompositeKEMPublicKey ENCODED BY der)

CompositeKEMPrivateKey ::= SEQUENCE SIZE (2) OF OCTET STRING

CompositeCiphertextValue ::= SEQUENCE SIZE (2) OF OCTET STRING

RsaCompositeKemPublicKey ::= SEQUENCE {
        firstPublicKey BIT STRING (ENCODED BY id-raw-key),
        secondPublicKey BIT STRING (CONTAINING RSAPublicKey)
      }   

EcCompositeKemPublicKey ::= SEQUENCE {
        firstPublicKey BIT STRING (ENCODED BY id-raw-key),
        secondPublicKey BIT STRING (CONTAINING ECPoint)
      }

EdCompositeKemPublicKey ::= SEQUENCE {
        firstPublicKey BIT STRING (ENCODED BY id-raw-key),
        secondPublicKey BIT STRING (ENCODED BY id-raw-key)
      }

--
-- Information Object Classes
--

pk-CompositeKEM {OBJECT IDENTIFIER:id, PublicKeyType}
  PUBLIC-KEY ::= {
    IDENTIFIER id
    KEY PublicKeyType
    PARAMS ARE absent
    CERT-KEY-USAGE { keyEncipherment }
  }

kema-CompositeKEM {
  OBJECT IDENTIFIER:id,
    PUBLIC-KEY:publicKeyType }
    KEM-ALGORITHM ::= {
         IDENTIFIER id
         VALUE CompositeCiphertextValue
         PARAMS ARE absent
         PUBLIC-KEYS { publicKeyType }
         SMIME-CAPS { IDENTIFIED BY id }
        }



--
-- Composite KEM Algorithms
--


-- TODO: OID to be replaced by IANA
id-MLKEM768-RSA2048 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) 
  entrust(114027) algorithm(80) explicitcomposite(5) kem(2) 21 }

pk-MLKEM768-RSA2048 PUBLIC-KEY ::= 
  pk-CompositeKEM { 
    id-MLKEM768-RSA2048, 
    RsaCompositeKemPublicKey }

kema-MLKEM768-RSA2048 KEM-ALGORITHM ::= 
    kema-CompositeKEM{
      id-MLKEM768-RSA2048, 
      pk-MLKEM768-RSA2048 }



-- TODO: OID to be replaced by IANA
id-MLKEM768-RSA3072 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) 
  entrust(114027) algorithm(80) explicitcomposite(5) kem(2) 22 }

pk-MLKEM768-RSA3072 PUBLIC-KEY ::= 
  pk-CompositeKEM {
    id-MLKEM768-RSA3072, 
    RsaCompositeKemPublicKey }

kema-MLKEM768-RSA3072 KEM-ALGORITHM ::=
    kema-CompositeKEM{
      id-MLKEM768-RSA3072, 
      pk-MLKEM768-RSA3072 }



-- TODO: OID to be replaced by IANA
id-MLKEM768-RSA4096 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) 
  entrust(114027) algorithm(80) explicitcomposite(5) kem(2) 23 }

pk-MLKEM768-RSA4096 PUBLIC-KEY ::= 
  pk-CompositeKEM {
    id-MLKEM768-RSA4096, 
    RsaCompositeKemPublicKey }

kema-MLKEM768-RSA4096 KEM-ALGORITHM ::=
    kema-CompositeKEM{
      id-MLKEM768-RSA4096, 
      pk-MLKEM768-RSA4096 }


-- TODO: OID to be replaced by IANA
id-MLKEM768-ECDH-P384 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) 
  entrust(114027) algorithm(80) explicitcomposite(5) kem(2) 25 }

pk-MLKEM768-ECDH-P384 PUBLIC-KEY ::= 
  pk-CompositeKEM {
    id-MLKEM768-ECDH-P384, 
    EcCompositeKemPublicKey }

kema-MLKEM768-ECDH-P384 KEM-ALGORITHM ::= 
    kema-CompositeKEM{
      id-MLKEM768-ECDH-P384, 
      pk-MLKEM768-ECDH-P384 }


-- TODO: OID to be replaced by IANA
id-MLKEM768-ECDH-brainpoolP256r1 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) 
  entrust(114027) algorithm(80) explicitcomposite(5) kem(2) 26 }

pk-MLKEM768-ECDH-brainpoolP256r1 PUBLIC-KEY ::= 
  pk-CompositeKEM {
    id-MLKEM768-ECDH-brainpoolP256r1, 
    EcCompositeKemPublicKey }

kema-MLKEM768-ECDH-brainpoolP256r1 KEM-ALGORITHM ::= 
    kema-CompositeKEM{
      id-MLKEM768-ECDH-brainpoolP256r1, 
      pk-MLKEM768-ECDH-brainpoolP256r1 }


-- TODO: OID to be replaced by IANA
id-MLKEM768-X25519 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1)
  entrust(114027) algorithm(80) explicitcomposite(5) kem(2) 24 }

pk-MLKEM768-X25519 PUBLIC-KEY ::= 
  pk-CompositeKEM {
    id-MLKEM768-X25519, 
    EdCompositeKemPublicKey }

kema-MLKEM768-X25519 KEM-ALGORITHM ::= 
    kema-CompositeKEM{
      id-MLKEM768-X25519, 
      pk-MLKEM768-X25519 }



-- TODO: OID to be replaced by IANA
id-MLKEM1024-ECDH-P384 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1)
  entrust(114027) algorithm(80) explicitcomposite(5) kem(2) 27 }

pk-MLKEM1024-ECDH-P384 PUBLIC-KEY ::= 
  pk-CompositeKEM {
    id-MLKEM1024-ECDH-P384, 
    EcCompositeKemPublicKey }

kema-MLKEM1024-ECDH-P384 KEM-ALGORITHM ::= 
    kema-CompositeKEM{
      id-MLKEM1024-ECDH-P384, 
      pk-MLKEM1024-ECDH-P384 }


-- TODO: OID to be replaced by IANA
id-MLKEM1024-ECDH-brainpoolP384r1 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) 
  entrust(114027) algorithm(80) explicitcomposite(5) kem(2) 28 }

pk-MLKEM1024-ECDH-brainpoolP384r1 PUBLIC-KEY ::= 
  pk-CompositeKEM{
    id-MLKEM1024-ECDH-brainpoolP384r1, 
    EcCompositeKemPublicKey }

kema-MLKEM1024-ECDH-brainpoolP384r1 KEM-ALGORITHM ::= 
    kema-CompositeKEM{
      id-MLKEM1024-ECDH-brainpoolP384r1, 
      pk-MLKEM1024-ECDH-brainpoolP384r1 }
      

-- TODO: OID to be replaced by IANA
id-MLKEM1024-X448 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) 
  entrust(114027) algorithm(80) explicitcomposite(5) kem(2) 29 }

pk-MLKEM1024-X448 PUBLIC-KEY ::= 
  pk-CompositeKEM {
    id-MLKEM1024-X448, 
    EdCompositeKemPublicKey }

kema-MLKEM1024-X448 KEM-ALGORITHM ::= 
    kema-CompositeKEM{
      id-MLKEM1024-X448, 
      pk-MLKEM1024-X448 }


--
-- Expand the S/MIME capabilities set used by CMS [RFC5911]
--

-- TODO: this doesn't compile, error:
-- "The referenced object in the 'ValueFromObject' 
-- syntax with the field '&smimeCaps' is invalid or does not exist."
-- We need help from an SMIME expert

SMimeCaps SMIME-CAPS ::=
    { kema-MLKEM768-RSA2048.&smimeCaps |
      kema-MLKEM768-RSA3072.&smimeCaps |
      kema-MLKEM768-RSA4096.&smimeCaps |
      kema-MLKEM768-ECDH-P384.&smimeCaps |
      kema-MLKEM768-ECDH-brainpoolP256r1.&smimeCaps |
      kema-MLKEM768-X25519.&smimeCaps |
      kema-MLKEM1024-ECDH-P384.&smimeCaps |
      kema-MLKEM1024-ECDH-brainpoolP384r1.&smimeCaps |
      kema-MLKEM1024-X448.&smimeCaps,
      ... }

END

<CODE ENDS>

]]></sourcecode>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <section anchor="object-identifier-allocations">
        <name>Object Identifier Allocations</name>
        <t>EDNOTE to IANA: OIDs will need to be replaced in both the ASN.1 module and in <xref target="tab-kem-algs"/>.</t>
        <section anchor="module-registration-smi-security-for-pkix-module-identifier">
          <name>Module Registration - SMI Security for PKIX Module Identifier</name>
          <ul spacing="normal">
            <li>
              <t>Decimal: IANA Assigned - <strong>Replace TBDMOD</strong></t>
            </li>
            <li>
              <t>Description: Composite-KEM-2023 - id-mod-composite-kems</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
          </ul>
        </section>
        <section anchor="object-identifier-registrations-smi-security-for-pkix-algorithms">
          <name>Object Identifier Registrations - SMI Security for PKIX Algorithms</name>
          <ul spacing="normal">
            <li>
              <t>id-raw-key</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description: Designates a public key BIT STRING with no ASN.1 structure.</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLKEM768-RSA2048
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description: id-MLKEM768-RSA2048</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLKEM768-RSA3072
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description: id-MLKEM768-RSA3072</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLKEM768-RSA4096
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description: id-MLKEM768-RSA4096</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLKEM768-ECDH-P384
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description: id-MLKEM768-ECDH-P384</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLKEM768-ECDH-brainpoolP256r1
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description: id-MLKEM768-ECDH-brainpoolP256r1</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLKEM768-X25519
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description: id-MLKEM768-X25519</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLKEM1024-ECDH-P384
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description: id-MLKEM1024-ECDH-P384</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLKEM1024-ECDH-brainpoolP384r1
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description: id-MLKEM1024-ECDH-brainpoolP384r1</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLKEM1024-X448
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description: id-MLKEM1024-X448</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
          </ul>
          <!-- End of IANA Considerations section -->

</section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="sec-cons-kem-combiner">
        <name>KEM Combiner Security Analysis</name>
        <t>EDNOTE: the exact text to put here depends on the outcome of the CFRG KEM Combiners and X-Wing discussion. If CFRG doesn't move fast enough for us, then we may need to leverage this security consideration directly on top of the X-Wing paper <xref target="X-Wing"/>.</t>
        <t>The primary security property of the KEM combiner is that it preserves IND-CCA2 of the overall Composite ML-KEM so long as at least one component is IND-CCA2 <xref target="GHP18">X-Wing</xref>. Additionally, we also need to consider the case where one of the component algorithms is completely broken; that the private key is known to an attacker, or worse that the public key, private key, and ciphertext are manipulated by the attacker. In this case, we rely on the construction of the KEM combiner to ensure that the value of the other shared secret cannot be leaked or the combined shared secret predicted via manipulation of the broken algorithm. The following sections continue this discussion.</t>
        <section anchor="sec-cons-ct-collision">
          <name>Second pre-image resistance of component KEMs</name>
          <t>The notion of a second pre-image resistant KEM is defined in <xref target="X-Wing"/> being the property that it is computationally difficult to find two different ciphertexts <tt>c != c'</tt> that will decapsulate to the same shared secret under the same public key. For the purposes of a hybrid KEM combiner, this property means that given two composite ciphertexts <tt>(c1, c2)</tt> and <tt>(c1', c2')</tt>, we must obtain a unique overall shared secret so long as either <tt>c1 != c1'</tt> or <tt>c2 != c2'</tt> -- i.e. the overall Composite ML-KEM is second pre-image resistant, and therefore secure so, long as one of the component KEMs is.</t>
          <t>In <xref target="X-Wing"/> it is proven that ML-KEM is a second pre-image resistant KEM and therefore the ML-KEM ciphertext can safely be omitted from the KEM combiner. Note that this makes a fundamental assumption on ML-KEM remaining ciphertext second pre-image resistant, and therefore this formulation of KEM combiner does not fully protect against implementation errors in the ML-KEM component -- particularly around the ciphertext check step of the Fujisaki-Okamoto transform -- which could trivially lead to second ciphertext pre-image attacks that break the IND-CCA2 security of the ML-KEM component and of the overall Composite ML-KEM. This could be more fully mitigated by binding the ML-KEM ciphertext in the combiner, but a design decision was made to settle for protection against algorithmic attacks and not implementation attacks against ML-KEM in order to increase performance.</t>
          <t>However, since neither RSA-OAEP nor ECDH guarantee second pre-image resistance at all, even in a correct implementation, these ciphertexts are bound to the key derivation in order to guarantee that <tt>c != c'</tt> will yield a unique ciphertext, and thus restoring second pre-image resistance to the overall Composite ML-KEM.</t>
        </section>
        <section anchor="sha3-vs-hkdf-sha2">
          <name>SHA3 vs HKDF-SHA2</name>
          <t>In order to achieve the desired security property that the Composite ML-KEM is IND-CCA2 whenever at least one of the component KEMs is, the KDF used in the KEM combiner needs to possess collision and second pre-image resistance with respect to each of its inputs independently; a property sometimes called "dual-PRF" <xref target="Aviram22"/>. Collision and second-pre-image resistance protects against compromise of one component algorithm from resulting in the ability to construct multiple different ciphertexts which result in the same shared secret. Pre-image resistance protects against compromise of one component algorithm being used to attack and learn the value of the other shared secret.</t>
          <t>SHA3 is known to have all of the necessary dual-PRF properties <xref target="X-Wing"/>, but SHA2 does not and therefore all SHA2-based constructions MUST use SHA2 within an HMAC construction such as HKDF-SHA2 <xref target="GHP18"/>.</t>
        </section>
        <section anchor="generifying-this-construction">
          <name>Generifying this construction</name>
          <t>It should be clear that the security analysis of the presented KEM combiner construction relies heavily on the specific choices of component algorithms and combiner KDF, and this combiner construction SHOULD NOT by applied to any other combination of ciphers without performing the appropriate security analysis.</t>
        </section>
      </section>
      <section anchor="sec-cons-key-reuse">
        <name>Key Reuse</name>
        <t>When using single-algorithm cryptography, the best practice is to always generate fresh keying material for each purpose, for example when renewing a certificate, or obtaining both a TLS and S/MIME certificate for the same device, however in practice key reuse in such scenarios is not always catastrophic to security and therefore often tolerated. With composite keys we have a much stricter security requirement. However this reasoning does not hold in the PQ / Traditional hybrid setting.</t>
        <t>Within the broader context of PQ / Traditional hybrids, we need to consider new attack surfaces that arise due to the hybrid constructions and did not exist in single-algorithm contexts. One of these is key reuse where the component keys within a hybrid are also used by themselves within a single-algorithm context. For example, it might be tempting for an operator to take already-deployed RSA keys and add an ML-KEM key to them to form a hybrid. Within a hybrid signature context this leads to a class of attacks referred to as "stripping attacks" where one component signature can be extracted and presented as a single-algorithm signature. Hybrid KEMs using a concatenation-style KEM combiner, as is done in this document, do not have the analogous attack surface because even if an attacker is able to extract and decrypt one of the component ciphertexts, this will yield a different shared secret than the overall shared secret derived from the composite, so any subsequent symmetric cryptographic operations will fail. However there is still a risk of key reuse which relates to certificate revocation, as well as general key reuse security issues.</t>
        <t>Upon receiving a new certificate enrollment request, many certification authorities will check if the requested public key has been previously revoked due to key compromise. Often a CA will perform this check by using the public key hash. Therefore, even if both components of a composite have been previously revoked, the CA may only check the hash of the combined composite key and not find the revocations. Therefore, it is RECOMMENDED to avoid key reuse and always generate fresh component keys for a new composite. It is also RECOMMENDED that CAs performing revocation checks on a composite key should also check both component keys independently.</t>
      </section>
      <section anchor="policy-for-deprecated-and-acceptable-algorithms">
        <name>Policy for Deprecated and Acceptable Algorithms</name>
        <t>Traditionally, a public key or certificate contains a single cryptographic algorithm. If and when an algorithm becomes deprecated (for example, RSA-512, or SHA1), the path to deprecating it and removing it from operational environments is, at least is principle, straightforward.</t>
        <t>In the composite model this is less obvious since implementers may decide that certain cryptographic algorithms have complementary security properties and are acceptable in combination even though one or both algorithms are deprecated for individual use. As such, a single composite public key or certificate may contain a mixture of deprecated and non-deprecated algorithms.</t>
        <t>Since composite algorithms are registered independently of their component algorithms, their deprecation can be handled independently from that of their component algorithms. For example a cryptographic policy might continue to allow <tt>id-MLKEM512-ECDH-P256</tt> even after ECDH-P256 is deprecated.</t>
        <t>The Composite ML-KEM design specified in this document, and especially that of the KEM combiner specified in <xref target="sec-kem-combiner"/> means that the overall Composite ML-KEM algorithm should be considered to have the security strength of the strongest of its component algorithms; ie as long as one component algorithm remains strong, then the overall composite algorithm remains strong.</t>
        <!-- End of Security Considerations section -->

</section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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="RFC3394" target="https://www.rfc-editor.org/info/rfc3394" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3394.xml">
          <front>
            <title>Advanced Encryption Standard (AES) Key Wrap Algorithm</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="September" year="2002"/>
          </front>
          <seriesInfo name="RFC" value="3394"/>
          <seriesInfo name="DOI" value="10.17487/RFC3394"/>
        </reference>
        <reference anchor="RFC4055" target="https://www.rfc-editor.org/info/rfc4055" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4055.xml">
          <front>
            <title>Additional Algorithms and Identifiers for RSA Cryptography for use in the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>This document supplements RFC 3279. It describes the conventions for using the RSA Probabilistic Signature Scheme (RSASSA-PSS) signature algorithm, the RSA Encryption Scheme - Optimal Asymmetric Encryption Padding (RSAES-OAEP) key transport algorithm and additional one-way hash functions with the Public-Key Cryptography Standards (PKCS) #1 version 1.5 signature algorithm in the Internet X.509 Public Key Infrastructure (PKI). Encoding formats, algorithm identifiers, and parameter formats are specified. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4055"/>
          <seriesInfo name="DOI" value="10.17487/RFC4055"/>
        </reference>
        <reference anchor="RFC5280" target="https://www.rfc-editor.org/info/rfc5280" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC5480" target="https://www.rfc-editor.org/info/rfc5480" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5480.xml">
          <front>
            <title>Elliptic Curve Cryptography Subject Public Key Information</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <author fullname="D. Brown" initials="D." surname="Brown"/>
            <author fullname="K. Yiu" initials="K." surname="Yiu"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="T. Polk" initials="T." surname="Polk"/>
            <date month="March" year="2009"/>
            <abstract>
              <t>This document specifies the syntax and semantics for the Subject Public Key Information field in certificates that support Elliptic Curve Cryptography. This document updates Sections 2.3.5 and 5, and the ASN.1 module of "Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 3279. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5480"/>
          <seriesInfo name="DOI" value="10.17487/RFC5480"/>
        </reference>
        <reference anchor="RFC5652" target="https://www.rfc-editor.org/info/rfc5652" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5652.xml">
          <front>
            <title>Cryptographic Message Syntax (CMS)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="September" year="2009"/>
            <abstract>
              <t>This document describes the Cryptographic Message Syntax (CMS). This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="70"/>
          <seriesInfo name="RFC" value="5652"/>
          <seriesInfo name="DOI" value="10.17487/RFC5652"/>
        </reference>
        <reference anchor="RFC5958" target="https://www.rfc-editor.org/info/rfc5958" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5958.xml">
          <front>
            <title>Asymmetric Key Packages</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document defines the syntax for private-key information and a content type for it. Private-key information includes a private key for a specified public-key algorithm and a set of attributes. The Cryptographic Message Syntax (CMS), as defined in RFC 5652, can be used to digitally sign, digest, authenticate, or encrypt the asymmetric key format content type. This document obsoletes RFC 5208. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5958"/>
          <seriesInfo name="DOI" value="10.17487/RFC5958"/>
        </reference>
        <reference anchor="RFC6234" target="https://www.rfc-editor.org/info/rfc6234" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6234.xml">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
        <reference anchor="RFC8017" target="https://www.rfc-editor.org/info/rfc8017" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8017.xml">
          <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>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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="RFC8410" target="https://www.rfc-editor.org/info/rfc8410" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8410.xml">
          <front>
            <title>Algorithm Identifiers for Ed25519, Ed448, X25519, and X448 for Use in the Internet X.509 Public Key Infrastructure</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies algorithm identifiers and ASN.1 encoding formats for elliptic curve constructs using the curve25519 and curve448 curves. The signature algorithms covered are Ed25519 and Ed448. The key agreement algorithms covered are X25519 and X448. The encoding for public key, private key, and Edwards-curve Digital Signature Algorithm (EdDSA) structures is provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8410"/>
          <seriesInfo name="DOI" value="10.17487/RFC8410"/>
        </reference>
        <reference anchor="RFC8411" target="https://www.rfc-editor.org/info/rfc8411" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8411.xml">
          <front>
            <title>IANA Registration for the Cryptographic Algorithm Object Identifier Range</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="R. Andrews" initials="R." surname="Andrews"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>When the Curdle Security Working Group was chartered, a range of object identifiers was donated by DigiCert, Inc. for the purpose of registering the Edwards Elliptic Curve key agreement and signature algorithms. This donated set of OIDs allowed for shorter values than would be possible using the existing S/MIME or PKIX arcs. This document describes the donated range and the identifiers that were assigned from that range, transfers control of that range to IANA, and establishes IANA allocation policies for any future assignments within that range.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8411"/>
          <seriesInfo name="DOI" value="10.17487/RFC8411"/>
        </reference>
        <reference anchor="RFC8619" target="https://www.rfc-editor.org/info/rfc8619" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8619.xml">
          <front>
            <title>Algorithm Identifiers for the HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>RFC 5869 specifies the HMAC-based Extract-and-Expand Key Derivation Function (HKDF) algorithm. This document assigns algorithm identifiers to the HKDF algorithm when used with three common one-way hash functions.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8619"/>
          <seriesInfo name="DOI" value="10.17487/RFC8619"/>
        </reference>
        <reference anchor="RFC9629" target="https://www.rfc-editor.org/info/rfc9629" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9629.xml">
          <front>
            <title>Using Key Encapsulation Mechanism (KEM) Algorithms in the Cryptographic Message Syntax (CMS)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="J. Gray" initials="J." surname="Gray"/>
            <author fullname="T. Okubo" initials="T." surname="Okubo"/>
            <date month="August" year="2024"/>
            <abstract>
              <t>The Cryptographic Message Syntax (CMS) supports key transport and key agreement algorithms. In recent years, cryptographers have been specifying Key Encapsulation Mechanism (KEM) algorithms, including quantum-secure KEM algorithms. This document defines conventions for the use of KEM algorithms by the originator and recipients to encrypt and decrypt CMS content. This document updates RFC 5652.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9629"/>
          <seriesInfo name="DOI" value="10.17487/RFC9629"/>
        </reference>
        <reference anchor="I-D.ietf-lamps-cms-sha3-hash" target="https://datatracker.ietf.org/doc/html/draft-ietf-lamps-cms-sha3-hash-04" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-lamps-cms-sha3-hash-04.xml">
          <front>
            <title>Use of the SHA3 One-way Hash Functions in the Cryptographic Message Syntax (CMS)</title>
            <author fullname="Russ Housley" initials="R." surname="Housley">
              <organization>Vigil Security, LLC</organization>
            </author>
            <date day="16" month="May" year="2024"/>
            <abstract>
              <t>This document describes the conventions for using the one-way hash functions in the SHA3 family with the Cryptographic Message Syntax (CMS). The SHA3 family can be used as a message digest algorithm, as part of a signature algorithm, as part of a message authentication code, or part of a key derivation function.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-cms-sha3-hash-04"/>
        </reference>
        <reference anchor="I-D.ietf-lamps-kyber-certificates" target="https://datatracker.ietf.org/doc/html/draft-ietf-lamps-kyber-certificates-01" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-lamps-kyber-certificates-01.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure - Algorithm Identifiers for Kyber</title>
            <author fullname="Sean Turner" initials="S." surname="Turner">
              <organization>sn3rd</organization>
            </author>
            <author fullname="Panos Kampanakis" initials="P." surname="Kampanakis">
              <organization>AWS</organization>
            </author>
            <author fullname="Jake Massimo" initials="J." surname="Massimo">
              <organization>AWS</organization>
            </author>
            <author fullname="Bas Westerbaan" initials="B." surname="Westerbaan">
              <organization>Cloudflare</organization>
            </author>
            <date day="28" month="March" year="2023"/>
            <abstract>
              <t>Kyber is a key-encapsulation mechanism (KEM). This document specifies algorithm identifiers and ASN.1 encoding format for Kyber in public key certificates. The encoding for public and private keys are also provided. [EDNOTE: This document is not expected to be finalized before the NIST PQC Project has standardized PQ algorithms. This specification will use object identifiers for the new algorithms that are assigned by NIST, and will use placeholders until these are released.]</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-kyber-certificates-01"/>
        </reference>
        <reference anchor="X.690">
          <front>
            <title>Information technology - ASN.1 encoding Rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2015" month="November"/>
          </front>
          <seriesInfo name="ISO/IEC" value="8825-1:2015"/>
        </reference>
        <reference anchor="BSI-ECC">
          <front>
            <title>Technical Guideline BSI TR-03111: Elliptic Curve Cryptography. Version 2.10</title>
            <author>
              <organization>Federal Office for Information Security (BSI)</organization>
            </author>
            <date year="2018" month="June" day="01"/>
          </front>
        </reference>
        <reference anchor="SP.800-56Ar3" target="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf">
          <front>
            <title>Recommendation for Pair-Wise Key-Establishment Schemes Using Discrete Logarithm Cryptography</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2018" month="April"/>
          </front>
        </reference>
        <reference anchor="SP.800-56Cr2" target="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Cr2.pdf">
          <front>
            <title>Recommendation for Key-Derivation Methods in Key-Establishment Schemes</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2020" month="August"/>
          </front>
        </reference>
        <reference anchor="SP.800-57pt1r5" target="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r5.pdf">
          <front>
            <title>Recommendation for Key Management: Part 1 – General</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2020" month="May"/>
          </front>
        </reference>
        <reference anchor="SP.800-185" target="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-185.pdf">
          <front>
            <title>SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, and ParallelHash</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2016" month="December"/>
          </front>
        </reference>
        <reference anchor="FIPS.180-4" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf">
          <front>
            <title>FIPS Publication 180-4: Secure Hash Standard</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
        </reference>
        <reference anchor="FIPS.202" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf">
          <front>
            <title>SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
        </reference>
        <reference anchor="FIPS.203" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.203.pdf">
          <front>
            <title>Module-Lattice-based Key-Encapsulation Mechanism Standard</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2024" month="August"/>
          </front>
        </reference>
        <reference anchor="RFC5869" target="https://www.rfc-editor.org/info/rfc5869" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5869.xml">
          <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC2986" target="https://www.rfc-editor.org/info/rfc2986" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2986.xml">
          <front>
            <title>PKCS #10: Certification Request Syntax Specification Version 1.7</title>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <date month="November" year="2000"/>
            <abstract>
              <t>This memo represents a republication of PKCS #10 v1.7 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process. The body of this document, except for the security considerations section, is taken directly from the PKCS #9 v2.0 or the PKCS #10 v1.7 document. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2986"/>
          <seriesInfo name="DOI" value="10.17487/RFC2986"/>
        </reference>
        <reference anchor="RFC4210" target="https://www.rfc-editor.org/info/rfc4210" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4210.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate Management Protocol (CMP)</title>
            <author fullname="C. Adams" initials="C." surname="Adams"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="T. Kause" initials="T." surname="Kause"/>
            <author fullname="T. Mononen" initials="T." surname="Mononen"/>
            <date month="September" year="2005"/>
            <abstract>
              <t>This document describes the Internet X.509 Public Key Infrastructure (PKI) Certificate Management Protocol (CMP). Protocol messages are defined for X.509v3 certificate creation and management. CMP provides on-line interactions between PKI components, including an exchange between a Certification Authority (CA) and a client system. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4210"/>
          <seriesInfo name="DOI" value="10.17487/RFC4210"/>
        </reference>
        <reference anchor="RFC4211" target="https://www.rfc-editor.org/info/rfc4211" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4211.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF)</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="September" year="2005"/>
            <abstract>
              <t>This document describes the Certificate Request Message Format (CRMF) syntax and semantics. This syntax is used to convey a request for a certificate to a Certification Authority (CA), possibly via a Registration Authority (RA), for the purposes of X.509 certificate production. The request will typically include a public key and the associated registration information. This document does not define a certificate request protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4211"/>
          <seriesInfo name="DOI" value="10.17487/RFC4211"/>
        </reference>
        <reference anchor="RFC4262" target="https://www.rfc-editor.org/info/rfc4262" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4262.xml">
          <front>
            <title>X.509 Certificate Extension for Secure/Multipurpose Internet Mail Extensions (S/MIME) Capabilities</title>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <date month="December" year="2005"/>
            <abstract>
              <t>This document defines a certificate extension for inclusion of Secure/Multipurpose Internet Mail Extensions (S/MIME) Capabilities in X.509 public key certificates, as defined by RFC 3280. This certificate extension provides an optional method to indicate the cryptographic capabilities of an entity as a complement to the S/MIME Capabilities signed attribute in S/MIME messages according to RFC 3851. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4262"/>
          <seriesInfo name="DOI" value="10.17487/RFC4262"/>
        </reference>
        <reference anchor="RFC5083" target="https://www.rfc-editor.org/info/rfc5083" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5083.xml">
          <front>
            <title>Cryptographic Message Syntax (CMS) Authenticated-Enveloped-Data Content Type</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="November" year="2007"/>
            <abstract>
              <t>This document describes an additional content type for the Cryptographic Message Syntax (CMS). The authenticated-enveloped-data content type is intended for use with authenticated encryption modes. All of the various key management techniques that are supported in the CMS enveloped-data content type are also supported by the CMS authenticated-enveloped-data content type. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5083"/>
          <seriesInfo name="DOI" value="10.17487/RFC5083"/>
        </reference>
        <reference anchor="RFC5639" target="https://www.rfc-editor.org/info/rfc5639" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5639.xml">
          <front>
            <title>Elliptic Curve Cryptography (ECC) Brainpool Standard Curves and Curve Generation</title>
            <author fullname="M. Lochter" initials="M." surname="Lochter"/>
            <author fullname="J. Merkle" initials="J." surname="Merkle"/>
            <date month="March" year="2010"/>
            <abstract>
              <t>This memo proposes several elliptic curve domain parameters over finite prime fields for use in cryptographic applications. The domain parameters are consistent with the relevant international standards, and can be used in X.509 certificates and certificate revocation lists (CRLs), for Internet Key Exchange (IKE), Transport Layer Security (TLS), XML signatures, and all applications or protocols based on the cryptographic message syntax (CMS). This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5639"/>
          <seriesInfo name="DOI" value="10.17487/RFC5639"/>
        </reference>
        <reference anchor="RFC5914" target="https://www.rfc-editor.org/info/rfc5914" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5914.xml">
          <front>
            <title>Trust Anchor Format</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="S. Ashmore" initials="S." surname="Ashmore"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>This document describes a structure for representing trust anchor information. A trust anchor is an authoritative entity represented by a public key and associated data. The public key is used to verify digital signatures, and the associated data is used to constrain the types of information or actions for which the trust anchor is authoritative. The structures defined in this document are intended to satisfy the format-related requirements defined in Trust Anchor Management Requirements. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5914"/>
          <seriesInfo name="DOI" value="10.17487/RFC5914"/>
        </reference>
        <reference anchor="RFC5990" target="https://www.rfc-editor.org/info/rfc5990" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5990.xml">
          <front>
            <title>Use of the RSA-KEM Key Transport Algorithm in the Cryptographic Message Syntax (CMS)</title>
            <author fullname="J. Randall" initials="J." surname="Randall"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Brainard" initials="J." surname="Brainard"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="September" year="2010"/>
            <abstract>
              <t>The RSA-KEM Key Transport Algorithm is a one-pass (store-and-forward) mechanism for transporting keying data to a recipient using the recipient's RSA public key. ("KEM" stands for "key encapsulation mechanism".) This document specifies the conventions for using the RSA-KEM Key Transport Algorithm with the Cryptographic Message Syntax (CMS). The ASN.1 syntax is aligned with an expected forthcoming change to American National Standard (ANS) X9.44.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5990"/>
          <seriesInfo name="DOI" value="10.17487/RFC5990"/>
        </reference>
        <reference anchor="RFC6090" target="https://www.rfc-editor.org/info/rfc6090" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6090.xml">
          <front>
            <title>Fundamental Elliptic Curve Cryptography Algorithms</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <author fullname="K. Igoe" initials="K." surname="Igoe"/>
            <author fullname="M. Salter" initials="M." surname="Salter"/>
            <date month="February" year="2011"/>
            <abstract>
              <t>This note describes the fundamental algorithms of Elliptic Curve Cryptography (ECC) as they were defined in some seminal references from 1994 and earlier. These descriptions may be useful for implementing the fundamental algorithms without using any of the specialized methods that were developed in following years. Only elliptic curves defined over fields of characteristic greater than three are in scope; these curves are those used in Suite B. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6090"/>
          <seriesInfo name="DOI" value="10.17487/RFC6090"/>
        </reference>
        <reference anchor="RFC7292" target="https://www.rfc-editor.org/info/rfc7292" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7292.xml">
          <front>
            <title>PKCS #12: Personal Information Exchange Syntax v1.1</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="S. Parkinson" initials="S." surname="Parkinson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <author fullname="M. Scott" initials="M." surname="Scott"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>PKCS #12 v1.1 describes a transfer syntax for personal identity information, including private keys, certificates, miscellaneous secrets, and extensions. Machines, applications, browsers, Internet kiosks, and so on, that support this standard will allow a user to import, export, and exercise a single set of personal identity information. This standard supports direct transfer of personal information under several privacy and integrity modes.</t>
              <t>This document represents a republication of PKCS #12 v1.1 from RSA Laboratories' Public Key Cryptography Standard (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7292"/>
          <seriesInfo name="DOI" value="10.17487/RFC7292"/>
        </reference>
        <reference anchor="RFC7296" target="https://www.rfc-editor.org/info/rfc7296" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7296.xml">
          <front>
            <title>Internet Key Exchange Protocol Version 2 (IKEv2)</title>
            <author fullname="C. Kaufman" initials="C." surname="Kaufman"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="Y. Nir" initials="Y." surname="Nir"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
            <date month="October" year="2014"/>
            <abstract>
              <t>This document describes version 2 of the Internet Key Exchange (IKE) protocol. IKE is a component of IPsec used for performing mutual authentication and establishing and maintaining Security Associations (SAs). This document obsoletes RFC 5996, and includes all of the errata for it. It advances IKEv2 to be an Internet Standard.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="79"/>
          <seriesInfo name="RFC" value="7296"/>
          <seriesInfo name="DOI" value="10.17487/RFC7296"/>
        </reference>
        <reference anchor="RFC7748" target="https://www.rfc-editor.org/info/rfc7748" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7748.xml">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2016"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8551" target="https://www.rfc-editor.org/info/rfc8551" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8551.xml">
          <front>
            <title>Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 Message Specification</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="B. Ramsdell" initials="B." surname="Ramsdell"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="April" year="2019"/>
            <abstract>
              <t>This document defines Secure/Multipurpose Internet Mail Extensions (S/MIME) version 4.0. S/MIME provides a consistent way to send and receive secure MIME data. Digital signatures provide authentication, message integrity, and non-repudiation with proof of origin. Encryption provides data confidentiality. Compression can be used to reduce data size. This document obsoletes RFC 5751.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8551"/>
          <seriesInfo name="DOI" value="10.17487/RFC8551"/>
        </reference>
        <reference anchor="RFC9180" target="https://www.rfc-editor.org/info/rfc9180" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9180.xml">
          <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="I-D.ietf-tls-hybrid-design" target="https://datatracker.ietf.org/doc/html/draft-ietf-tls-hybrid-design-04" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-tls-hybrid-design-04.xml">
          <front>
            <title>Hybrid key exchange in TLS 1.3</title>
            <author fullname="Douglas Stebila" initials="D." surname="Stebila">
              <organization>University of Waterloo</organization>
            </author>
            <author fullname="Scott Fluhrer" initials="S." surname="Fluhrer">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Shay Gueron" initials="S." surname="Gueron">
              <organization>University of Haifa and Amazon Web Services</organization>
            </author>
            <date day="11" month="January" year="2022"/>
            <abstract>
              <t>Hybrid key exchange refers to using multiple key exchange algorithms simultaneously and combining the result with the goal of providing security even if all but one of the component algorithms is broken. It is motivated by transition to post-quantum cryptography. This document provides a construction for hybrid key exchange in the Transport Layer Security (TLS) protocol version 1.3. Discussion of this work is encouraged to happen on the TLS IETF mailing list tls@ietf.org or on the GitHub repository which contains the draft: https://github.com/dstebila/draft-ietf-tls-hybrid-design.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-hybrid-design-04"/>
        </reference>
        <reference anchor="I-D.ietf-pquip-pqt-hybrid-terminology" target="https://datatracker.ietf.org/doc/html/draft-ietf-pquip-pqt-hybrid-terminology-04" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-pquip-pqt-hybrid-terminology-04.xml">
          <front>
            <title>Terminology for Post-Quantum Traditional Hybrid Schemes</title>
            <author fullname="Florence 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="September" year="2024"/>
            <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-04"/>
        </reference>
        <reference anchor="I-D.ietf-pquip-hybrid-signature-spectrums" target="https://datatracker.ietf.org/doc/html/draft-ietf-pquip-hybrid-signature-spectrums-00" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-pquip-hybrid-signature-spectrums-00.xml">
          <front>
            <title>Hybrid signature spectrums</title>
            <author fullname="Nina Bindel" initials="N." surname="Bindel">
              <organization>SandboxAQ</organization>
            </author>
            <author fullname="Britta Hale" initials="B." surname="Hale">
              <organization>Naval Postgraduate School</organization>
            </author>
            <author fullname="Deirdre Connolly" initials="D." surname="Connolly">
              <organization>SandboxAQ</organization>
            </author>
            <author fullname="Florence D" initials="F." surname="D">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <date day="24" month="May" year="2024"/>
            <abstract>
              <t>This document describes classification of design goals and security considerations for hybrid digital signature schemes, including proof composability, non-separability of the component signatures given a hybrid signature, backwards/forwards compatiblity, hybrid generality, and simultaneous verification. Discussion of this work is encouraged to happen on the IETF PQUIP mailing list pqc@ietf.org or on the GitHub repository which contains the draft: https://github.com/dconnolly/draft-ietf-pquip-hybrid- signature-spectrums</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-pquip-hybrid-signature-spectrums-00"/>
        </reference>
        <reference anchor="I-D.ietf-lamps-cms-kyber" target="https://datatracker.ietf.org/doc/html/draft-ietf-lamps-cms-kyber-05" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-lamps-cms-kyber-05.xml">
          <front>
            <title>Use of ML-KEM in the Cryptographic Message Syntax (CMS)</title>
            <author fullname="PRAT Julien" initials="J." surname="Prat">
              <organization>CryptoNext Security</organization>
            </author>
            <author fullname="Mike Ounsworth" initials="M." surname="Ounsworth">
              <organization>Entrust Limited</organization>
            </author>
            <author fullname="Daniel Van Geest" initials="D." surname="Van Geest">
              <organization>CryptoNext Security</organization>
            </author>
            <date day="15" month="October" year="2024"/>
            <abstract>
              <t>The Module-Lattice-based Key-Encapsulation Mechanism (ML-KEM) algorithm is a one-pass (store-and-forward) cryptographic mechanism for an originator to securely send keying material to a recipient using the recipient's ML-KEM public key. Three parameters sets for the ML-KEM algorithm are specified by NIST in [FIPS203]. In order of increasing security strength (and decreasing performance), these parameter sets are ML-KEM-512, ML-KEM-768, and ML-KEM-1024. This document specifies the conventions for using ML-KEM with the Cryptographic Message Syntax (CMS) using KEMRecipientInfo as specified in [RFC9629].</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-cms-kyber-05"/>
        </reference>
        <reference anchor="X-Wing" target="https://eprint.iacr.org/2024/039.pdf">
          <front>
            <title>X-Wing The Hybrid KEM You’ve Been Looking For</title>
            <author initials="M." surname="Barbosa" fullname="Manuel Barbosa">
              <organization/>
            </author>
            <author initials="D." surname="Connolly" fullname="Deirdre Connolly">
              <organization/>
            </author>
            <author initials="J." surname="Duarte" fullname="João Diogo Duarte">
              <organization/>
            </author>
            <author initials="A." surname="Kaiser" fullname="Aaron Kaiser">
              <organization/>
            </author>
            <author initials="P." surname="Schwabe" fullname="Peter Schwabe">
              <organization/>
            </author>
            <author initials="K." surname="Varner" fullname="Karolin Varner">
              <organization/>
            </author>
            <author initials="B." surname="Westerbaan" fullname="Bas Westerbaan">
              <organization/>
            </author>
            <date year="2024" month="January" day="09"/>
          </front>
        </reference>
        <reference anchor="BSI2021" target="https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/Brochure/quantum-safe-cryptography.pdf">
          <front>
            <title>Quantum-safe cryptography - fundamentals, current developments and recommendations</title>
            <author>
              <organization>Federal Office for Information Security (BSI)</organization>
            </author>
            <date year="2021" month="October"/>
          </front>
        </reference>
        <reference anchor="ANSSI2024" target="https://cyber.gouv.fr/sites/default/files/document/Quantum_Key_Distribution_Position_Paper.pdf">
          <front>
            <title>Position Paper on Quantum Key Distribution</title>
            <author>
              <organization>French Cybersecurity Agency (ANSSI)</organization>
            </author>
            <author>
              <organization>Federal Office for Information Security (BSI)</organization>
            </author>
            <author>
              <organization>Netherlands National Communications Security Agency (NLNCSA)</organization>
            </author>
            <author>
              <organization>Swedish National Communications Security Authority, Swedish Armed Forces</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="SP800-131Ar2" target="https://nvlpubs.nist.gov/nistpubs/specialpublications/nist.sp.800-131ar2.pdf">
          <front>
            <title>Transitioning the Use of Cryptographic Algorithms and Key Lengths</title>
            <author initials="E." surname="Barker" fullname="Elaine Barke">
              <organization/>
            </author>
            <author initials="A." surname="Roginksy" fullname="Allan Reginsky">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="GHP18" target="https://eprint.iacr.org/2018/024">
          <front>
            <title>KEM Combiners</title>
            <author initials="B." surname="Poettering" fullname="Bertram Poettering">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
        </reference>
        <reference anchor="Aviram22" target="https://eprint.iacr.org/2022/065">
          <front>
            <title>Practical (Post-Quantum) Key Combiners from One-Wayness and Applications to TLS</title>
            <author initials="E." surname="Yogev" fullname="Eylon Yogev">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="CNSA2.0" target="https://media.defense.gov/2022/Sep/07/2003071834/-1/-1/0/CSA_CNSA_2.0_ALGORITHMS_.PDF">
          <front>
            <title>Commercial National Security Algorithm Suite 2.0</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="FIPS-140-3-IG" target="https://csrc.nist.gov/csrc/media/Projects/cryptographic-module-validation-program/documents/fips%20140-3/FIPS%20140-3%20IG.pdf">
          <front>
            <title>Implementation Guidance for FIPS 140-3 and the Cryptographic Module Validation Program</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2024" month="July"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1499?>

<section anchor="appdx-samples">
      <name>Samples</name>
      <t>TODO</t>
    </section>
    <section anchor="appdx_components">
      <name>Component Algorithm Reference</name>
      <t>This section provides references to the full specification of the algorithms used in the composite constructions.</t>
      <table anchor="tab-component-encr-algs">
        <name>Component Encryption Algorithms used in Composite Constructions</name>
        <thead>
          <tr>
            <th align="left">Component Signature Algorithm ID</th>
            <th align="left">OID</th>
            <th align="left">Specification</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">id-ML-KEM-768</td>
            <td align="left">2.16.840.1.101.3.4.4.2</td>
            <td align="left">
              <xref target="FIPS.203"/></td>
          </tr>
          <tr>
            <td align="left">id-ML-KEM-1024</td>
            <td align="left">2.16.840.1.101.3.4.4.3</td>
            <td align="left">
              <xref target="FIPS.203"/></td>
          </tr>
          <tr>
            <td align="left">id-X25519</td>
            <td align="left">1.3.101.110</td>
            <td align="left">
              <xref target="RFC8410"/></td>
          </tr>
          <tr>
            <td align="left">id-X448</td>
            <td align="left">1.3.101.111</td>
            <td align="left">
              <xref target="RFC8410"/></td>
          </tr>
          <tr>
            <td align="left">id-ecDH</td>
            <td align="left">1.3.132.1.12</td>
            <td align="left">
              <xref target="RFC5480"/></td>
          </tr>
          <tr>
            <td align="left">id-RSAES-OAEP</td>
            <td align="left">1.2.840.113549.1.1.7</td>
            <td align="left">
              <xref target="RFC8017"/></td>
          </tr>
        </tbody>
      </table>
      <table anchor="tab-component-curve-algs">
        <name>Elliptic Curves used in Composite Constructions</name>
        <thead>
          <tr>
            <th align="left">Elliptic CurveID</th>
            <th align="left">OID</th>
            <th align="left">Specification</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">secp256r1</td>
            <td align="left">1.2.840.10045.3.1.7</td>
            <td align="left">
              <xref target="RFC6090"/></td>
          </tr>
          <tr>
            <td align="left">secp384r1</td>
            <td align="left">1.3.132.0.34</td>
            <td align="left">
              <xref target="RFC6090"/></td>
          </tr>
          <tr>
            <td align="left">brainpoolP256r1</td>
            <td align="left">1.3.36.3.3.2.8.1.1.7</td>
            <td align="left">
              <xref target="RFC5639"/></td>
          </tr>
          <tr>
            <td align="left">brainpoolP384r1</td>
            <td align="left">1.3.36.3.3.2.8.1.1.11</td>
            <td align="left">
              <xref target="RFC5639"/></td>
          </tr>
        </tbody>
      </table>
      <table anchor="tab-component-hash">
        <name>Hash algorithms used in Composite Constructions</name>
        <thead>
          <tr>
            <th align="left">HashID</th>
            <th align="left">OID</th>
            <th align="left">Specification</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">id-sha256</td>
            <td align="left">2.16.840.1.101.3.4.2.1</td>
            <td align="left">
              <xref target="RFC6234"/></td>
          </tr>
          <tr>
            <td align="left">id-sha512</td>
            <td align="left">2.16.840.1..101.3.4.2.3</td>
            <td align="left">
              <xref target="RFC6234"/></td>
          </tr>
          <tr>
            <td align="left">id-alg-hkdf-with-sha256</td>
            <td align="left">1.2.840.113549.1.9.16.3.28</td>
            <td align="left">
              <xref target="RFC8619"/></td>
          </tr>
          <tr>
            <td align="left">id-sha3-256</td>
            <td align="left">2.16.840.1.101.3.4.2.8</td>
            <td align="left">
              <xref target="FIPS.202"/></td>
          </tr>
          <tr>
            <td align="left">id-KMAC128</td>
            <td align="left">2.16.840.1.101.3.4.2.21</td>
            <td align="left">
              <xref target="SP.800-185"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="fixed-component-algorithm-identifiers">
      <name>Fixed Component Algorithm Identifiers</name>
      <t>The following sections list explicitly the DER encoded <tt>AlgorithmIdentifier</tt> that MUST be used when reconstructing <tt>SubjectPublicKeyInfo</tt> objects for each component public key, which may be required for example if cryptographic library requires the public key in this form in order to process each component algorithm. The public key <tt>BIT STRING</tt> should be taken directly from the respective component of the CompositeKEMPublicKey.</t>
      <t><strong>ML-KEM-768</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-alg-ml-kem-768   -- (2.16.840.1.101.4.2)
    }

DER:
  30 0B 06 07 60 86 48 01 65 04 02
]]></artwork>
      <t><strong>ML-KEM-1024</strong></t>
      <t>ASN.1:</t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-alg-ml-kem-1024   -- (2.16.840.1.101.4.3)
    }

DER:
  30 0B 06 07 60 86 48 01 65 04 03
]]></artwork>
      <t><strong>RSA-OAEP - all sizes</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-RSAES-OAEP,   -- (1.2.840.113549.1.1.7)
    parameters RSAES-OAEP-params {
         hashFunc      [0] id-sha256,  -- (2.16.840.1.101.3.4.2.1)
         maskGenFunc   [1] mgf1SHA256Identifier,
         pSourceFunc   [2] pSpecifiedEmpty  }
    }


where
      mgf1SHA256Identifier  AlgorithmIdentifier  ::=  {
                          algorithm id-mgf1,  -- (1.2.840.113549.1.1.8)
                          parameters sha256Identifier }


        sha256Identifier  AlgorithmIdentifier  ::=  { id-sha256, NULL }

DER:
 30 4D 06 09 2A 86 48 86 F7 0D 01 01 07 30 40 A0 0F 30 0D 06 09 60 86
 48 01 65 03 04 02 01 05 00 A1 1C 30 1A 06 09 2A 86 48 86 F7 0D 01 01
 08 30 0D 06 09 60 86 48 01 65 03 04 02 01 05 00 A2 0F 30 0D 06 09 2A
 86 48 86 F7 0D 01 01 09 04 00
]]></artwork>
      <t><strong>ECDH NIST-P-384</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ecPublicKey   -- (1.2.840.10045.2.1)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm secp384r1    -- (1.3.132.0.34)
        }
      }
    }

DER:
  30 10 06 07 2A 86 48 CE 3D 02 01 06 05 2B 81 04 00 22
]]></artwork>
      <t><strong>ECDH Brainpool-256</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ecPublicKey   -- (1.2.840.10045.2.1)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm brainpoolP256r1   -- (1.3.36.3.3.2.8.1.1.7)
        }
      }
    }

DER:
  30 14 06 07 2A 86 48 CE 3D 02 01 06 09 2B 24 03 03 02 08 01 01 07
]]></artwork>
      <t><strong>ECDH Brainpool-384</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ecPublicKey   -- (1.2.840.10045.2.1)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm brainpoolP384r1   -- (1.3.36.3.3.2.8.1.1.11)
        }
      }
    }

DER:
  30 14 06 07 2A 86 48 CE 3D 02 01 06 09 2B 24 03 03 02 08 01 01 0B
]]></artwork>
      <t><strong>X25519</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-X25519   -- (1.3.101.110)
    }

DER:
  30 05 06 03 2B 65 6E
]]></artwork>
      <t><strong>X448</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-X448   -- (1.3.101.111)
    }

DER:
  30 05 06 03 2B 65 6F
]]></artwork>
    </section>
    <section anchor="sec-in-pract">
      <name>Implementation Considerations</name>
      <section anchor="sec-fips">
        <name>FIPS Certification</name>
        <t>TODO -- update this once NIST SP 800-227 is published.</t>
        <t>EDNOTE At time of writing, it is unclear that the KEM combiner presented in this document would pass a FIPS certification. The SHA3 instantiations should pass under SP 800-56Cr2 Option 1, but the HKDF-SHA2 combinations are technically not allowed under SP 800-56Cr2 even though Option 2 allows HMAC-based constructions, but unfortunately only HKDF-Extract is FIPS-allowed, not HKDF-Expand. The authors have been in contact with NIST to ensure compatibility either by NIST making SP 800-227 more flexible, or by changing this specification to only use HKDF-Extract.</t>
        <t>One of the primary design goals of this specification is for the overall composite algorithm to be able to be considered FIPS-approved even when one of the component algorithms is not. Implementers seeking FIPS certification of a Composite ML-KEM algorithm where only one of the component algorithms has been FIPS-validated or FIPS-approved should credit the FIPS-validated component algorithm with full security strength, the non-FIPS-validated component algorithm with zero security, and the overall composite should be considered full strength and thus FIPS-approved.</t>
        <t>The authors wish to note that this gives composite algorithms great future utility both for future cryptographic migrations as well as bridging across jurisdictions; for example defining composite algorithms which combine FIPS cryptography with cryptography from a different national standards body.</t>
        <section anchor="fips-certification-of-combiner-function">
          <name>FIPS certification of Combiner Function</name>
          <t>TODO: update this to NIST SP 800-227, once it is published.</t>
          <t>One of the primary NIST documents which is relevant for certification of a composite algorithm is NIST SP.800-56Cr2 <xref target="SP.800-56Cr2"/> by using the allowed "hybrid" shared secret of the form <tt>Z' = Z || T</tt>. Compliance is achieved in the following way:</t>
          <t>SP.800-56Cr2 section 4 "One-Step Key Derivation" requires a <tt>counter</tt> which begins at the 4-byte value 0x00000001. However, the counter is allowed to be omitted when the hash function is executed only once, as specified on page 159 of the FIPS 140-3 Implementation Guidance <xref target="FIPS-140-3-IG"/>.</t>
          <t>The HKDF-SHA2 options can be certified under SP.800-56Cr2 One-Step Key Derivation Option 1: <tt>H(x) = hash(x)</tt>.</t>
          <t>The SHA3 options can be certified under SP.800-56Cr2 One-Step Key Derivation Option 2: <tt>H(x) = HMAC-hash(salt, x)</tt> with the salt omitted.</t>
        </section>
      </section>
      <section anchor="sec-backwards-compat">
        <name>Backwards Compatibility</name>
        <t>As noted in the introduction, the post-quantum cryptographic migration will face challenges in both ensuring cryptographic strength against adversaries of unknown capabilities, as well as providing ease of migration. The composite mechanisms defined in this document primarily address cryptographic strength, however this section contains notes on how backwards compatibility may be obtained.</t>
        <t>The term "ease of migration" is used here to mean that existing systems can be gracefully transitioned to the new technology without requiring large service disruptions or expensive upgrades. The term "backwards compatibility" is used here to mean something more specific; that existing systems as they are deployed today can inter-operate with the upgraded systems of the future.</t>
        <t>These migration and interoperability concerns need to be thought about in the context of various types of protocols that make use of X.509 and PKIX with relation to key establishment and content encryption, from online negotiated protocols such as TLS 1.3 <xref target="RFC8446"/> and IKEv2 <xref target="RFC7296"/>, to non-negotiated asynchronous protocols such as S/MIME signed email <xref target="RFC8551"/>, as well as myriad other standardized and proprietary protocols and applications that leverage CMS <xref target="RFC5652"/> encrypted structures.</t>
      </section>
      <section anchor="impl-cons-decaps-pubkey">
        <name>Decapsulation Requires the Public Key</name>
        <t>ML-KEM always requires the public key in order to perform various steps of the Fujisaki-Okamoto decapsulation <xref target="FIPS.203"/>, and for this reason the private key encoding specified in FIPS 203 includes the public key. Therefore it is not required to carry it in the <tt>OneAsymmetricKey.publicKey</tt> field, which remains optional, but is strictly speaking redundant since an ML-KEM public key can be parsed from an ML-KEM private key, and thus populating the <tt>OneAsymmetricKey.publicKey</tt> field would mean that two copies of the public key data are transmitted.</t>
        <t>With regard to the traditional algorithms, RSA or Elliptic Curve, in order to achieve the public-key binding property the KEM combiner used to form the Composite ML-KEM, the combiner requires the traditional public key as input to the KDF that derives the output shared secret. Therefore it is required to carry the public key within the respective <tt>OneAsymmetricKey.publicKey</tt> as per the private key encoding given in <xref target="sec-priv-key"/>. Implementers who choose to use a different private key encoding than the one specified in this document MUST consider how to provide the component public keys to the decapsulate routine. While some implementations might contain routines to computationally derive the public key from the private key, it is not guaranteed that all implementations will support this; for this reason the interoperable composite private key format given in this document in <xref target="sec-priv-key"/> requires the public key of the traditional component to be included.</t>
        <!-- End of Implementation Considerations section -->

</section>
    </section>
    <section anchor="intellectual-property-considerations">
      <name>Intellectual Property Considerations</name>
      <t>The following IPR Disclosure relates to this draft:</t>
      <t>https://datatracker.ietf.org/ipr/3588/</t>
      <t>EDNOTE TODO: Check with Max Pala whether this IPR actually applies to this draft.</t>
    </section>
    <section anchor="contributors-and-acknowledgments">
      <name>Contributors and Acknowledgments</name>
      <t>This document incorporates contributions and comments from a large group of experts. The Editors 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 year in pursuit of this document:</t>
      <t>Serge Mister (Entrust), Ali Noman (Entrust), Peter C. (UK NCSC), Sophie Schmieg (Google), Deirdre Connolly (SandboxAQ), Falko Strenzke (MTG AG), Dan van Geest (Crypto Next), Piotr Popis (Enigma), and
Douglas Stebila (University of Waterloo).</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"/>.</t>
      <!-- End of Contributors section -->

</section>
  </back>
  <!-- ##markdown-source:
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
mmFxk+yGtF4RXYyTKK1xcpzGo3EaYvGtmeAtKCAGIzi+4IbucvgUHsKomBGH
Y1bJLUj7mRPrwO7z+uJpJXw108GbwV90uipJcWAcETn1ipsoihAku6rcC3ti
0oV5wSQ6xxfHnRL65vBnyuBxBV3eiDfnUnRM5PQy0rhbYviQH22iKBzmg8WG
SuMnrKMyOF6XEj2ghbhyeNmTzvHS17lfSIFYtD0/DfLbYZMFyNDJHXtIUT8S
51VX+FP+GseIiJrHMpqqPrvUtKuTqhIcxjxRIUrTu+wWxSphu9HWIsYzdAAl
EZ7T0LDpEUFBDMHUHD6RkJNLtJ+k4n4LXDCQrwD6Zj0zx5JnFNJPzgTAvAbo
V5ICadSx5SJWUZwfZwHC8ZqcWGT8lu/p7Kkf+UZZq9UFu/0tUUGQv6/YRkjx
wem1PoRkADHcF+zOhScQrUbYu+OAYMMy+138e2gcEvo+j14VQhdpUgl84eSL
5bo/cjFkm2eDAQc9Mo1HRTVo13VVr7ig1vXVzhAhe5qRMzz6mMKuu6kkKvFX
NnSLGEJGnIvn7Robq9wLkU4gBeafBdN1k89Sce1FU4d1+XDyxPgU3ophjg7U
MkexME4ue/SNzNHXsEYgBFV4o/9qIBawRD5DRCp6fnHOmXccVZiGiZHK4qvY
cfsfui6yvgGqMC5kSpT9yvywphhWwxCuFzsyKwu1MzirBN0hLWQnRwcdgkA7
FWWpHmBos6hpKDQ3iLa7wi5Ck5LH3GE8ol5YifY2dACyTlALI0twzFFpx7Sa
9LaL9fbN4z+zG2iLblqVGZW5RRX9OQ/jM6TCZgF/Nb0V3hILrhiDlWUrHEzO
g9qQFc8EIkMwC7Fo5yuQ7J9rznTIrLGDngXUNd2AbQ7C79HneIUs1tGMI/Oo
R4A0YqLfPtInBthvuGZkceFzxUe2pAw0N+xYQeIcZRWtfGxm5LHc3sRcltuZ
gVOATZhuv8CL5bk3Dc9NjsaszJVxR6XLI1cOigWGx5bFhKn89utsctB+yzDZ
DVkNPT9ogbCSdXYBy80qG3JIr/HdNfKCnDez3hpNSoJXvIliD3FcKdG/ahkH
odVrCAE81rx2uWgAbWf50jE8O0zH4Rsq23ah4oYovEVfG+V8s8WWbcgNZgxh
tRo9JX55pkt8y8c4zkK+q+fzXRtfynd5c/lvxns17GMj51XcVnguJ6mzRLkI
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
PE9FR6TTb/nPxerLWhs7nmQRYkVlbTBt9G01DAMXqlEZWNH+7U1dzZ6o5tBb
1VQP8vSDqllFCP/+PHj99nChO679bpHW0INqqD6qJsDwn+jKXMVVZTBZ44XO
7eKlXnl/7rnKN5Gw0MqnmqBZT0yTpqrlKGuao0klO7BLdo3BzWZX26s4ZVcn
+XgtF02XdSE1PyV3BrHjyyZEiVs9Vn2CN8IKOBZzac5NM8iSlpCdZ4vZZAIC
6N+FW8YEWH4B3IYSdXBnEyqdgC0oZ6Wfodr1TNMCCfo0O1msJFXmqJoCu7PA
E7nwQjPIdXhJlq4W86N7QiskUUuZAX+N5wJA1opS8VkhzutocDyAtv+SlD/g
9GHW/3Jd/gCnAk04f5txFcd+p7fd2dlEJrPX2+z2n3Z2up0t4CB7jREbzRuC
+V1qK1zVm2ByFIC0TpU/qefEVtgGnzDEAmSlSh+frFt5c3aYhq4b08W4j+sf
NranjC+uLv5sOOh3N3fqI1bXu9+jx7qh/dBkHXb7+aRewiQD4On6W9vrmLe7
YeCN7tP+IwbuPzSw28+jBt7s7m4/YuCNhwZ2+3l4YElE/4iBNxcM3NjDJ+Sc
N4KmEa2V5qERtxaM2NjDw1OlZpc5YIxpliWn8Eneax54e9nApocp97B8YMxg
tGDKDQM/tQM7qY8Wzrhxje2Idq7QEufaMOLOshGrHSwbkQoZPOYc7S4YsbED
b0Sd4El7PNRTdFhulq1xqGV8Li6kUq4dN4tZ653t3fd7qDUJk1JnrdA2/B9U
bEoQUSZ3+mgVmc2/R3nGOgvxjH4ZFjevo3SNpX6hWqyHFz9z+VCP3kC9Oduy
mwzR4U1uYABD9X6QDEXGEfqicvwupOyX81gHs1XgwcT1MJoUMCjU6kZfZGQs
hPKczJu+XkO745oq8WOX2NfztoMYNP7ws6H2TirBWogP8x0+ebbVWAzxb6gZ
YcoUOpkOrYN9Q55fmxkUXbdFlepU7GRm5wadSXCyLw9/CrSioNaXsXQtptFH
Bz/oKItY/D44Ysp62uMQbA0cExekpS/MOJJzpTcx7DTkLCZpef4IVY6XPLyz
nLH4VNsitQp/vYw+mAHWEAc0J4vjq+u+W07iP6nudvfZdndne3On29vZfj7Y
frbV7W51+72tB4j0kqYPkdklTZ8+QCiXNB08QPGWNN15HM1a0sPuA8RnSdNn
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
RVb/P7Qx1AuRVQEA

-->

</rfc>
