<?xml version="1.0" encoding="us-ascii"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.26 (Ruby 3.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC5280 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml">
<!ENTITY RFC5652 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5652.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8551 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8551.xml">
<!ENTITY RFC2986 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2986.xml">
<!ENTITY RFC5649 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5649.xml">
<!ENTITY RFC5869 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5869.xml">
<!ENTITY RFC5990 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5990.xml">
<!ENTITY RFC8411 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8411.xml">
<!ENTITY RFC9180 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9180.xml">
]>


<rfc ipr="trust200902" docName="draft-ietf-lamps-cms-kyber-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="KYBER in CMS">Use of KYBER in the Cryptographic Message Syntax (CMS)</title>

    <author initials="J." surname="Prat" fullname="Julien Prat">
      <organization>CryptoNext Security</organization>
      <address>
        <email>julien.prat@cryptonext-security.com</email>
      </address>
    </author>
    <author initials="M." surname="Ounsworth" fullname="Mike Ounsworth">
      <organization>Entrust Limited</organization>
      <address>
        <email>mike.ounsworth@entrust.com</email>
      </address>
    </author>

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

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

    <abstract>


<t>This document describes the conventions for using a Key Encapsulation Mechanism algorithm (KEM) within the Cryptographic Message Syntax (CMS). The CMS specifies the envelopped-data content type, which consists of an encrypted content and encrypted content-encryption keys for one or more recipients. The mechanism proposed here can rely on either post-quantum KEMs, hybrid KEMs or classical KEMs.</t>

<!-- End of Abstract -->



    </abstract>



  </front>

  <middle>


<section anchor="sec-version-changes"><name>Changes in this version</name>

<t>The following changes were made in this version:</t>

<t><list style="symbols">
  <t>Use of KEMRecipientInfo to communicate algorithm info;</t>
  <t>Editorial changes.</t>
</list></t>

</section>
<section anchor="sec-introduction"><name>Introduction</name>

<t>In recent years, there has been a substantial amount of research on quantum computers -- machines that exploit quantum mechanical phenomena to solve mathematical problems that are difficult or intractable for conventional computers. If large-scale quantum computers are ever built, they will be able to break many of the public-key cryptosystems currently in use. This would seriously compromise the confidentiality and integrity of digital communications on the Internet and elsewhere. Under such a threat model, the current key encapsulation mechanisms would be vulnerable.</t>

<t>Post-quantum key encapsulation mechanisms (PQ-KEM) are being developed in order to provide secure key establishment against an adversary with access to a quantum computer.</t>

<t>As the National Institute of Standards and Technology (NIST) is still in the process of selecting the new post-quantum cryptographic algorithms that are secure against both quantum and classical computers, the purpose of this document is to propose a generic &quot;algorithm-agnostic&quot; solution to protect in confidentiality the CMS envelopped-data content against the quantum threat : the KEM-TRANS mechanism.</t>

<t>Although this mechanism could thus be used with any key encapsulation mechanism, including post-quantum KEMs or hybrid KEMs.</t>

<t>This RFC nonetheless specifically specifies the case where the algorithm PQ-KEM algorithm is Kyber.</t>

<!-- End of introduction section -->

</section>
<section anchor="sec-terminology"><name>Terminology</name>
<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/>  <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>

<t>The following terms are used in this document:</t>

<t>BER:
          Basic Encoding Rules (BER) as defined in <xref target="X.690"></xref>.</t>

<t>DER:
          Distinguished Encoding Rules as defined in <xref target="X.690"></xref>.</t>

<!-- End of terminology section -->

</section>
<section anchor="sec-design-rationales"><name>Design Rationales</name>

<t>The Cryptographic Message Syntax (CMS) <xref target="RFC5652"></xref> defines two levels of encryptions in the Envelopped-Data Content section:</t>

<t><list style="symbols">
  <t>the Content-encryption process which protects the data using a symmetric algorithm used with a content encryption key (CEK);</t>
  <t>the Key-encryption process which protects this CEK using a key transport mechanism.</t>
</list></t>

<t>One of the typical use case of the CMS Envelopped-Data Content is to randomly generate a CEK, encrypt the data with a symmetric algorithm using this CEK and individually send the CEK to one or more recipients protected by asymmetric cryptography in a RecipientInfo object.</t>

<t>To achieve this scenario with KEM primitives, it is necessary to define a new key transport mechanism that will fulfil the following requirements:</t>

<t><list style="symbols">
  <t>the Key Transport Mechanism SHALL be secure against quantum computers.</t>
  <t>the Key Transport Mechanism SHALL take the Content-Encryption Key (CEK) as input.</t>
</list></t>

<t>According to NIST, a KEM generates a random secret and a ciphertext from which the recipient can extract the shared secret, meaning that a KEM can not be used straightforwardly as a key transport mechanism in the CMS &quot;multi-recipients&quot; context. The KEM-TRANS mechanism defined in this document aims to turn a KEM into a key transport scheme allowing the sender to distribute a randomly generated key to several recipients.
The KEM-TRANS Key transport mechanism described in the following section fulfils the requirements listed above and is an adaptation of the RSA-KEM algorithm previously specified in <xref target="RFC5990"></xref>. The solution is also aligned with the hybrid public key encyption scheme described in <xref target="RFC9180"/>.</t>

</section>
<section anchor="sec-kem-key-transport-mechanism"><name>KEM Key Transport Mechanism (KEM-TRANS)</name>

<t>The KEM Key Transport Mechanism (KEM-TRANS) is a one-pass (store-and-forward) mechanism for transporting keying data to a recipient.</t>

<t>With this type of mechanism, a sender cryptographically encapsulates the keying data using the recipient&#39;s public key to obtain encrypted keying data. The recipient can then decapsulate the encrypted keying data using his private key to recover the plaintext keying data.</t>

<!-- End of kem-key-transport-mechanism section -->

<section anchor="sec-underlying-components"><name>Underlying Components</name>

<t>The KEM-TRANS requires use of the following underlying components, which are provided to KEM-TRANS as algorithm parameters.</t>

<t><list style="symbols">
  <t>KEM, a Key Encapsulation Mechanism;</t>
  <t>KDF, a Key Derivation Function, which derives keying data of a specified length from a shared secret value;</t>
  <t>WRAP, a symmetric key-wrapping scheme, which encrypts keying Data using a key-encrypting key (KEK).</t>
</list></t>

<section anchor="kem"><name>KEM</name>

<t>A KEM is a cryptographic algorithm consisting of three functions :</t>

<t><list style="symbols">
  <t>a key generation function <strong>KEM.keygen</strong> taking as input a security level and returning a key pair (private key and the associated public key) for this security level.</t>
  <t>an encapsulation function <strong>KEM.encaps</strong> taking a public key as input and returning a random session key and a ciphertext that is an encapsulation of the session key.</t>
  <t>a decaspulation function <strong>KEM.decaps</strong> taking as input a private key and a ciphertext and returning a session key.</t>
</list></t>

</section>
<section anchor="kdf"><name>KDF</name>

<t>A key derivation function (KDF) is a cryptographic function that deterministically derives one or more secret keys from a secret value using a pseudorandom function. KDFs can be used to stretch keys into longer keys or to obtain keys of a required format.</t>

<t>If the session key obtained from the KEM algorithm is long enough to fit into the WRAP algorithm, then the KDF could be equal to the identity function.</t>

</section>
<section anchor="wrap"><name>WRAP</name>

<t>A wrapping algorithm is a symmetric algorithm protecting data in confidentiality and integrity. It is especially designed to transport key material. the WRAP algorithm consists of two functions :</t>

<t><list style="symbols">
  <t>a wrapping function <strong>Wrap</strong> taking a wrapping key and a plaintext key as input and returning a wrapped key.</t>
  <t>a decaspulation function <strong>Unwrap</strong> taking as input a wrapping key and a wraped key and returning the plaintext key.</t>
</list></t>

<t>In the following, <em>kekLen</em> denotes the length in bytes of the wrapping key for the underlying symmetric key-wrapping scheme.</t>

<t>In this scheme, the length of the keying data to be transported MUST be among the lengths supported by the underlying symmetric key-wrapping scheme.</t>

<!-- End of underlying-components section -->

</section>
</section>
<section anchor="sec-key-generation-and-distribution"><name>Recipient&#39;s Key Generation and Distribution</name>

<t>The KEM-TRANS described in the next sections assumes that the recipient has previously generated a key pair (<em>recipPrivKey</em> and <em>recipPubKey</em>) and has distributed this public key to the sender.</t>

<t>The protocols and mechanisms by which the key pair is securely generated and the public key is securely distributed are out of the scope of this document.</t>

<!-- End of key-generation-and-distribution section -->

</section>
<section anchor="sec-sender-operations"><name>Sender&#39;s Operations</name>

<t>This process assumes that the following algorithm parameters have been selected:</t>

<t><list style="symbols">
  <t><em>KEM</em>: a key encapsulation mechanism, as defined above.</t>
  <t><em>KDF</em>: a key derivation function, as defined above.</t>
  <t><em>Wrap</em>: a symmetric key-wrapping algorithm, as defined above.</t>
  <t><em>kekLen</em>: the length in bits of the key required for the Wrap algorithm.</t>
</list></t>

<t>This process assumes that the following input data has been provided:</t>

<t><list style="symbols">
  <t><em>recipPubKey</em>: the recipient&#39;s public key.</t>
  <t><em>K</em>: the keying data to be transported, assumed to be a length that is compatible with the chosen Wrap algorithm.</t>
</list></t>

<t>This process outputs:</t>

<t><list style="symbols">
  <t><em>EK</em>: the encrypted keying data, from which the recipient will be able to retrieve <em>K</em>.</t>
</list></t>

<t>The sender performs the following operations:</t>

<t><list style="numbers">
  <t>Generate a shared secret <em>SS</em> and the associated ciphertext <em>CT</em> using the KEM encaspulation function and the recipient&#39;s public key <em>recipPubKey</em>:  <vspace blankLines='1'/>
    <ul empty="true"><li>
      <t>(SS, CT) = KEM.encaps(recipPubKey)</t>
    </li></ul>
  </t>
  <t>Derive a key-encrypting key <em>KEK</em> of length <em>kekLen</em> bytes from the shared secret <em>SS</em> using the underlying key derivation function:  <vspace blankLines='1'/>
    <ul empty="true"><li>
      <t>KEK = KDF(SS, kekLen)</t>
    </li></ul>
  </t>
  <t>Wrap the keying data <em>K</em> with the key-encrypting key <em>KEK</em> using the underlying key-wrapping scheme to obtain wrapped keying data <em>WK</em> of length <em>wrappedKekLen</em>:  <vspace blankLines='1'/>
    <ul empty="true"><li>
      <t>WK = Wrap(KEK, K)</t>
    </li></ul>
  </t>
  <t>Concatenate the wrapped keying data <em>WK</em> of length <em>wrappedKekLen</em> and the ciphertext <em>CT</em> to obtain the encrypted keying data <em>EK</em>:  <vspace blankLines='1'/>
    <ul empty="true"><li>
      <t>EK = (WK || CT)</t>
    </li></ul>
  </t>
  <t>Output the encrypted keying data <em>EK</em>.</t>
</list></t>

<!-- End of sender-operations section -->

</section>
<section anchor="sec-recipient-operations"><name>Recipient&#39;s Operations</name>

<t>This process assumes that the following algorithm parameters have been communicated from the sender:</t>

<t><list style="symbols">
  <t><em>KEM</em>: a key encapsulation mechanism, as defined above.</t>
  <t><em>KDF</em>: a key derivation function, as defined above.</t>
  <t><em>Wrap</em>: a symmetric key-wrapping algorithm, as defined above.</t>
  <t><em>kekLen</em>: the length in bits of the key required for the Wrap algorithm.</t>
</list></t>

<t>This process assumes that the following input data has been provided:</t>

<t><list style="symbols">
  <t><em>recipPrivKey</em>: the recipient&#39;s private key.</t>
  <t><em>EK</em>: the encrypted keying data.</t>
</list></t>

<t>This process outputs:</t>

<t><list style="symbols">
  <t><em>K</em>: the keying data to be transported.</t>
</list></t>

<t>The recipient performs the following operations:</t>

<t><list style="numbers">
  <t>Separate the encrypted keying data <em>EK</em> into wrapped keying data <em>WK</em> of length <em>wrappedKekLen</em> and a ciphertext <em>CT</em> :  <vspace blankLines='1'/>
    <ul empty="true"><li>
      <t>(WK || CT) = EK</t>
    </li></ul>
  </t>
  <t>Decapsulate the ciphertext <em>CT</em> using the KEM decaspulation function and the recipient&#39;s private key to retrieve the shared secret <em>SS</em>:  <vspace blankLines='1'/>
    <ul empty="true"><li>
      <t>SS = KEM.decaps(recipPrivKey, CT)</t>
    </li></ul>
  <vspace blankLines='1'/>
If the decapsulation operation outputs an error, output &quot;decryption error&quot;, and stop.</t>
  <t>Derive a key-encrypting key <em>KEK</em> of length <em>kekLen</em> bytes from the shared secret <em>SS</em> using the underlying key derivation function:  <vspace blankLines='1'/>
    <ul empty="true"><li>
      <t>KEK = KDF(SS, kekLen)</t>
    </li></ul>
  </t>
  <t>Unwrap the wrapped keying data <em>WK</em> with the key-encrypting key <em>KEK</em> using the underlying key-wrapping scheme to recover the keying data <em>K</em>:  <vspace blankLines='1'/>
    <ul empty="true"><li>
      <t>K = Unwrap(KEK, WK)</t>
    </li></ul>
  <vspace blankLines='1'/>
If the unwrapping operation outputs an error, output &quot;decryption error&quot;, and stop.</t>
  <t>Output the keying data <em>K</em>.</t>
</list></t>

<!-- End of recipient-operations section -->

</section>
</section>
<section anchor="sec-use-in-cms"><name>Use in CMS</name>

<t>The KEM Key Transport Mechanism MAY be employed for one or more recipients in the CMS envelopped-data content type (Section 6 of <xref target="RFC5652"></xref>), where the keying data <em>K</em> processed by the mechanism is the CMS content-encryption key (<em>CEK</em>).</t>

<section anchor="sec-recipientInfo-conventions"><name>RecipientInfo Conventions</name>

<t>When the KEM Key Transport Mechanism is employed for a recipient, the RecipientInfo alternative for that recipient MUST be KEMRecipientInfo as defined in draft-ietf-lamps-cms-kemri.</t>

<!-- End of recipientInfo-conventions section -->

</section>
<section anchor="sec-certificate-conventions"><name>Certificate Conventions</name>

<t>The conventions specified in this section augment <xref target="RFC5280"></xref>.</t>

<section anchor="sec-key-usage-extension"><name>Key Usage Extension</name>

<t>The intended application for the key MAY be indicated in the key usage certificate extension (see <xref target="RFC5280"></xref>, Section 4.2.1.3). If the keyUsage extension is present in a certificate that conveys a public key with the id-kem object identifier as discussed above, then the key usage extension MUST contain only the value <em>keyEncipherment</em></t>

<t><em>digitalSignature</em>, <em>nonRepudiation</em>, <em>dataEncipherment</em>, <em>keyAgreement</em>, <em>keyCertSign</em>, <em>cRLSign</em>, <em>encipherOnly</em> and <em>decipherOnly</em> SHOULD NOT be present.</t>

<t>A key intended to be employed only with the KEM-TRANS SHOULD NOT also be employed for data encryption. Good cryptographic practice employs a given 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>

<!-- End of key-usage-extension section -->

</section>
<section anchor="sec-subject-public-key-info"><name>Subject Public Key Info</name>

<figure><artwork><![CDATA[
EDITOR'S NOTE' - TODO 
Update this section according to the future evolution of draft-ietf-lamps-kyber-certificates
]]></artwork></figure>

<t>If the recipient wishes only to employ the KEM-TRANS with a given public key, the recipient MUST identify the public key in the certificate using the <em>id-kem</em> object identifier.</t>

<figure><artwork><![CDATA[
EDITOR'S NOTE' - TODO 
Clarify that id-kem refers to the KEM algo (kyber512, kyber768 or kyber1024)
while KEM-TRANS refers to the KEM Transport mechanism
]]></artwork></figure>

<!-- End of subject-public-key-info section -->

<!-- End of certificate-conventions section -->

</section>
</section>
<section anchor="sec-smime-capabilities-attribute-conventions"><name>SMIME Capabilities Attribute Conventions</name>

<t><xref target="RFC8551"></xref>, Section 2.5.2 defines the SMIMECapabilities signed attribute (defined as a SEQUENCE of SMIMECapability SEQUENCEs) to be used to specify a partial list of algorithms that the software announcing the SMIMECapabilities can support.  When constructing a signedData object, compliant software MAY include the SMIMECapabilities signed attribute announcing that it supports the KEM Key Transport Mechanism.</t>

<t>The SMIMECapability SEQUENCE representing the KEM Key Transport Mechanism MUST include the id-kem-trans object identifier in the capabilityID field and MUST include a GenericKemTransParameters value in the parameters field identifying the components with which the mechanism is to be employed.</t>

<t>The DER encoding of a SMIMECapability SEQUENCE is the same as the DER encoding of an AlgorithmIdentifier. Example DER encodings for typical sets of components are given in Appendix A.</t>

<!-- End of smime-capabilities-attribute-conventions section -->

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

</section>
</section>
<section anchor="sec-security-considerations"><name>Security Considerations</name>

<figure><artwork><![CDATA[
EDITOR'S NOTE' - TODO
section to be completed
]]></artwork></figure>

<!-- End of security-considerations section -->

</section>
<section anchor="sec-iana-considerations"><name>IANA Considerations</name>

<t>Within the CMS, algorithms are identified by object identifiers (OIDs).  With one exception, all of the OIDs used in this document were assigned in other IETF documents, in ISO/IEC standards documents, by the National Institute of Standards and Technology (NIST).
The two exceptions are the ASN.1 module&#39;s identifier and id-kem-transport that are both assigned in this document.</t>

<!-- End of iana-considerations section -->

</section>
<section anchor="sec-acknowledgements"><name>Acknowledgements</name>
<t>This document incorporates contributions and comments from a large group of experts. The Editors would especially like to acknowledge the expertise and tireless dedication of the following people, who attended many long meetings and generated millions of bytes of electronic mail and VOIP traffic over the past year in pursuit of this document:</t>

<figure><artwork><![CDATA[
EDITOR'S NOTE' - TODO
section to be completed
]]></artwork></figure>

<t>We are grateful to all, including any contributors who may have
been inadvertently omitted from this list.</t>

<t>This document borrows text from similar documents, including those referenced below. Thanks go to the authors of those documents. &quot;Copying always makes things easier and less error prone&quot; - <xref target="RFC8411"></xref>.</t>

<!-- End of acknowledgements section -->

</section>
<section anchor="sec-asn1"><name>Annex A : ASN.1 Syntax</name>

<t>The syntax for the scheme is given in Appendix A.1.</t>

<t>The syntax for selected underlying components including those mentioned above is given in Appendix A.2.</t>

<t>The following object identifier prefixes are used in the definitions below:</t>

<figure><artwork><![CDATA[
  nistAlgorithm OID ::= {
     joint-iso-itu-t(2) country(16) us(840) organization(1)
     gov(101) csor(3) nistAlgorithm(4)
  }

  smimeAlgorithm OID ::= { iso(1) member-body(2)
     us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3)
  }
]]></artwork></figure>

<section anchor="annex-a1-kem-trans-key-transport-mechanism"><name>Annex A1 : KEM-TRANS Key Transport Mechanism</name>

<t>The object identifier for the KEM Key Transport Mechanism is id-kem-trans, which is defined in this document as:</t>

<figure><artwork><![CDATA[
id-kem-trans OID ::= { TBD }
]]></artwork></figure>

<t>When id-kem-trans is used in an AlgorithmIdentifier, the parameters MUST employ the GenericKemTransParameters syntax. 
The syntax for GenericKemTransParameters is as follows:</t>

<figure><artwork><![CDATA[
GenericKemTransParameters ::= {
    kem  KeyEncapsulationMechanism,
    kdf  KeyDerivationFunction,
    wrap KeyWrappingMechanism 
}
]]></artwork></figure>

<t>The fields of type GenericKemTransParameters have the following meanings:</t>

<t><list style="symbols">
  <t>kem identifies the underlying key encapsulation mechanism (KEM). This can be Kyber.</t>
  <t>kdf identifies the underlying key derivation function (KDF). This can be any KDF from <xref target="SP-800-56C-r2"></xref>.
kdf can be equal to <em>null</em> if the key encaspulation mechanism outputs a shared secret <em>SS</em> of size <em>kekLen</em>.</t>
  <t>wrap identifies the underlying key wrapping mechanism (WRAP). This can be any wrapping mechanism from <xref target="RFC5649"></xref>.</t>
</list></t>

</section>
<section anchor="annex-a2-underlying-components"><name>Annex A2 : Underlying Components</name>

<section anchor="key-encapsulation-mechanisms"><name>Key Encapsulation Mechanisms</name>

<t>KEM-TRANS can support any NIST KEM, including the post-quantum KEM Kyber.
This RFC only specifies the use of Kyber.</t>

<t>The object identifier for KEM depends on the security level (128 bits, 192 bits or 256 bits)</t>

<figure><artwork><![CDATA[
  id-kyber512 OID ::= { nistAlgorithm TBD }
  id-kyber768 OID ::= { nistAlgorithm TBD }
  id-kyber1024 OID ::= { nistAlgorithm TBD }
]]></artwork></figure>

<t>These object identifiers have no associated parameters.</t>

<figure><artwork><![CDATA[
  kyber512 ALGORITHM ::= { OID id-kyber512 }
  kyber768 ALGORITHM ::= { OID id-kyber768 }
  kyber1024 ALGORITHM ::= { OID id-kyber1024 }
]]></artwork></figure>

</section>
<section anchor="key-derivation-functions"><name>Key Derivation Functions</name>

<t>KEM-TRANS can support any KDF from <xref target="RFC5869"></xref>.
This RFC only specifies the use of HKDF.
The KDF can be bypassed if the key encaspulation mechanism outputs a shared secret <em>SS</em> of size <em>kekLen</em>. kdf is then equal to <em>null</em>.</t>

<t>The object identifier for KDF depends on the security level (128 bits, 192 bits or 256 bits)</t>

<figure><artwork><![CDATA[
  id-alg-hkdf-with-sha256 OID ::= { 
           smimeAlgorithm id-alg-hkdf-with-sha256(28) 
      }

  id-alg-hkdf-with-sha384 OID ::= { 
           smimeAlgorithm id-alg-hkdf-with-sha384(29) 
      }

  id-alg-hkdf-with-sha512 OID ::= { 
           smimeAlgorithm id-alg-hkdf-with-sha512(30) 
      }
]]></artwork></figure>

<figure><artwork><![CDATA[
EDITOR'S NOTE' - TO BE DISCUSSED :
Is there a RFC defining KDF with SHA3?
Should we extend the compatible KDFs to [SP-800-56C-r2]?
]]></artwork></figure>

</section>
<section anchor="key-wrapping-schemes"><name>Key Wrapping Schemes</name>

<t>KEM-TRANS can support any wrapping mechanism from <xref target="RFC5649"></xref>.
This RFC only specifies the use of aes256-Wrap.</t>

<t>The object identifiers for the AES Key Wrap depend on the size of the key-encrypting key.
There are three object identifiers (see <xref target="RFC5649"></xref>):</t>

<figure><artwork><![CDATA[
  id-aes128-Wrap OID ::= { nistAlgorithm aes(1) aes128-Wrap(5) }
  id-aes192-Wrap OID ::= { nistAlgorithm aes(1) aes192-Wrap(25) }
  id-aes256-Wrap OID ::= { nistAlgorithm aes(1) aes256-Wrap(45) }
]]></artwork></figure>

<t>These object identifiers have no associated parameters.</t>

<figure><artwork><![CDATA[
  aes128-Wrap ALGORITHM ::= { OID id-aes128-Wrap }
  aes192-Wrap ALGORITHM ::= { OID id-aes192-Wrap }
  aes256-Wrap ALGORITHM ::= { OID id-aes256-Wrap }
]]></artwork></figure>

</section>
<section anchor="appendix-a-examples"><name>Appendix A : Examples</name>

<figure><artwork><![CDATA[
EDITOR'S NOTE' - TODO
section to be completed
]]></artwork></figure>

</section>
</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>

&RFC2119;
&RFC5280;
&RFC5652;
&RFC8174;
&RFC8551;
<reference anchor="X.690" >
  <front>
    <title>Information technology - ASN.1 encoding Rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
    <author >
      <organization>ASC</organization>
    </author>
    <date year="2007"/>
  </front>
</reference>
<reference anchor="X9.44" >
  <front>
    <title>American National Standard X9.44: Public Key Cryptography for the Financial Services Industry -- Key Establishment Using Integer Factorization Cryptography</title>
    <author >
      <organization>ASC</organization>
    </author>
    <date year="2007"/>
  </front>
</reference>
<reference anchor="SP-800-56C-r2" >
  <front>
    <title>Recommendation for Key-Derivation Methods in Key-Establishment Schemes</title>
    <author >
      <organization>NIST</organization>
    </author>
    <date year="2020"/>
  </front>
</reference>


    </references>

    <references title='Informative References'>

&RFC2986;
&RFC5649;
&RFC5869;
&RFC5990;
&RFC8411;
&RFC9180;
<reference anchor="SP-800-108" >
  <front>
    <title>Recommendation for Key Derivation Using Pseudorandom Functions</title>
    <author >
      <organization>NIST</organization>
    </author>
    <date year="2009"/>
  </front>
</reference>


    </references>



  </back>

<!-- ##markdown-source:
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
RLuAMt2DAETXP9WXVhT+Bwd87wT6UQAA

-->

</rfc>

