<?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.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-lamps-cms-kyber-09" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="ML-KEM in CMS">Use of ML-KEM in the Cryptographic Message Syntax (CMS)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-cms-kyber-09"/>
    <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="April" day="22"/>
    <area>Security</area>
    <workgroup>LAMPS</workgroup>
    <keyword>Key Encapsulation Mechanism (KEM)</keyword>
    <keyword>KEMRecipientInfo</keyword>
    <keyword>ML-KEM</keyword>
    <keyword>Kyber</keyword>
    <abstract>
      <?line 98?>

<t>Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM) is a quantum-resistant key-encapsulation mechanism (KEM). Three parameters sets for the ML-KEM algorithm are specified by 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.</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 104?>

<section anchor="sec-introduction">
      <name>Introduction</name>
      <t>ML-KEM is an IND-CCA2-secure key-encapsulation mechanism (KEM) standardized in <xref target="FIPS203"/> by the US NIST PQC Project <xref target="NIST-PQ"/>. Prior to standardization, the algorithm was known as Kyber.  ML-KEM and Kyber are not compatible.</t>
      <t>Native support for Key Encapsulation Mechanisms (KEMs) was added to CMS in <xref target="RFC9629"/>, which 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 in CMS 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.</t>
        <t>Like all KEM algorithms, ML-KEM provides three functions: KeyGen(), Encapsulate(), and Decapsulate().</t>
        <dl>
          <dt>KeyGen() -&gt; (pk, sk):</dt>
          <dd>
            <t>Generate the public key (pk) and a private key (sk).</t>
          </dd>
          <dt>Encapsulate(pk) -&gt; (ct, ss):</dt>
          <dd>
            <t>Given the recipient's public key (pk), produce a ciphertext (ct) to be passed to the recipient and a shared secret (ss) for use by the originator.</t>
          </dd>
          <dt>Decapsulate(sk, ct) -&gt; ss:</dt>
          <dd>
            <t>Given the private key (sk) and the ciphertext (ct), produce the shared secret (ss) for the recipient.</t>
          </dd>
        </dl>
        <t>The KEM functions defined above correspond to the following functions in <xref target="FIPS203"/>:</t>
        <aside>
          <t>RFC EDITOR: Please replace the following references to <xref target="I-D.ietf-lamps-kyber-certificates"/> with a reference to the published RFC.</t>
        </aside>
        <dl>
          <dt>KeyGen():</dt>
          <dd>
            <t><xref target="FIPS203"/> specifies two formats for an ML-KEM private key: a 64-octet seed (d,z) and an (expanded) private key, dk, which is referred to as the decapsulation key. <tt>ML-KEM.KeyGen()</tt> from section 7.1 of <xref target="FIPS203"/> generates the public key (ek) and dk. <tt>ML-KEM.KeyGen_internal(d,z)</tt> from section 6.1 of <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():</dt>
          <dd>
            <t><tt>ML-KEM.Encaps(ek)</tt> from section 7.2 of <xref target="FIPS203"/>.</t>
          </dd>
          <dt>Decapsulate():</dt>
          <dd>
            <t><tt>ML-KEM.Decaps(dk,c)</tt> from section 7.3 of <xref target="FIPS203"/>. <tt>ML-KEM.KeyGen_internal(d,z)</tt> may have been used previously to expand the private key if it was encoded as a seed. 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 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 responder <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 <bcp14>MUST</bcp14> have the following values:</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.</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="sec-using-components">
        <name>Underlying Components</name>
        <t>When ML-KEM is employed in CMS, the security levels of the different underlying components used within the KEMRecipientInfo structure <bcp14>SHOULD</bcp14> be consistent.</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 which is independently generated by the sender and receiver.</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 <bcp14>MUST</bcp14> 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="FIPS180"/>. 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 <bcp14>MUST</bcp14> be absent when this algorithm identifier is used to specify the KDF for ML-KEM in KemRecipientInfo.</t>
        </section>
        <section anchor="components-for-ml-kem-in-cms">
          <name>Components for ML-KEM in CMS</name>
          <t>A compliant implementation <bcp14>MUST</bcp14> support HKDF with SHA-256, using the id-alg-hkdf-with-sha256 KDF object identifier, as the KemRecipientInfo KDF for all ML-KEM parameter sets. Note that the KDF used to process the KEMRecipientInfo structure <bcp14>MAY</bcp14> be different from the KDF used in the ML-KEM algorithm.</t>
          <t>For ML-KEM-512, an implementation <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"/>.</t>
          <t>For ML-KEM-768 and ML-KEM-1024, an implementation <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"/>.</t>
          <t>The above object identifiers are reproduced for convenience in <xref target="sec-identifiers"/>.</t>
          <t>An implementation <bcp14>MAY</bcp14> also support other key-derivation functions and other key-encryption algorithms.</t>
          <t>If underlying components other than those specified above are used, then the following requirements will satisfy the KDF and key wrapping algorithm requirements from <xref section="7" sectionFormat="of" target="RFC9629"/>:</t>
          <ul empty="true">
            <li>
              <t>ML-KEM-512 <bcp14>SHOULD</bcp14> be used with a KDF capable of outputting a key with at least 128 bits of preimage strength and with a key wrapping algorithm with a key length of at least 128 bits.</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>ML-KEM-768 <bcp14>SHOULD</bcp14> be used with a KDF capable of outputting a key with at least 192 bits of preimage strength and with a key wrapping algorithm with a key length of at least 192 bits.</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>ML-KEM-1024 <bcp14>SHOULD</bcp14> be used with a KDF capable of outputting a key with at least 256 bits of preimage strength and with a key wrapping algorithm with a key length of at least 256 bits.</t>
            </li>
          </ul>
          <!-- End of Underlying Components section -->

</section>
      </section>
      <section anchor="sec-using-certs">
        <name>Certificate Conventions</name>
        <t>The conventions specified in this section augment <xref target="RFC5280"/>.</t>
        <aside>
          <t>RFC EDITOR: Please replace the following reference to <xref target="I-D.ietf-lamps-kyber-certificates"/> with a reference to the published RFC.</t>
        </aside>
        <t>A recipient who employs the ML-KEM algorithm with a certificate <bcp14>MUST</bcp14> identify the public key in the certificate using the id-alg-ml-kem-512, id-alg-ml-kem-768, or id-alg-ml-kem-1024 object identifiers following the conventions specified in <xref target="I-D.ietf-lamps-kyber-certificates"/>.</t>
        <t>In particular, the key usage certificate extension <bcp14>MUST</bcp14> only contain keyEncipherment (<xref section="4.2.1.3" sectionFormat="of" target="RFC5280"/>).</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 the 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 CMS are defined elsewhere 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 }

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

  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>
      <aside>
        <t>RFC EDITOR: Please replace the following reference to <xref target="I-D.ietf-lamps-kyber-certificates"/> with a reference to the published RFC.</t>
      </aside>
      <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 ML-KEM-specific security considerations refer to <xref target="I-D.sfluhrer-cfrg-ml-kem-security-considerations"/>.</t>
      <t>The ML-KEM variant and the underlying components need to be selected consistent with the desired security level. Several security levels have been identified in NIST SP 800-57 Part 1 <xref target="NIST.SP.800-57pt1r5"/>. To achieve 128-bit security, ML-KEM-512 <bcp14>SHOULD</bcp14> be used, the key-derivation function <bcp14>SHOULD</bcp14> provide at least 128 bits of preimage strength, and the symmetric key-encryption algorithm <bcp14>SHOULD</bcp14> have a security strength of at least 128 bits. To achieve 192-bit security, ML-KEM-768 <bcp14>SHOULD</bcp14> be used, the key-derivation function <bcp14>SHOULD</bcp14> provide at least 192 bits of preimage strength, and the symmetric key-encryption algorithm <bcp14>SHOULD</bcp14> have a security strength of at least 192 bits. In the case of AES Key Wrap, a 256-bit key is typically used because AES-192 is not as commonly deployed. To achieve 256-bit security, ML-KEM-1024 <bcp14>SHOULD</bcp14> be used, the key-derivation function <bcp14>SHOULD</bcp14> provide at least 256 bits of preimage strength, and the symmetric key-encryption algorithm <bcp14>SHOULD</bcp14> have a security strength of at least 256 bits.</t>
      <t>Provided all inputs are well-formed, the key establishment procedure of ML-KEM will never explicitly fail. Specifically, the <tt>ML-KEM.Encaps</tt> and <tt>ML-KEM.Decaps</tt> algorithms from <xref target="FIPS203"/> will always output a value with the same data type as a shared secret key, and will never output an error or failure symbol for well-formed inputs. However, it is possible (though extremely unlikely) that the process will fail in the sense that <tt>ML-KEM.Encaps</tt> and <tt>ML-KEM.Decaps</tt> 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="FIPS203"/> and reproduced here in <xref target="tab-fail"/>.</t>
      <table anchor="tab-fail">
        <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^(-138.8)</td>
          </tr>
          <tr>
            <td align="left">ML-KEM-768</td>
            <td align="left">2^(-164.8)</td>
          </tr>
          <tr>
            <td align="left">ML-KEM-1024</td>
            <td align="left">2^(-174.8)</td>
          </tr>
        </tbody>
      </table>
      <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. 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 security of the ML-KEM algorithm depends on a quality random number generator. For further discussion on random number generation, see <xref target="RFC4086"/>.</t>
      <t>ML-KEM encapsulation and decapsulation only outputs a shared secret and ciphertext. Implementations <bcp14>SHOULD 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 <bcp14>MAY</bcp14> 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="I-D.ietf-lamps-rfc5990bis"/>, <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="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="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="16" month="April" year="2025"/>
            <abstract>
              <t>   The Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM) is a
   quantum-resistant key-encapsulation mechanism (KEM).  This document
   describes 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 described.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-kyber-certificates-10"/>
        </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="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="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="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="19" month="November" year="2024"/>
            <abstract>
              <t>   NIST standardized ML-KEM as FIPS 203 in August 2024.  This document
   discusses how to use ML-KEM - that is, what problem it solves, and
   how to use it securely.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-sfluhrer-cfrg-ml-kem-security-considerations-02"/>
        </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="RFC4086">
          <front>
            <title>Randomness Requirements for Security</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="J. Schiller" initials="J." surname="Schiller"/>
            <author fullname="S. Crocker" initials="S." surname="Crocker"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts. However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities. The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult. This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities. It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications. 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="106"/>
          <seriesInfo name="RFC" value="4086"/>
          <seriesInfo name="DOI" value="10.17487/RFC4086"/>
        </reference>
        <reference anchor="I-D.ietf-lamps-rfc5990bis">
          <front>
            <title>Use of the RSA-KEM Algorithm in the Cryptographic Message Syntax (CMS)</title>
            <author fullname="Russ Housley" initials="R." surname="Housley">
              <organization>Vigil Security, LLC</organization>
            </author>
            <author fullname="Sean Turner" initials="S." surname="Turner">
              <organization>sn3rd</organization>
            </author>
            <date day="30" month="July" year="2024"/>
            <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 XXXX.
   This document obsoletes RFC 5990.

   RFC EDITOR: Please replace XXXX with the RFC number assigned to
   draft-ietf-lamps-cms-kemri.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-rfc5990bis-10"/>
        </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 360?>

<section anchor="asn1">
      <name>ASN.1 Module</name>
      <aside>
        <t>RFC EDITOR: Please replace TBD2 with the value assigned by IANA during the publication of <xref target="I-D.ietf-lamps-kyber-certificates"/>. Also please replace <xref target="I-D.ietf-lamps-kyber-certificates"/> here and in the module with a reference to the published RFC.</t>
      </aside>
      <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-2024(TBD2) };

--
-- 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>Mapping between NIST Security Level, ML-KEM parameter set, and sizes in bytes</name>
        <thead>
          <tr>
            <th align="left">Level</th>
            <th align="left">Parameter Set</th>
            <th align="left">Encap. Key</th>
            <th align="left">Decap. Key</th>
            <th align="left">Ciphertext</th>
            <th align="left">Secret</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">1</td>
            <td align="left">ML-KEM-512</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">3</td>
            <td align="left">ML-KEM-768</td>
            <td align="left">1184</td>
            <td align="left">2400</td>
            <td align="left">1952</td>
            <td align="left">32</td>
          </tr>
          <tr>
            <td align="left">5</td>
            <td align="left">ML-KEM-1024</td>
            <td align="left">1568</td>
            <td align="left">3168</td>
            <td align="left">2592</td>
            <td align="left">32</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="ml-kem-cms-authenticated-enveloped-data-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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
dabsEyhXD2Z9FkIW2Y1kCEzt/1PPk/5px0lWpew1H8RFyprurrIVq1erRHnd
L7d4i83zmsLVVcdvefXfUxTaZZ1XRNvsPVvjHJj0HacMZE0nrPMl6iKHSfaX
0eaMtadVMULSEU7SpVNjLR5l/QszkBmxuhMTkb2V9VMOpAMxP4lZSs3nvDia
3yhwSOOiEfJgRIFWhkSuM/uG3KbjaBzWKOmC8FbqwgfqQVkbpq5jONRqXxbb
am2nYLkTnepNJvGMtSPkxEAaATHK24FWPVosYIJzaR8ywDecHd01KPzcAc8K
JBTJs4gpNyFUCkuj/uQ7TgeCb4ST8Kl5zB7+NmY5wDlu6VoDXPUEZP2MZVf0
nBYxw/pmC77tXd14F47H4oUwZZWm/u7FcgUqAC/qpZWBOyS91KrldnU3j/wL
8rKDh+9ZKO8++saCudhX2j3KpiPWV5AjtmGIl2K4pHttSffah5W26grwPLVo
QrelNs+96hXYi26fSqiVn9xV8StjdyTVhbFanbIU52QU+ZSJWDhKwzk1XPEA
thrpsWcb4d5RXmvieWqXtla6cGmfes41X3e9i+u6X0f2f3T0Z/4X/jmmWwpR
Gte63SjL9qTP6xcT9kSNqsN7hiJQ/aQfTIp+zz3xM9+PX/dEAR+6aZzsyeXU
ta33lM/8V/wAG/kxFBvAKpiBKVuW+MP5bHFx1ywKfL45S9o1ixnzb06T82mU
nQPw76FvlM1qRN8qZQuCfS99tym7Dv1WJvoRVIAH6xe7j0M6lKl14t6CwCuB
SdKgl0Z7oiirivmZnw67KcFEf9fMPbOczRSLSQkgIBgRfTKYkPn8TqqUIKya
9X+AKimRpSIKlUTyI2gIUpUJ6UbC9q0JCs1gddiflveByAlWD/1zY1AW1mvr
LQFf/38JxZgj+QDDwhKmeePG94QwLNJeO+emqugihyJaRkVFlTSgVr3RaD2X
X5ZOl0cWG80WDDda8Zdf/kIgpU+j2SAhUJ6SpY5/xJYy3y6MctkVWfaR7E5l
J0WrTodqoSMQBV93FQZ7YRoVFevKYQs1nbwCgO0Gj1V3y3o9k/Xot5u8IQg1
VacbZcieCF1WAWw3D/IfppmYqMWxe9AdRFiU0sMaMpXlVvsfZ7fL8HJX+l+O
LVoYvzO7XfW5p4sxvHeSh+S76yLFDowIwY5bJDuz3jVcTWk3rtv58O/E9Vv5
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
Rh2S1to5hrd8C4dLNWEvT/iLRLRI/9mr6/IkdP3Enr1EsBTkHSc/XN5gTe8s
57h/5Stc/CP7vnXvisZX2h1yK7V1leyPzAp8uADrQMunFqCRN7xrWc28CxxK
OqrN42TUI4XJz4Eqr83Iq8W7rqBz27fsA74wqEzb55VTIHpHazG2rFlECR/P
J1z1fK5o0yorox/W4ZcXUeNxRBd1uYiVGWH/wvGU3eBPqfhatuwXjMu7zy9X
uBH/Vy8poQZbqkjHHSoOp7wdd7BvRdVWnf9Fd2yN/rD0uYgzwIEH9pBr1Otu
49k6t/uj/mDYtx+vGp5teW6/3xhY7vi2f6s+PrVs97ZrTF9GjffF9WlrMBU7
7x213m1fS5yVRNJ0PL97O3m4a5+J0n3z/sE6zlr3Uzt4midWL3GPz1/jRf+2
OVmMunbwaFzbTyfj1+MvV+llu8MF1zftLNUez+KZ5WeycTx+SJ+ev9wdd18f
gp4oH7826qP0/Xb4kBwv5N5xx1fl8WPn7ulw/PJ62rvimos3/SkSLPfh0Xf1
Y+vp7PrsNWiN+qP47U0ZDzKt3Xp5Hyx6I2HhXmVvw/6XyDNG1lDwk77eb3PX
44l0Pz4/v7Hc7lx+mcbNQ/ny3vV6C0N8al89TM46YsO/jeeXdTl47kXT+K1/
P3ow7tvObXfmGlzv+vzs7KY7vRFvJ9nTm930tZNhdnrcuu40+vUvD0mvd/zY
9O3b8Zcr/2V4dmv3py8PsffYUO2X88zj5tm11nTm/dGxvXh+9c+OJ2+Nsfrc
qvcvhXf3Zur3XwJEEu6zfChl10n/7qURPN21kvB1mrYeGyPu9KXp9m4fHl+n
o0a9NX9pdO3OhRe6nfP6rfPl2JkEamI3bq/vm+ZN53mYTNWe7S9c9bTZvpoG
bzfc6Kl+fZvdXmXK2fjaDupZ8nj72gi9+mM4vGicS7fPWedpPp5Exlu9/3yq
XNydtDrCQssmtzeWdXPC9W+7jcexfd6/T1qnbVBD0s6th4egLU6Fm8fZeefL
zU0U3JzU1fPRQDpNu9c96VYU3vvHcfc56i64RH1yAstsPY4bb2+Xs/NX6+rt
rTmKG1nylhqt27PmbHBz2DmJ3uaPg/nZzVNDeO8twmFHv9HjljziFsJx6+J4
8Hhzt5CS+1PLfX9fOJ26lLxeBHdWUn9Kms+udngX3DfPooncfhQT4USO77PB
1ft7K1E4V+7WB1NzfFsfnIYPzltiO/33bvYc9N1sEB+/3w/PWqeNF+viqjua
+V/caZi407Nmw+87V83xzZS7uHPU9L0zSuZiexLMA7sOFjsL+aXzbnvno/pN
x3C8e+Nx0m37L/6Z3Ho3Tmfu8bj/JnZuG47MDS/qo3dppp4/tqJ4/N5pmNLI
e37Tkrkyjs/70m2oRdHhZWwL3ZH1cHg3m7Ulq2sOZi/Z21RrXnM3j+Hz1Zfe
eTvqpt5IvHFOH53Ow508ehD0y7NAG5/obje6P8m8946XycMbNTtL63XpIm7O
24dhn5s07r2TJ811BundeT9dXL1fSefzwZnvPcr199Z50rOsLxfP/oXRbo4f
DL9x8p4Iodyf2XP97TE+5u4GWfagn6a50UHkvGVyWBz9DaNFAetG0y8z28sD
jsKqqaapG4Yj6zBXCAA8TxFUV7QlS5Y1zbJF3TUkxVLFfMPcZq5eaffto+jC
EX3btLarCxRA6a4vSq4iSpYnmaYlKb7raa7uyLZteLJoKo4BSyU7uiy7ji/p
uuoJpu8ZtufahgZbwoBdRWjFsrJnKYLvaI4lmIInOYbl65on6ZJu2bLhCZoq
uaYqqqah+Z5oaIakY1HFU03NUyTR5gzVdxXVdBzdANlkXXJMF/C4oinasumI
rmrJnq25rq1qluV6rqdrquPIpuC7tu1InA9Sg6YIlkRXkQTRNkTHcX3HBoqe
L8qWL/mqJVq24xsuwEOs6guSJYiCpXmmaHK+aBq6pXqmLTpAwZV9QfdVwzJ9
SwUEnqE5jqiYJiaImik5gmMpjid4jqd4nudKnKdppunYpq7JsqQAYU+xJM9W
HUsTfd0WDFGWBUdWdNPwfB0ckAh/R5YdzxJ90edMcELxbV/WFdkCfBr+FgQR
0zRfk1xDF3RTAhc02/MdF7SxZU0FYyii1HTZ5WRLtQVHEkByzVY83xUdX5N9
V9Y121V0x3EUzXIU1zU8B6sIeKQ4pmo5vo+RrsBJhqWIpi0Iku9aoq2JumMD
elcChRwwzPd927Hxl6u4qq9ZrmGLquFIounJ0EmVE0nGQRrBlmTF1E3L0VTD
0yXbhdzZmq7LtqlBBTzZU1xBt0FVQTEEBTNEQpfTfMuQTU9XJQLDcUzLVlVL
8iXVtTUZ331V1VVT8TRAJIqeqsquQqLh6Jrgqz4HUFSImKIYsmErju5C6ETX
Mm3VJYKaEHjTsRxVchxVxcaaIJuma7u2LklgjM2ZYKsggl+CDmF1sYLp6pal
6hYEzQBNwELXEz3JMIAIphmiLroOtpTBFM3kVNk3DcURofaqCmg027IExwMh
XBm7Qt59RRF0bO5gYRVEcgXPN21dF2XVsyxONm3NNyECEB9mRCCIgiZjZ0P2
gbnuQ1V9E7w1kA9AQFRR8VXXgHhD6D2Lc3URawNXAbJpW0DH1aCBhmvJkm9A
li1BkQwP2DoWtNywMNEAaTXJM1QbuqBCuVQbKgpxc3Xoo61boI9ma5pryjak
WcJKZCE0VXYMBcLm+KJlmpLgYr4CIrpA0FYhb6qqQtQFT1VMwdQhXQbJhy6o
GpRT91RdsVzYRMmDJELaXRd2QeEM0fZ03QVzQEVsqEgAzvFl04CqgDcuM6Km
I8G2iI6ie5IiWvRRkxRT1QTOBegKtod0OTJE1LAt0zBdIGkAZ8W2YRAAlo2p
iinJCOcdHTIruaqpQ/glmG/XE2xDhj6pmquBPZ5umjZsJLQb8iDYoCr0V7Kw
HaRVV0AK1ZdtS5UU2YVBsSBurgkdUgTIkCiIHobYDnQGfJEs3REMrCU7gqT5
uiF7oiDYsDaapwuQX4lTXAvqIJPSgza65xlQNBeKAlhkXzJ8z3Xo9AQ4qhbw
8T0sJUMeQWZYd4uzNMMkbYJuSxoUw5QkQ3dcSQaXJM2SVAE2AUT3YPIgiRJY
C90BxOQcbF/k4AlUQYQFNSxZRD6sSiJ4LYou4NR0V7YhLhA2jDFUWYcPUPGr
r4hQPE0T1l1b/mrP3HPufLtN6UpgkmH2bGimqQmGBgaKmopHCn5QBZh2Uaiu
yxK7ysvXPnrH4rY73f2OnQ+ywwI6xwcPYW8kJCGCpcMmw9NIguaAApYgGFXI
8na1yvt5yKuX1z12NzSWu8BVggaqahiSZlqCpZo+5ASaBWvuqlp1FySb6WZG
+n1vO1t7P84HgIDiniKbEsyNCMchWI4kSWCC7MsIYIC9D4tquq6JUMHw1Q2G
04LF23nzfwmivLO7nkcfO5V/6OMDWNlbWCsiRPWGZZWBFRn28kU3k/f8TcBO
vmqdvZOr6IidsJ7vMkVmXaGgG2Kqoq+R/tEXTamV76QtG0fT7ayVDqiX6arS
fzg/ix/rg9fuhXU1vLJaYb/fb7bot/erum25x44lR8N+/0Kw++nLYBgdm3PB
dlrWBWe9UyWw4VhXDhR6fB81LjT9xrpUrftW+tKQgsQ3+8Npq2Glx86dc9y2
/JE1v/Ksq7Zjza0v3NQ6PF70h5fn9UTuRN3Jy/tz/7Et3fqPg1flIXCevgwu
7+5U51i5Ry7zfhI9duXzU/n5pDXsXHZPbrn4S5ZJYvAiZ6p037i8Ouy8Ol/q
i7feXb931T9WThqykQ4PXz3NeL0bvBhfLqLXS89wYtsZa63JGzc+mYbjt/nl
+bVxYj68PE2vJ5eDdH4zbjmDoD1vTBvK5ftQnwmzx+nkfCQ1Fq22PIxnWXc6
MBFwcI35XAgfdNl7Ob286zYMbWA8TcZi8/W958ZKa3I1t1oNyYykE1s9Ux4T
OMje8ftjR2+N2o/vgsbdzef9VAkQLp00Hw4FOTBbxrsXpNe95/QxsU/eGqPg
/fCkKTjR8LhjOYfBMfzibHzS1lrvX54PuS/GrHl4Iz4FWfR216g/KpLs+9Z9
17XS5/b9OH18UBevPaPzKF+qwSJ5Vi9sXTu2wdu5/ShcvHIv7mRyM02t99MX
8S4yRpLUbEzEW3F0GbTmLfW2eRN/eT15aN6/TUaHg1YdxDoRboe9l879zaMw
anJSN/HPG7dXV8eWOulIcn36nIyHczuc20rHfDMn9y+jMJsp2WAuyAMljhYv
8pnd7b0PrgzhbnTNfXm4tpPs9lG9m724l48PwuL98uq1ZfWuri/CURgIl186
vbeL8OV5LH25jrXz0fi+f2IcXwwWrnn5eMg9P3/pmnHjzmrd3Ji9QXBsv7+I
b9cX7Rt3qGlzWxzfxNLzuTK5jL2zy+dkkb0rL4OoMZHO47u30T33eJsdKsnz
/eg907pRIHUeLw/DReO12TVHzXpb0JvH02FfehudJvc357fH09ubl/rl7alz
f9x5tuYnnH13eP406p0JL43Z4haJRDjw+h0YRneS3R32nIfZ+/vYNjrWBfRi
Op/Zg7cTZXjcf+g+DEd3bpubea2XtjVX5vFsGvUmUpS9nc9ezyJHeBoOn734
bXHhiI9PZjyahI7SdOw7Mel9CR/Tt+Gi/XJzzp3c3XXPRg/OWG5dvz1dajfD
5uOXSbs3vH+zpB5ie//SiN7c4dlkXh8umtbpa+gqV476ZazOfe/0gpu+xvIw
Wdw+zfqDyZWf9N6N+DB7P314QYatHX6ZO434+P4kGr8Ep31Vbwrj43AYDQzh
2e2cvpxecU+NG0t7e9Nuppfi4dTXlOnrW3J9Y582o2fv7qLtn1+1JNWcCPqg
I77d2IPrp5dW5+rpqnN9/OB7c8692rBGb3PHallzZ/5w+lB/rFt3Ny58mW/b
z9bN5ZV6rs5v5KvEqffrrvH2dM9ZT6PmpDechM2b+WX/4XS1WNdu2ErVCtEa
Ldt6607vW/HMfp1fKtKEOz6mHRFpPl7Xg9OXRyG9vDxufxnP+n3P89/fwuO3
+zfBSm6bi+v5fHrWum78eZWdL00r8yzX+TtYmSHuhYU3iJeX7AXeNJWj1WsV
6MBT4XlRPOK3Lw+XR+P071QG295E5CXeUAQ+71rgRR7/1/CXRPfqRZ03dR0z
/yr8jXaR8LMu00rVvSWq6Yvs39KsX1x7x16LFzi6kG0YBnva9q5pnIydDIU9
4f+qsAVlrQCb/mzfe/7DB9DJvPwHjscDQ9OLyVWAVHkJ0DpMKraThPIHIFUl
Ds+rJtADjLwj87rFey6PrQWP9xReUHlX5G2Jt2QCWrN4W1yfrLu8IfGKxSMe
5HWjgtcabAYdkZjlL7twlghFhjSPYJqXwVqFF/+wvhv9+crxpkhHNuWjS+ca
lG5ft+oXx+vDZY+3gITPOxrvWLxgElqSwxsW7+u8hs86/c+yedngPWF9sqby
ksubKi+qvGnwms97IihP6Or4bPCKR6TDKgpgt9cnGyrvu3Rt3XR4B8RlJJZ1
2tx0eU/mRZcXwVXsbPLOBk1dlejt2bzm8q5N7LMs3vXof7rGqw4xyhRoA9vm
HWl9sg8BdMAmXld5zaB9AB4IauMzZrq87xBDFaDgQ6TWJ1s+L/m8avEiOO3Q
Wq5BD0EeTBAgB+CPwFsa7wF4c2NnkegECVI93rRpN6K2y8uYqfO+SmQ3fd5S
Gc7eBsHAIYcXFeg420HkNZOoJTjEQggR1sJ/QXMPhNjA2dNoNEhtm0QhWeYl
hVclIhgkU/J4WyX+ayKx3d7gsyHSBOwjK7wO3fJokAhUpYLDoLbs8B6IAoL5
65NNj5gE2tg+sVeRiXOGwmvss0AqTKtDeDSAY2zojkAbSjYhr9nED7CHBMMm
ZVNtUkUICRDBcrK7IdsWjQDYksDbMi1hK7QE9NXBbjKJByDCui7wctYng9QK
pAr/dYnDnsNrmC/wis47oLZJIoBVfLaWu0EwmDiwBIBhAkQC+4BbtkZm07FJ
NoACaG6yyd4Gzj5WtWmc4TMNcXnVJ7sCKCCzKoyQREtDQ0BXR12fLOYWiUmF
YMNYkzEECYEItBWc0yXeBkY+kVDTN6gtk3iAHpJFy8O6uaC/TZqsAXODFxS2
rpgzb8MYQG4NkltPJ35AvMFbUNG0SLZALagNHAK0FZR3NqgNoVdV0kdTIVEl
wsDIefRQdklCYaegbZBcmCp1Q8KIGDAmHiEPIKGJ4DNMCvgM2QSpLZNAcHOZ
21BJCKZrkug7KikT/qsKZN2BMHCBJQK1bFgliTTX27BhwE1h9NAZtjqzgSA+
TD5mQs+hyfgvcIZtsbUNsJk+QQGBJ/lERnbayiA5AdgOwwiK5ZKqb3gkSK9J
agQ6WR7ZQ5VRAcyDJQSTQEWIiiszpDYsCcydrxCSIDhY6jBQVZ3QAcOhIWCe
rpM3hZ2yrA2tMkmSsTnUS2amo/COAhl9QSPFBGqGTHt4GzhjBGQQ5g6WyNdo
EFwa6AcHAlRhACHkZFuZJfY2dnZ1GgRoIdIAHuIJB2Ax+rsac0ZA2KJoAlbZ
3JAwGCegihEesZEY7jLrbbHd4A9MZoDwK2zGpt0GbbA8fiC3JhEzXZ25K5so
B5WSNCIK9NGECm2Ip87UENIPSSa7oxJLwTkyRg4ZEIinCQfkknqbypaEYSuI
JASY7JFKKgE5gUkDt0EIeGxdJIYZpPPrk+FTYAwgkjAmukdYQJNcFqqAbWTD
BEY8l/lqZcvo2x6Jgcs0AYYW+MPuQ3iIToBcJpUQmSURNgygWwZD4DO2EphI
wHSCeIpILhKOBhEHfBCiB21zMqOwotB8MjoOqTSMHjQEpEKgAIUl4WEsVDZU
0kbgwjwTrB9tqBBtZZE4D5NA9lAibQHzyCpveElIMvQRMyGY2JCI55JKgQqw
avC7cCOwNjIL56wN04tpUFqNBTTgEGISgZlBXSFthWEBwQAdbCP8nrsZGVg0
DkaDAjeHxBtIQu/BHo/Nh/UD/iITe2lDMTBBMEj0gJ4jkDCCT0AB0RisEkw6
VkcQBmdKFnIDZ/gXOCSMgCsEqbAPWAJpgUhQVO8yc89IALWVNn2VRzyAJEEk
4PEQ0yFSRDSE5wSIzIwZk1Bw3twAG9uCmYATIQI5UYmkAp8BBaYBKTyRBbKe
wGiLVQKNAFWBocdCKZ3RlhSQOQMipMW2hdhuhI8WHL9KiEEAyQbIFITALWG+
yBQTX7EtmQTI/4ajs5mJIGPElgDOoBzMC0JZmumThJMD0siHIOY3sDBs6Y6Y
34CwVLKBb6do+R/qsLyLskE7f6HWB1ka0f3z9uSvnEH5x3YGJGqcAX3fnZkY
BmVN38hMtjeqvuVqb0faAse8Gzy4f/Dkt9MWCJfKVAGWSWLeBHyDHRMs0ls4
a6ieIJPGwZW6G2EOgID7guOHcEPLkN6AKr66BdDXzSebD75yJuww/OzRBslM
SVqRbDuT6+1OsCFRnzkTsTCk/miTC6asVrjwmzwoOECV5d0M0LCVQkn2jjzZ
VChLlXaxgXIrCmoUypwoYYJyCeQHDZgRnVyp5nCmJn0gZd9BYpMpRaEuVF6A
TDgGbQdfCBMMo4B0A1GEyFgPIwKjKhjbrKGEWtSOdmEAp0uxmkMuEV4BpEGK
oSqU+MF+YHnIkcI0Wt5Q/nWA176Vr1+r/KtNW51h2w0LlX9qcLsZrFW/ta69
SjeYf+VYV5vFqyvb9s7w2LKtfsOzrx5OHGt45sznF27fuPJa9Wvfvrnz3/qP
3PEg7Z60lKe640X1xdXoNOrGZ+04OXeE2fm79dZ4bggX1w/ypTvULt/nZvPZ
qNSituApW0Uq7xQo/1HzVavGR/8QSxbz/bD6GhBGkLVjqv3fPjXb/wcOwOip
67WWJxw/dCC2/+HJU9Gj+DtPnvbLlzSsDo+23sWR/tZx0X7xBoXlpc0R3VUn
bhTjC2E7CUcjkJC1bf4Le/J/AZ2xP5+hiQAA

-->

</rfc>
