<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-lamps-cms-kyber-12" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="ML-KEM in the CMS">Use of ML-KEM in the Cryptographic Message Syntax (CMS)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-cms-kyber-12"/>
    <author initials="J." surname="Prat" fullname="Julien Prat">
      <organization>CryptoNext Security</organization>
      <address>
        <postal>
          <street>16, Boulevard Saint-Germain</street>
          <city>Paris</city>
          <code>75005</code>
          <country>France</country>
        </postal>
        <email>julien.prat@cryptonext-security.com</email>
      </address>
    </author>
    <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="D." surname="Van Geest" fullname="Daniel Van Geest">
      <organization>CryptoNext Security</organization>
      <address>
        <postal>
          <street>16, Boulevard Saint-Germain</street>
          <city>Paris</city>
          <code>75005</code>
          <country>France</country>
        </postal>
        <email>daniel.vangeest@cryptonext-security.com</email>
      </address>
    </author>
    <date year="2025" month="August" day="26"/>
    <area>Security</area>
    <workgroup>LAMPS</workgroup>
    <keyword>Key Encapsulation Mechanism (KEM)</keyword>
    <keyword>KEMRecipientInfo</keyword>
    <keyword>ML-KEM</keyword>
    <keyword>Kyber</keyword>
    <abstract>
      <?line 105?>

<t>Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM) is a quantum-resistant key-encapsulation mechanism (KEM). Three parameter sets for the ML-KEM algorithm are specified by the US National Institute of Standards and Technology (NIST) in FIPS 203. 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 the KEMRecipientInfo structure defined in "Using Key Encapsulation
Mechanism (KEM) Algorithms in the Cryptographic Message Syntax (CMS)" (RFC 9629).</t>
      <!-- End of Abstract -->



    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-lamps-cms-kyber/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Limited Additional Mechanisms for PKIX and SMIME (lamps) Working Group mailing list (<eref target="mailto:spasm@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/spasm/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/spasm/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/lamps-wg/cms-kyber"/>.</t>
    </note>
  </front>
  <middle>
    <?line 112?>

<section anchor="sec-introduction">
      <name>Introduction</name>
      <t>The Module Lattice Key Encapsulation Mechanism (ML-KEM) is an IND-CCA2-secure Key Encapsulation Mechanism (KEM) standardized in <xref target="FIPS203"/> by the NIST PQC Project <xref target="NIST-PQ"/>. ML-KEM is the name given to the final standardized version and is incompatible with pre-standards versions, often called "Kyber".</t>
      <t><xref target="RFC9629"/> defines the KEMRecipientInfo structure for the use of KEM algorithms for the CMS enveloped-data content type, the CMS authenticated-data content type, and the CMS authenticated-enveloped-data content type. This document specifies the direct use of ML-KEM in the KEMRecipientInfo structure using each of the three parameter sets from <xref target="FIPS203"/>, namely MK-KEM-512, ML-KEM-768, and ML-KEM-1024.  It does not address or preclude the use of ML-KEM as part of any hybrid scheme.</t>
      <section anchor="sec-intro-terminology">
        <name>Conventions and Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<!-- End of terminology section -->

</section>
      <section anchor="sec-intro-ml-kem">
        <name>ML-KEM</name>
        <t>ML-KEM is a lattice-based key encapsulation mechanism using Module Learning with Errors as its underlying primitive, which is a structured lattices variant that offers good performance and relatively small and balanced key and ciphertext sizes. ML-KEM was standardized with three parameter sets: ML-KEM-512, ML-KEM-768, and ML-KEM-1024. The parameters for each of the security levels were chosen to be at least as secure as a generic block cipher of 128, 192, or 256 bits, respectively.
<xref target="arnold"/> provides more information on ML-KEM security levels and sizes.</t>
        <t>All KEM algorithms provide three functions: KeyGen(), Encapsulate(), and Decapsulate().</t>
        <t>The following summarizes these three functions for the ML-KEM algorithm, referencing corresponding functions in <xref target="FIPS203"/>:</t>
        <dl>
          <dt>KeyGen() -&gt; (ek, dk):</dt>
          <dd>
            <t>Generate the public encapsulation key (ek) and a private decapsulation key (dk).  <xref target="FIPS203"/> specifies two formats for an ML-KEM private key: a 64-octet seed (d,z) and an (expanded) private decapsulation key (dk). Algorithm 19 (<tt>ML-KEM.KeyGen()</tt>) from <xref target="FIPS203"/> generates the public encapsulation key (ek) and the private decapsulation key (dk). As an alternative, when a seed (d,z) is generated first and then the seed is expanded to get the keys, algorithm 16 (<tt>ML-KEM.KeyGen_internal(d,z)</tt>) from <xref target="FIPS203"/> expands the seed to ek and dk. See <xref section="6" sectionFormat="of" target="I-D.ietf-lamps-kyber-certificates"/> for private key encoding considerations.</t>
          </dd>
          <dt>Encapsulate(ek) -&gt; (c, ss):</dt>
          <dd>
            <t>Given the recipient's public key (ek), produce both a ciphertext (c) to be passed to the recipient and a shared secret (ss) for use by the originator. Algorithm 20 (<tt>ML-KEM.Encaps(ek)</tt>) from <xref target="FIPS203"/> is the encapsulation function for ML-KEM.</t>
          </dd>
          <dt>Decapsulate(dk, c) -&gt; ss:</dt>
          <dd>
            <t>Given the private key (dk) and the ciphertext (c), produce the shared secret (ss) for the recipient.  Algorithm 21 (<tt>ML-KEM.Decaps(dk,c)</tt>) from <xref target="FIPS203"/> is the decapsulation function for ML-KEM. If the private key is stored in seed form, <tt>ML-KEM.KeyGen_internal(d,z)</tt> may be needed as a first step to compute dk. See <xref section="8" sectionFormat="of" target="I-D.ietf-lamps-kyber-certificates"/> for consistency considerations if the private key was stored in both seed and expanded formats.</t>
          </dd>
        </dl>
        <t>All security levels of ML-KEM use SHA3-256, SHA3-512, SHAKE256, and SHAKE512 internally.</t>
        <!-- End of ML-KEM section -->

<!-- End of introduction section -->

</section>
    </section>
    <section anchor="sec-using">
      <name>Use of the ML-KEM Algorithm in the CMS</name>
      <t>The ML-KEM algorithm <bcp14>MAY</bcp14> 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 ML-KEM algorithm to securely transfer the content-encryption key from the originator to the recipient.</t>
      <t>Processing ML-KEM with KEMRecipientInfo follows the same steps as <xref section="2" sectionFormat="of" target="RFC9629"/>. To support the ML-KEM algorithm, a CMS originator <bcp14>MUST</bcp14> implement the Encapsulate() function and a CMS recipient <bcp14>MUST</bcp14> implement the Decapsulate() function.</t>
      <section anchor="sec-using-recipientInfo">
        <name>RecipientInfo Conventions</name>
        <t>When the ML-KEM algorithm is employed for a recipient, the RecipientInfo alternative for that recipient <bcp14>MUST</bcp14> be OtherRecipientInfo using the KEMRecipientInfo structure as defined in <xref target="RFC9629"/>.</t>
        <t>The fields of the KEMRecipientInfo have the following meanings:</t>
        <ul empty="true">
          <li>
            <t>version is the syntax version number; it <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> contain one of id-alg-ml-kem-512, id-alg-ml-kem-768, or id-alg-ml-kem-1024. These identifiers are reproduced in <xref target="sec-identifiers"/>.</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 <bcp14>MAY</bcp14> be different than the KDF used within the ML-KEM algorithm. Implementations <bcp14>MUST</bcp14> support HKDF <xref target="RFC5869"/> with SHA-256 <xref target="FIPS180"/>, using the id-alg-hkdf-with-sha256 KDF object identifier <xref target="RFC8619"/>. As specified in <xref target="RFC8619"/>, the parameter field <bcp14>MUST</bcp14> be absent when this object identifier appears within the ASN.1 type AlgorithmIdentifier. Implementations <bcp14>MAY</bcp14> support other KDFs as well.</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 optional input to the key-derivation function. The secure use of ML-KEM in CMS does not depend on the use of a ukm value, so this document does not place any requirements on this value.  See <xref section="3" sectionFormat="of" target="RFC9629"/> for more information about the ukm parameter.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>wrap identifies a key-encryption algorithm used to encrypt the content-encryption key. Implementations supporting ML-KEM-512 <bcp14>MUST</bcp14> support the AES-Wrap-128 <xref target="RFC3394"/> key-encryption algorithm using the id-aes128-wrap key-encryption algorithm object identifier <xref target="RFC3565"/>. Implementations supporting ML-KEM-768 or ML-KEM-1024 <bcp14>MUST</bcp14> support the AES-Wrap-256 <xref target="RFC3394"/> key-encryption algorithm using the id-aes256-wrap key-encryption algorithm object identifier <xref target="RFC3565"/>. Implementations <bcp14>MAY</bcp14> support other key-encryption algorithms as well.</t>
          </li>
        </ul>
        <t><xref target="example"/> contains an example of establishing a content-encryption key using ML-KEM in the KEMRecipientInfo type.</t>
        <!-- End of recipientinfo conventions section -->

</section>
      <section anchor="sec-using-components">
        <name>Underlying Components</name>
        <t>When ML-KEM is employed in the CMS, the underlying components used within the KEMRecipientInfo structure <bcp14>SHOULD</bcp14> be consistent with a minimum desired security level.
Several security levels have been identified in NIST SP 800-57 Part 1 <xref target="NIST.SP.800-57pt1r5"/>.</t>
        <t>If underlying components other than those specified in <xref target="sec-using-recipientInfo"/> are used, then the following table gives the minimum requirements on the components used with ML-KEM in the KEMRecipientInfo type in order to satisfy the KDF and key wrapping algorithm requirements from <xref section="7" sectionFormat="of" target="RFC9629"/>:</t>
        <table anchor="tab-strong">
          <name>ML-KEM KEMRecipientInfo component security levels</name>
          <thead>
            <tr>
              <th align="left">Security Strength</th>
              <th align="left">Algorithm</th>
              <th align="left">KDF preimage strength</th>
              <th align="left">Symmetric key-encryption strength</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">128-bit</td>
              <td align="left">ML-KEM-512</td>
              <td align="left">128-bit</td>
              <td align="left">128-bit</td>
            </tr>
            <tr>
              <td align="left">192-bit</td>
              <td align="left">ML-KEM-768</td>
              <td align="left">192-bit</td>
              <td align="left">192-bit (*)</td>
            </tr>
            <tr>
              <td align="left">256-bit</td>
              <td align="left">ML-KEM-1024</td>
              <td align="left">256-bit</td>
              <td align="left">256-bit</td>
            </tr>
          </tbody>
        </table>
        <t>(*) In the case of AES Key Wrap, a 256-bit key is typically used because AES-192 is not as commonly deployed.</t>
        <section anchor="use-of-the-hkdf-based-key-derivation-function">
          <name>Use of the HKDF-based Key Derivation Function</name>
          <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>When used with KEMRecipientInfo, the salt parameter is unused, that is it is the zero-length string "". The IKM, info and L parameters correspond to the same KDF inputs from <xref section="5" sectionFormat="of" target="RFC9629"/>. The info parameter is independently generated by the originator and recipient. Implementations <bcp14>MUST</bcp14> confirm that L is consistent with the key size of the key-encryption algorithm.</t>
          <!-- End of Underlying Components section -->

</section>
      </section>
      <section anchor="sec-using-certs">
        <name>Certificate Conventions</name>
        <t>RFC 5280 <xref target="RFC5280"/> specifies the profile for using X.509 Certificates in Internet applications.  A recipient static public key is needed
for ML-KEM, and the originator obtains that public key from the recipient's certificate.  The conventions for carrying ML-KEM public keys are specified in <xref target="I-D.ietf-lamps-kyber-certificates"/>.</t>
      </section>
      <section anchor="sec-using-smime-caps">
        <name>SMIME Capabilities Attribute Conventions</name>
        <t><xref section="2.5.2" sectionFormat="of" 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 <bcp14>MAY</bcp14> include the SMIMECapabilities attribute that announces support for one or more of the ML-KEM algorithm identifiers.</t>
        <t>The SMIMECapability SEQUENCE representing the ML-KEM algorithm <bcp14>MUST</bcp14> include one of the ML-KEM object identifiers in the capabilityID field. When one of the ML-KEM object identifiers appears in the capabilityID field, the parameters <bcp14>MUST NOT</bcp14> be present.</t>
        <!-- End of smime-capabilities-attribute-conventions section -->

<!-- End of use-in-cms section -->

</section>
    </section>
    <section anchor="sec-identifiers">
      <name>Identifiers</name>
      <t>All identifiers used to indicate ML-KEM within the CMS are defined in <xref target="CSOR"/> and <xref target="RFC8619"/> but reproduced here for convenience:</t>
      <artwork><![CDATA[
  nistAlgorithms OBJECT IDENTIFIER ::= { joint-iso-ccitt(2)
      country(16) us(840) organization(1) gov(101) csor(3)
      nistAlgorithm(4) }
  kems OBJECT IDENTIFIER ::= { nistAlgorithms 4 }

  id-alg-ml-kem-512 OBJECT IDENTIFIER ::= { kems 1 }

  id-alg-ml-kem-768 OBJECT IDENTIFIER ::= { kems 2 }

  id-alg-ml-kem-1024 OBJECT IDENTIFIER ::= { kems 3 }

  id-alg-hkdf-with-sha256 OBJECT IDENTIFIER ::= { iso(1)
      member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9)
      smime(16) alg(3) 28 }

  aes OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840)
      organization(1) gov(101) csor(3) nistAlgorithms(4) 1 }

  id-aes128-wrap OBJECT IDENTIFIER ::= { aes 5 }
  id-aes256-wrap OBJECT IDENTIFIER ::= { aes 45 }
]]></artwork>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>The Security Considerations sections of <xref target="I-D.ietf-lamps-kyber-certificates"/> and <xref target="RFC9629"/> apply to this specification as well.</t>
      <t>For ongoing discussions of ML-KEM-specific security considerations, refer to <xref target="I-D.sfluhrer-cfrg-ml-kem-security-considerations"/>.</t>
      <t>Implementations <bcp14>MUST</bcp14> protect the ML-KEM private key, the key-encryption key, the content-encryption key, message-authentication key, and the content-authenticated-encryption key. Of these keys, all but the private key are ephemeral and <bcp14>MUST</bcp14> be wiped after use. Disclosure of the ML-KEM private key could result in the compromise of all messages protected with that key. Disclosure of the key-encryption key, the content-encryption key, or the content-authenticated-encryption key could result in compromise of the associated encrypted content. Disclosure of the key-encryption key, the message-authentication key, or the content-authenticated-encryption key could allow modification of the associated authenticated content.</t>
      <t>Additional considerations related to key management may be found in <xref target="NIST.SP.800-57pt1r5"/>.</t>
      <t>The generation of private keys relies on random numbers, as does the encapsulation function of ML-KEM.  The use of inadequate pseudo-random number generators (PRNGs) to generate these values can result in little or no security.  In the case of key generation, a random 32-byte seed is used to deterministically derive the key (with an additional 32 bytes reserved as a rejection value). In the case of encapsulation, a KEM is derived from the underlying ML-KEM public key encryption algorithm by deterministically encrypting a random 32-byte message for the public key.  If the random value is weakly-chosen, then an attacker may find it much easier to reproduce the PRNG environment that produced the keys or ciphertext, searching the resulting small set of possibilities for a matching public key or ciphertext value, rather than performing a more complex algorithmic attack against ML-KEM.  The generation of quality random numbers is difficult; see Section 3.3 of <xref target="FIPS203"/> for some additional information.</t>
      <t>ML-KEM encapsulation and decapsulation only outputs a shared secret and ciphertext. Implementations <bcp14>MUST NOT</bcp14> use intermediate values directly for any purpose.</t>
      <t>Implementations <bcp14>SHOULD NOT</bcp14> reveal information about intermediate values or calculations, whether by timing or other "side channels", otherwise an opponent may be able to determine information about the keying data and/or the recipient's private key. Although not all intermediate information may be useful to an opponent, it is preferable to conceal as much information as is practical, unless analysis specifically indicates that the information would not be useful to an opponent.</t>
      <t>Generally, good cryptographic practice employs a given ML-KEM key pair in only one scheme. This practice avoids the risk that vulnerability in one scheme may compromise the security of the other, and may be essential to maintain provable security.</t>
      <t>Parties can gain assurance that implementations are correct through formal implementation validation, such as the NIST Cryptographic Module Validation Program (CMVP) <xref target="CMVP"/>.</t>
      <!-- End of security-considerations section -->

</section>
    <section anchor="sec-iana-considerations">
      <name>IANA Considerations</name>
      <t>For the ASN.1 Module in <xref target="asn1"/>, IANA is requested to assign an object identifier (OID) for the module identifier (TBD1) with a Description of "id-mod-cms-ml-kem-2024". The OID for the module should be allocated in the "SMI Security for S/MIME Module Identifier" registry (1.2.840.113549.1.9.16.0).</t>
      <!-- End of iana-considerations section -->

</section>
    <section anchor="sec-acknowledgements">
      <name>Acknowledgements</name>
      <t>This document borrows heavily from <xref target="RFC9690"/>, <xref target="FIPS203"/>, and <xref target="I-D.kampanakis-ml-kem-ikev2"/>. Thanks go to the authors of those documents. "Copying always makes things easier and less error prone" - RFC8411.</t>
      <t>Thanks to Carl Wallace, Jonathan Hammel, and Sean Turner for the detailed review and Carl Wallace and Philippe Cece for interoperability testing for the examples.</t>
      <!-- End of acknowledgements section -->

</section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="FIPS203">
          <front>
            <title>Module-lattice-based key-encapsulation mechanism standard</title>
            <author>
              <organization/>
            </author>
            <date month="August" year="2024"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.203"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="RFC8551">
          <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="X680" target="https://www.itu.int/rec/T-REC-X.680">
          <front>
            <title>Information technology - Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.680"/>
          <seriesInfo name="ISO/IEC" value="8824-1:2021"/>
        </reference>
        <reference anchor="RFC5911">
          <front>
            <title>New ASN.1 Modules for Cryptographic Message Syntax (CMS) and S/MIME</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>The Cryptographic Message Syntax (CMS) format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5911"/>
          <seriesInfo name="DOI" value="10.17487/RFC5911"/>
        </reference>
        <reference anchor="CSOR" target="https://csrc.nist.gov/projects/computer-security-objects-register/algorithm-registration">
          <front>
            <title>Computer Security Objects Register</title>
            <author initials="" surname="NIST" fullname="National Institute of Standards and Technology">
              <organization/>
            </author>
            <date year="2024" month="August" day="20"/>
          </front>
        </reference>
        <reference anchor="RFC9629">
          <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="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC5652">
          <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="RFC5083">
          <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="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="FIPS180" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf">
          <front>
            <title>Secure Hash Standard</title>
            <author fullname="Quynh H. Dang" surname="Dang">
              <organization>Information Technology Laboratory</organization>
            </author>
            <author>
              <organization abbrev="NIST">National Institute of Standards and Technology</organization>
              <address>
                <postal>
                  <country>US</country>
                  <city>Gaithersburg</city>
                </postal>
              </address>
            </author>
            <date month="July" year="2015"/>
          </front>
          <seriesInfo name="NIST Federal Information Processing Standards Publications" value="180-4"/>
          <seriesInfo name="DOI" value="10.6028/NIST.FIPS.180-4"/>
        </reference>
        <reference anchor="RFC8619">
          <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="RFC3394">
          <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="RFC3565">
          <front>
            <title>Use of the Advanced Encryption Standard (AES) Encryption Algorithm in Cryptographic Message Syntax (CMS)</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="July" year="2003"/>
            <abstract>
              <t>This document specifies the conventions for using the Advanced Encryption Standard (AES) algorithm for encryption with the Cryptographic Message Syntax (CMS). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3565"/>
          <seriesInfo name="DOI" value="10.17487/RFC3565"/>
        </reference>
        <reference anchor="RFC5280">
          <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="I-D.ietf-lamps-kyber-certificates">
          <front>
            <title>Internet X.509 Public Key Infrastructure - Algorithm Identifiers for the Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM)</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="22" month="July" year="2025"/>
            <abstract>
              <t>   The Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM) is a
   quantum-resistant key-encapsulation mechanism (KEM).  This document
   specifies the conventions for using the ML-KEM in X.509 Public Key
   Infrastructure.  The conventions for the subject public keys and
   private keys are also specified.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-kyber-certificates-11"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="NIST-PQ" target="https://csrc.nist.gov/projects/post-quantum-cryptography">
          <front>
            <title>Post-Quantum Cryptography Project</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2016" month="December" day="20"/>
          </front>
        </reference>
        <reference anchor="CMVP" target="https://csrc.nist.gov/projects/cryptographic-module-validation-program">
          <front>
            <title>Cryptographic Module Validation Program</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2016"/>
          </front>
        </reference>
        <reference anchor="NIST.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 fullname="Elaine Barker" surname="Barker">
              <organization>Information Technology Laboratory</organization>
            </author>
            <author>
              <organization abbrev="NIST">National Institute of Standards and Technology</organization>
              <address>
                <postal>
                  <country>US</country>
                  <city>Gaithersburg</city>
                </postal>
              </address>
            </author>
            <date month="May" year="2020"/>
          </front>
          <seriesInfo name="NIST Special Publications (General)" value="800-57pt1r5"/>
          <seriesInfo name="DOI" value="10.6028/NIST.SP.800-57pt1r5"/>
        </reference>
        <reference anchor="I-D.sfluhrer-cfrg-ml-kem-security-considerations">
          <front>
            <title>ML-KEM Security Considerations</title>
            <author fullname="Scott Fluhrer" initials="S." surname="Fluhrer">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Quynh Dang" initials="Q." surname="Dang">
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <author fullname="John Preuss Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Kevin Milner" initials="K." surname="Milner">
              <organization>Quantinuum</organization>
            </author>
            <author fullname="Daniel Shiu" initials="D." surname="Shiu">
              <organization>Arqit Quantum Inc</organization>
            </author>
            <date day="15" month="May" year="2025"/>
            <abstract>
              <t>   NIST standardized ML-KEM as FIPS 203 in August 2024.  This document
   discusses how to use ML-KEM and how to use it within protocols - that
   is, what problem it solves, and what you need to do to use it
   securely.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-sfluhrer-cfrg-ml-kem-security-considerations-03"/>
        </reference>
        <reference anchor="RFC9690">
          <front>
            <title>Use of the RSA-KEM Algorithm in the Cryptographic Message Syntax (CMS)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="February" year="2025"/>
            <abstract>
              <t>The RSA Key Encapsulation Mechanism (RSA-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 RSA public key. The RSA-KEM algorithm is specified in Clause 11.5 of ISO/IEC: 18033-2:2006. This document specifies the conventions for using the RSA-KEM algorithm as a standalone KEM algorithm and the conventions for using the RSA-KEM algorithm with the Cryptographic Message Syntax (CMS) using KEMRecipientInfo as specified in RFC 9629. This document obsoletes RFC 5990.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9690"/>
          <seriesInfo name="DOI" value="10.17487/RFC9690"/>
        </reference>
        <reference anchor="I-D.kampanakis-ml-kem-ikev2">
          <front>
            <title>Post-quantum Hybrid Key Exchange with ML-KEM in the Internet Key Exchange Protocol Version 2 (IKEv2)</title>
            <author fullname="Panos Kampanakis" initials="P." surname="Kampanakis">
              <organization>Amazon Web Services</organization>
            </author>
            <author fullname="Gerardo Ravago" initials="G." surname="Ravago">
              <organization>Amazon Web Services</organization>
            </author>
            <date day="4" month="November" year="2024"/>
            <abstract>
              <t>   NIST recently standardized ML-KEM, a new key encapsulation mechanism,
   which can be used for quantum-resistant key establishment.  This
   draft specifies how to use ML-KEM as an additional key exchange in
   IKEv2 along with traditional key exchanges.  This Post-Quantum
   Traditional Hybrid Key Encapsulation Mechanism approach allows for
   negotiating IKE and Child SA keys which are safe against
   cryptanalytically-relevant quantum computers and theoretical
   weaknesses in ML-KEM.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kampanakis-ml-kem-ikev2-09"/>
        </reference>
      </references>
    </references>
    <?line 308?>

<section anchor="asn1">
      <name>ASN.1 Module</name>
      <t>This appendix includes the ASN.1 module <xref target="X680"/> for ML-KEM. This module imports objects from <xref target="RFC5911"/>, <xref target="RFC9629"/>, <xref target="RFC8619"/>, <xref target="I-D.ietf-lamps-kyber-certificates"/>.</t>
      <sourcecode markers="true"><![CDATA[
CMS-ML-KEM-2024
{ iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
  pkcs-9(9) smime(16) modules(0) id-mod-cms-ml-kem-2024(TBD1) }

DEFINITIONS IMPLICIT TAGS ::= BEGIN

EXPORTS ALL;

IMPORTS
  SMIME-CAPS
    FROM AlgorithmInformation-2009  -- [RFC5911]
      { 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  -- [RFC9629]
       { iso(1) identified-organization(3) dod(6) internet(1)
         security(5) mechanisms(5) pkix(7) id-mod(0)
         id-mod-kemAlgorithmInformation-2023(109) }

  kda-hkdf-with-sha256
    FROM HKDF-OID-2019  -- [RFC8619]
       { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
         pkcs-9(9) smime(16) modules(0) id-mod-hkdf-oid-2019(68) }

  kwa-aes128-wrap, kwa-aes256-wrap
    FROM CMSAesRsaesOaep-2009  -- [RFC5911]
       { iso(1) member-body(2) us(840) rsadsi(113549)
       pkcs(1) pkcs-9(9) smime(16) modules(0)
       id-mod-cms-aes-02(38) }

  id-alg-ml-kem-512, id-alg-ml-kem-768, id-alg-ml-kem-1024,
  pk-ml-kem-512, pk-ml-kem-768, pk-ml-kem-1024
    FROM X509-ML-KEM-2024 -- [I-D.ietf-lamps-kyber-certificates]
       { iso(1) identified-organization(3) dod(6)
         internet(1) security(5) mechanisms(5) pkix(7) id-mod(0)
         id-mod-x509-ml-kem-2025(121) };

--
-- ML-KEM Key Encapsulation Mechanism Algorithms
--

kema-ml-kem-512 KEM-ALGORITHM ::= {
   IDENTIFIER id-alg-ml-kem-512
   PARAMS ARE absent
   PUBLIC-KEYS { pk-ml-kem-512 }
   UKM ARE optional
   SMIME-CAPS { IDENTIFIED BY id-alg-ml-kem-512 } }

kema-ml-kem-768 KEM-ALGORITHM ::= {
   IDENTIFIER id-alg-ml-kem-768
   PARAMS ARE absent
   PUBLIC-KEYS { pk-ml-kem-768 }
   UKM ARE optional
   SMIME-CAPS { IDENTIFIED BY id-alg-ml-kem-768 } }

kema-ml-kem-1024 KEM-ALGORITHM ::= {
   IDENTIFIER id-alg-ml-kem-1024
   PARAMS ARE absent
   PUBLIC-KEYS { pk-ml-kem-1024 }
   UKM ARE optional
   SMIME-CAPS { IDENTIFIED BY id-alg-ml-kem-1024 } }

-- Updates for the SMIME-CAPS Set from RFC 5911

SMimeCapsSet SMIME-CAPS ::=
   { kema-ml-kem-512.&smimeCaps |
     kema-ml-kem-768.&smimeCaps |
     kema-ml-kem-1024.&smimeCaps |
     kda-hkdf-with-sha256.&smimeCaps |
     kwa-aes128-wrap.&smimeCaps |
     kwa-aes256-wrap.&smimeCaps,
     ... }

END
]]></sourcecode>
    </section>
    <section anchor="arnold">
      <name>Parameter Set Security and Sizes</name>
      <t>Instead of defining the strength of a quantum algorithm in a traditional
manner using the imprecise notion of bits of security, NIST has
defined security levels by picking a reference scheme, which
NIST expects to offer notable levels of resistance to both quantum and
classical attack.  To wit, a KEM algorithm that achieves NIST PQC
security must require computational resources to break IND-CCA2
security comparable or greater than that required for key search
on AES-128, AES-192, and AES-256 for Levels 1, 3, and 5, respectively.
Levels 2 and 4 use collision search for SHA-256 and SHA-384 as reference.</t>
      <table anchor="tab-strengths">
        <name>ML-KEM parameter sets, NIST Security Level, and sizes in bytes</name>
        <thead>
          <tr>
            <th align="left">Parameter Set</th>
            <th align="left">Level</th>
            <th align="left">Encap. Key Size</th>
            <th align="left">Decap. Key Size</th>
            <th align="left">Ciphertext Size</th>
            <th align="left">Shared Secret Size</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">ML-KEM-512</td>
            <td align="left">1</td>
            <td align="left">800</td>
            <td align="left">1632</td>
            <td align="left">768</td>
            <td align="left">32</td>
          </tr>
          <tr>
            <td align="left">ML-KEM-768</td>
            <td align="left">3</td>
            <td align="left">1184</td>
            <td align="left">2400</td>
            <td align="left">1088</td>
            <td align="left">32</td>
          </tr>
          <tr>
            <td align="left">ML-KEM-1024</td>
            <td align="left">5</td>
            <td align="left">1568</td>
            <td align="left">3168</td>
            <td align="left">1568</td>
            <td align="left">32</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="example">
      <name>ML-KEM CMS Authenticated-Enveloped-Data Example</name>
      <t>This example shows the establishment of an AES-128 content-encryption
key using:</t>
      <ul spacing="normal">
        <li>
          <t>ML-KEM-512;</t>
        </li>
        <li>
          <t>KEMRecipientInfo key derivation using HKDF with SHA-256; and</t>
        </li>
        <li>
          <t>KEMRecipientInfo key wrap using AES-128-KEYWRAP.</t>
        </li>
      </ul>
      <t>In real-world use, the originator would encrypt the content-
encryption key in a manner that would allow decryption with their own
private key as well as the recipient's private key.  This is omitted
in an attempt to simplify the example.</t>
      <section anchor="originator-cms-processing">
        <name>Originator CMS Processing</name>
        <t>Alice obtains Bob's ML-KEM-512 public key:</t>
        <artwork><![CDATA[
-----BEGIN PUBLIC KEY-----
MIIDMjALBglghkgBZQMEBAEDggMhADmVgV5ZfRBDVc8pqlMzyTJRhp1bzb5IcST2
Ari2pmwWxHYWSK12XPXYAGtRXpBafwrAdrDGLvoygVPnylcBaZ8TBfHmvG+QsOSb
aTUSts6ZKouAFt38GmYsfj+WGcvYad13GvMIlszVkYrGy3dGbF53mZbWf/mqvJdQ
Pyx7fi0ADYZFD7GAfKTKvaRlgloxx4mht6SRqzhydl0yDQtxkg+iE8lAk0Frg7gS
Tmn2XmLLUADcw3qpoP/3OXDEdy81fSQYnKb1MFVowOI3ajdipoxgXlY8XSCVcuD8
dTLKKUcpU1VntfxBPF6HktJGRTbMgI+YrddGZPFBVm+QFqkKVBgpqYoEZM5BqLtE
wtT6PCwglGByjvFKGnxMm5jRIgO0zDUpFgqasteDj3/2tTrgWqMafWRrevpsRZMl
JqPDdVYZvplMIRwqMcBbNEeDbLIVC+GCna5rBMVTXP9Ubjkrp5dBFyD5JPSQpaxU
lfITVtVQt4KmTBaItrZVvMeEIZekNML2Vjtbfwmni8xIgjJ4NWHRb0y6tnVUAAUH
gVcMZmBLgXrRJSKUc26LAYYaS1p0UZuLb+UUiaUHI5Llh2JscTd2V10zgGocjicy
r5fCaA9RZmMxxOuLvAQxxPloMtrxs8RVKPuhU/bHixwZhwKUfM0zdyekb7U7oR3l
y0GRNGhZUWy2rXJADzzyCbI2rvNaWArIfrPjD6/WaXPKin3SZ1r0H3oXthQzzRr4
D3cIhp9mVIhJeYCxrBCgzctjagDthoGzXkKRJMqANQcluF+DperDpKPMFgCQPmUp
NWC5szblrw1SnawaBIEZMCy3qbzBELlIUb8CEX8ZncSFqFK3Rz8JuDGmgx1bVMC3
kNIlz2u5LZRiomzbM92lEjx6rw4moLg2Ve6ii/OoB0clAY/WuuS2Ac9huqtxp6PT
UZejQ+dLSicsEl1UCJZCbYW3lY07OKa6mH7DciXHtEzbEt3kU5tKsII2NoPwS/eg
nMXEHf6DChsWLgsyQzQ2LwhKFEZ3IzRLrdAA+NjFN8SPmY8FMHzr0e3guBw7xZoG
WhttY7Js
-----END PUBLIC KEY-----
]]></artwork>
        <t>Bob's ML-KEM-512 public key has the following key identifier:</t>
        <artwork><![CDATA[
599788C37AED400EE405D1B2A3366AB17D824A51
]]></artwork>
        <t>Alice generates a shared secret and ciphertext using Bob's ML-KEM-512 public key:</t>
        <t>Shared secret:</t>
        <artwork><![CDATA[
7DF12D412AE299A24FDE6D7C3BB8E3194C80AD3C733DCF2775E09FE8BEDB86D8
]]></artwork>
        <t>Ciphertext:</t>
        <artwork><![CDATA[
3EA40FC6CA090E2C8AF76E2727AB38E0652D9515986FE186827FE84E596E421B
85FD459CC78997372C9DE31D191B39C1D5A3EB6DDB56AADEDE765CC390FDBBC2
F88CB175681D4201B81CCDFCB24FEF13AF2F5A1ABCF8D8AF384F02A010A6E919
F1987A5E9B1C0E2D3F07F58A9FA539CE86CC149910A1692C0CA4CE0ECE4EEED2
E6699CB976332452DE4A2EB5CA61F7B081330C34798EF712A24E59C33CEA1F1F
9E6D4FBF3743A38467430011336F62D870792B866BEFCD1D1B365BED1952673D
3A5B0C20B386B4EFD1CF63FD376BD47CCC46AC4DD8EC66B047C4C95ACFF1CFD0
28A419B002FDA1B617CBA61D2E91CFE8FFFBCB8FFD4D5F6AD8B158C219E36DC5
1405DC0C0B234979AC658E72BDDF1B6773B96B2AE3E4D07BE86048040C016743
6FA839E7529B00CC9AB55A2F25DB63CC9F557594E691C11E553D4A3EBC760F5F
19E5FE144838B4C7D1591DA9B5D467494FD9CAC52CC5504060399DBDB72298EB
9A4C017B00786FDC7D9D7AA57ADBB8B61C34DE1E288B2AB728171DCE143CD169
53F984C1AED559E56BAA0CE658D32CCE42F4407504CD7A579AD0EF9B77135EAA
39B6F93A3A2E5997807F06361C83F4E67F8E3F9CF68316011514F5D85A181CEA
D714CD4940E4EBAC01D66528DA32F89CEA0428E8EBCADCF8AA188C9F62E85B19
57655B7FE2B8D7973B7A7226B66D93BF7B232F3DCF653C84B4ECF1A9920DB194
9AD750B546A5552A20E54909719B8C0C07056FCB7E574AD2A32EC95001DDE844
81BE77D039ED5BF74262ECF3981F1B00D3366A9C2E061C47E241A061C6249560
D2B8446A480C38C28BA989D9F68ADC4BBAF2A20B47E4923128C72342D597FDA2
59DE0B83C2056D6B77E799B319324AA50B1D659C2A56029B7453C5F3BA5243D9
FA749D917C40D9D101E453BC8B10E42A7C089323C026F783E100B9FA6E701442
4DA6FA3792BC957EE8219D016B773F28FEDCC962A485ABAFFEC023281971E29A
A689839ECFD2619E92287CD230DB26A2507CC500EB1C7A5293B5FE917AE29BF1
AD350124F8A311635214B411DB9F67D3B85BD715018537EA45B41F41B4C66051
]]></artwork>
        <t>Alice encodes the CMSORIforKEMOtherInfo:</t>
        <artwork><![CDATA[
3010300B0609608648016503040105020110
]]></artwork>
        <t>Alice derives the key-encryption key from the shared secret and CMSORIforKEMOtherInfo using HKDF with SHA-256:</t>
        <artwork><![CDATA[
CF453A3E2BAE0A78701B8206C185A008
]]></artwork>
        <t>Alice randomly generates a 128-bit content-encryption key:</t>
        <artwork><![CDATA[
C5153005588269A0A59F3C01943FDD56
]]></artwork>
        <t>Alice uses AES-128-KEYWRAP to encrypt the content-encryption key with the key-encryption key:</t>
        <artwork><![CDATA[
C050E4392F9C14DD0AC2220203F317D701F94F9DD92778F5
]]></artwork>
        <t>Alice encrypts the padded content using AES-128-GCM with the content-encryption key and encodes the AuthEnvelopedData (using KEMRecipientInfo) and ContentInfo, and then sends the result to Bob.</t>
        <t>The Base64-encoded result is:</t>
        <artwork><![CDATA[
-----BEGIN CMS-----
MIID4gYLKoZIhvcNAQkQARegggPRMIIDzQIBADGCA3ikggN0BgsqhkiG9w0BCRAN
AzCCA2MCAQCAFFmXiMN67UAO5AXRsqM2arF9gkpRMAsGCWCGSAFlAwQEAQSCAwA+
pA/GygkOLIr3bicnqzjgZS2VFZhv4YaCf+hOWW5CG4X9RZzHiZc3LJ3jHRkbOcHV
o+tt21aq3t52XMOQ/bvC+IyxdWgdQgG4HM38sk/vE68vWhq8+NivOE8CoBCm6Rnx
mHpemxwOLT8H9YqfpTnOhswUmRChaSwMpM4Ozk7u0uZpnLl2MyRS3koutcph97CB
Mww0eY73EqJOWcM86h8fnm1PvzdDo4RnQwARM29i2HB5K4Zr780dGzZb7RlSZz06
Wwwgs4a079HPY/03a9R8zEasTdjsZrBHxMlaz/HP0CikGbAC/aG2F8umHS6Rz+j/
+8uP/U1fatixWMIZ423FFAXcDAsjSXmsZY5yvd8bZ3O5ayrj5NB76GBIBAwBZ0Nv
qDnnUpsAzJq1Wi8l22PMn1V1lOaRwR5VPUo+vHYPXxnl/hRIOLTH0VkdqbXUZ0lP
2crFLMVQQGA5nb23IpjrmkwBewB4b9x9nXqletu4thw03h4oiyq3KBcdzhQ80WlT
+YTBrtVZ5WuqDOZY0yzOQvRAdQTNelea0O+bdxNeqjm2+To6LlmXgH8GNhyD9OZ/
jj+c9oMWARUU9dhaGBzq1xTNSUDk66wB1mUo2jL4nOoEKOjrytz4qhiMn2LoWxlX
ZVt/4rjXlzt6cia2bZO/eyMvPc9lPIS07PGpkg2xlJrXULVGpVUqIOVJCXGbjAwH
BW/LfldK0qMuyVAB3ehEgb530DntW/dCYuzzmB8bANM2apwuBhxH4kGgYcYklWDS
uERqSAw4woupidn2itxLuvKiC0fkkjEoxyNC1Zf9olneC4PCBW1rd+eZsxkySqUL
HWWcKlYCm3RTxfO6UkPZ+nSdkXxA2dEB5FO8ixDkKnwIkyPAJveD4QC5+m5wFEJN
pvo3kryVfughnQFrdz8o/tzJYqSFq6/+wCMoGXHimqaJg57P0mGekih80jDbJqJQ
fMUA6xx6UpO1/pF64pvxrTUBJPijEWNSFLQR259n07hb1xUBhTfqRbQfQbTGYFEw
DQYLKoZIhvcNAQkQAxwCARAwCwYJYIZIAWUDBAEFBBjAUOQ5L5wU3QrCIgID8xfX
AflPndknePUwOgYJKoZIhvcNAQcBMB4GCWCGSAFlAwQBBjARBAxcpXRouBvwO42n
GGwCARCADZTIaJqZ0sOOGS+muggEEFzxeGxXx0ArVPyTwwpKRTM=
-----END CMS-----
]]></artwork>
        <t>This result decodes to:</t>
        <artwork><![CDATA[
  0 994: SEQUENCE {
  4  11:  OBJECT IDENTIFIER
       :   authEnvelopedData (1 2 840 113549 1 9 16 1 23)
 17 977:  [0] {
 21 973:   SEQUENCE {
 25   1:    INTEGER 0
 28 888:    SET {
 32 884:     [4] {
 36  11:      OBJECT IDENTIFIER '1 2 840 113549 1 9 16 13 3'
 49 867:      SEQUENCE {
 53   1:       INTEGER 0
 56  20:       [0]
       :     59 97 88 C3 7A ED 40 0E E4 05 D1 B2 A3 36 6A B1
       :     7D 82 4A 51
 78  11:       SEQUENCE {
 80   9:        OBJECT IDENTIFIER '2 16 840 1 101 3 4 4 1'
       :         }
 91 768:       OCTET STRING
       :     3E A4 0F C6 CA 09 0E 2C 8A F7 6E 27 27 AB 38 E0
       :     65 2D 95 15 98 6F E1 86 82 7F E8 4E 59 6E 42 1B
       :     85 FD 45 9C C7 89 97 37 2C 9D E3 1D 19 1B 39 C1
       :     D5 A3 EB 6D DB 56 AA DE DE 76 5C C3 90 FD BB C2
       :     F8 8C B1 75 68 1D 42 01 B8 1C CD FC B2 4F EF 13
       :     AF 2F 5A 1A BC F8 D8 AF 38 4F 02 A0 10 A6 E9 19
       :     F1 98 7A 5E 9B 1C 0E 2D 3F 07 F5 8A 9F A5 39 CE
       :     86 CC 14 99 10 A1 69 2C 0C A4 CE 0E CE 4E EE D2
       :     E6 69 9C B9 76 33 24 52 DE 4A 2E B5 CA 61 F7 B0
       :     81 33 0C 34 79 8E F7 12 A2 4E 59 C3 3C EA 1F 1F
       :     9E 6D 4F BF 37 43 A3 84 67 43 00 11 33 6F 62 D8
       :     70 79 2B 86 6B EF CD 1D 1B 36 5B ED 19 52 67 3D
       :     3A 5B 0C 20 B3 86 B4 EF D1 CF 63 FD 37 6B D4 7C
       :     CC 46 AC 4D D8 EC 66 B0 47 C4 C9 5A CF F1 CF D0
       :     28 A4 19 B0 02 FD A1 B6 17 CB A6 1D 2E 91 CF E8
       :     FF FB CB 8F FD 4D 5F 6A D8 B1 58 C2 19 E3 6D C5
       :     14 05 DC 0C 0B 23 49 79 AC 65 8E 72 BD DF 1B 67
       :     73 B9 6B 2A E3 E4 D0 7B E8 60 48 04 0C 01 67 43
       :     6F A8 39 E7 52 9B 00 CC 9A B5 5A 2F 25 DB 63 CC
       :     9F 55 75 94 E6 91 C1 1E 55 3D 4A 3E BC 76 0F 5F
       :     19 E5 FE 14 48 38 B4 C7 D1 59 1D A9 B5 D4 67 49
       :     4F D9 CA C5 2C C5 50 40 60 39 9D BD B7 22 98 EB
       :     9A 4C 01 7B 00 78 6F DC 7D 9D 7A A5 7A DB B8 B6
       :     1C 34 DE 1E 28 8B 2A B7 28 17 1D CE 14 3C D1 69
       :     53 F9 84 C1 AE D5 59 E5 6B AA 0C E6 58 D3 2C CE
       :     42 F4 40 75 04 CD 7A 57 9A D0 EF 9B 77 13 5E AA
       :     39 B6 F9 3A 3A 2E 59 97 80 7F 06 36 1C 83 F4 E6
       :     7F 8E 3F 9C F6 83 16 01 15 14 F5 D8 5A 18 1C EA
       :     D7 14 CD 49 40 E4 EB AC 01 D6 65 28 DA 32 F8 9C
       :     EA 04 28 E8 EB CA DC F8 AA 18 8C 9F 62 E8 5B 19
       :     57 65 5B 7F E2 B8 D7 97 3B 7A 72 26 B6 6D 93 BF
       :     7B 23 2F 3D CF 65 3C 84 B4 EC F1 A9 92 0D B1 94
       :     9A D7 50 B5 46 A5 55 2A 20 E5 49 09 71 9B 8C 0C
       :     07 05 6F CB 7E 57 4A D2 A3 2E C9 50 01 DD E8 44
       :     81 BE 77 D0 39 ED 5B F7 42 62 EC F3 98 1F 1B 00
       :     D3 36 6A 9C 2E 06 1C 47 E2 41 A0 61 C6 24 95 60
       :     D2 B8 44 6A 48 0C 38 C2 8B A9 89 D9 F6 8A DC 4B
       :     BA F2 A2 0B 47 E4 92 31 28 C7 23 42 D5 97 FD A2
       :     59 DE 0B 83 C2 05 6D 6B 77 E7 99 B3 19 32 4A A5
       :     0B 1D 65 9C 2A 56 02 9B 74 53 C5 F3 BA 52 43 D9
       :     FA 74 9D 91 7C 40 D9 D1 01 E4 53 BC 8B 10 E4 2A
       :     7C 08 93 23 C0 26 F7 83 E1 00 B9 FA 6E 70 14 42
       :     4D A6 FA 37 92 BC 95 7E E8 21 9D 01 6B 77 3F 28
       :     FE DC C9 62 A4 85 AB AF FE C0 23 28 19 71 E2 9A
       :     A6 89 83 9E CF D2 61 9E 92 28 7C D2 30 DB 26 A2
       :     50 7C C5 00 EB 1C 7A 52 93 B5 FE 91 7A E2 9B F1
       :     AD 35 01 24 F8 A3 11 63 52 14 B4 11 DB 9F 67 D3
       :     B8 5B D7 15 01 85 37 EA 45 B4 1F 41 B4 C6 60 51
863  13:       SEQUENCE {
865  11:        OBJECT IDENTIFIER
       :         hkdfWithSha256 (1 2 840 113549 1 9 16 3 28)
       :         }
878   1:       INTEGER 16
881  11:       SEQUENCE {
883   9:        OBJECT IDENTIFIER
       :         aes128-wrap (2 16 840 1 101 3 4 1 5)
       :         }
894  24:       OCTET STRING
       :     C0 50 E4 39 2F 9C 14 DD 0A C2 22 02 03 F3 17 D7
       :     01 F9 4F 9D D9 27 78 F5
       :        }
       :       }
       :      }
920  58:    SEQUENCE {
922   9:     OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
933  30:     SEQUENCE {
935   9:      OBJECT IDENTIFIER
       :       aes128-GCM (2 16 840 1 101 3 4 1 6)
946  17:      SEQUENCE {
948  12:       OCTET STRING 5C A5 74 68 B8 1B F0 3B 8D A7 18 6C
962   1:       INTEGER 16
       :        }
       :       }
965  13:     [0] 94 C8 68 9A 99 D2 C3 8E 19 2F A6 BA 08
       :      }
980  16:    OCTET STRING 5C F1 78 6C 57 C7 40 2B 54 FC 93 C3 0A 4A 45 33
       :     }
       :    }
       :   }
]]></artwork>
      </section>
      <section anchor="recipient-cms-processing">
        <name>Recipient CMS Processing</name>
        <t>Bob's ML-KEM-512 private key:</t>
        <artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
MFQCAQAwCwYJYIZIAWUDBAQBBEKAQAABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZ
GhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj8=
-----END PRIVATE KEY-----
]]></artwork>
        <t>Bob decapsulates the ciphertext in the KEMRecipientInfo to get the ML-KEM-512 shared secret, encodes the CMSORIforKEMOtherInfo, derives the key-encryption key from the shared secret and the DER-encoded CMSORIforKEMOtherInfo using HKDF with SHA-256, uses AES-128-KEYWRAP to decrypt the content-encryption key with the key-encryption key, and decrypts the encrypted contents with the content-encryption key, revealing the plaintext content:</t>
        <artwork><![CDATA[
Hello, world!
]]></artwork>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
pM9p/03/U8S9P4qiV/nNulve7Ww3XbJTSWs/KzRQ6kv+mHpXNNkQyywJP67f
nvDyYvwcjcJK487DgSaa1XN4xazBy39hRmnJqGi8TKmiWyk0pESsbrWMTkrF
S6jCqkq7apKoUD/u5HEQp2xlg2Xt6ZPUHhDc7GhB6gZJsqhER6sd0412LaD2
l98s1v41L/Pk/fNOMA060QgaDMpYGSS8M/sBM9JxNA5rVDv6lWK/ZYXrQDso
q1zUY7vR0sKPWjspWJ6UkfpM4hm/0OWNFBHiGYSLeUPFKubkxES00T7kgEdr
Is0764vo9YBxK0DCzGOsPOykVCyN+pOfqHPmZm3EL6A3jqEgOZqsOkF+iFkO
cI7bMlXYquWuV4wrZbNV0aSoTK0fhrjCu771LhyP11zClMfA/d2b5SXAAvCi
+FOZuJUrLOvK3eVxDTfP+gvy/tQmZdb/6WYbdYXCMlGPBF1G5UhtWJalCC5p
XlvSvPZp/F/dAba+Fk3o3aDNCn6jAnvRK1EpXeV3EFX8yrQXhjk3YpVacaUw
H6x3+v2F2qj/yg1HtcbCgEG1fEZ9LeW1CpCK6DWeo9xtMka9sZU2wEv71HNu
WMP1Lm4afsNrsaOjP7Hv7CWmJv0ojWvdbpRle/LX9b78PUmn2teeoYr0Cko/
mEQfXNL3pK+sH7/tSSJ+6KZxsqeUS9eO3lO/sl/xYBj+AIoNYFWswJKt4uOn
6/nm0q5VFCj+cJW8axUP/n64TFlbtlVO+2wtCA3CFXQah1TrrXXi3gJ0X1I5
SYNeGu1JkqKp5lc2HXZTIjb9WzP3zHI1F3POHkAA4jPZyGFC8v8T7I6yWY3Y
vYvRq5boH7J7g23E6QoPKtWUz6AhSDUuHRs1ix8tUGkFj+V+WWVQzvplYq6a
y1cK1q8aizu1z9YWGs8L/NC+n7naXClqUUmjqGGRR3bRsmhavL6xKo343ND3
YzLKvSjtzvj7gJVLy1q5cpUSrKNS9LHQSUjRCdT0eTQbJATic7IU588IwfP3
XZEfTExGprpivCsXs/ufVEv3f1DV24e0857jWuVmcPlseederN28PVyvD14+
F+0+ZefGiFvGzetjMqrhlJosqQDCm7CKcvQ8mtI18jNFzbDQB8wF9UdxOtvy
ttX9oCgjCprTGbKDaFVhQMwWFbVaQFKgmZY0XN1NBlkO/vZhv5eUcfLT1NqC
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
LdMwXSBpAGfVtmEQAJaNpaopKwjnnTpkVnY1sw7hl2G+XU+0DQX6pOmuDvZ4
ddO0YSOh3ZAH0QZVob+yheMgrXUVpNB8xbY0WVVcGBQL4uaa0CFVhAxJouRh
iu1AZ8AX2ao7ooG9FEeUdb9uKJ4kijasje7VRcivLKiuBXVQSOlBm7rnGVA0
F4oCWBRfNnzPdej+BjhqFvDxPWylQB5BZlh3S7B0wyRtgm7LOhTDlGWj7riy
Ai7JuiVrImwCiO7B5EESZbAWugOIyTnYviTAE2iiBAtqWIqEvFqTJfBaklzA
qdddxYa4QNgwx9CUOnyAhqe+KkHxdF1cd238C2PFtScShstW4zlO4Lf4x1Qa
/GPxuSuBSYbZs6GZpi4aOhgo6RqGVDzQRJh2Sazum/fhrb7H8dk3d7bd6U4o
PssOC+gcHzyEvZGRhIhWHTYZnkYWdQcUsETRqEKW94xV3pYjr16+n7q7Abc8
Ba4SNNA0w5B10xItzfQhJ9AsWHNX06unINlMNzPSn/scwtqLdp8AAop7qmLK
MDcSHIdoObIsgwmKryCAAfY+LKrpuiZCBcPXNhhOGxZvxwW93qqPdiOPPnYq
n7f+BFb+Za6KCFHpYVlw4PWGvXzTzeQ9/+yak++av4i5/H5fGpZf1iuaVkE3
xFRFHy59IV1Xa/mpq0bndDtrpSvyZbqq9h/Pz+KnxuCte2FdD6+tVtjv969a
9OzjumFb7rFjKdGw378Q7X76OhhGx+ZctJ2WdSFYH1SMbDrWtQOFHj9EzQu9
fmtdatZDK31tykHim/3htNW00mPn3jluW/7Iml971nXbsebWN2FqHR4v+sPL
80aidKLu5PXjpf/Ulu/8p8Gb+hg4z98Gl/f3mnOsPiCX+TiJnrrK+anyctIa
di67J3dC/C3LZCl4VTJNfmheXh923pxvjcV7777fu+4fqydNxUiHh2+ebrzd
D16NbxfR26VnOLHtjPXW5F0Yn0zD8fv88vzGODEfX5+nN5PLQTq/HbecQdCe
N6dN9fJjWJ+Js6fp5HwkNxettjKMZ1l3OjARcAjN+VwMH+uK93p6ed9tGvrA
eJ6Mpau3j54bq63J9dxqNWUzkk9s7Ux9SuAge8cfT516a9R++hB14X4+76dq
gHDp5OrxUFQCs2V8eEF603tJnxL75L05Cj4OT65EJxoedyznMDiGX5yNT9p6
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

-->

</rfc>
