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

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

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-perret-prat-lamps-cms-pq-kem-00" category="std">

  <front>
    <title abbrev="PQ KEM in CMS">Use of Post-Quantum KEM in the Cryptographic Message Syntax (CMS)</title>

    <author initials="L." surname="Perret" fullname="Ludovic Perret">
      <organization>CryptoNext Security</organization>
      <address>
        <email>ludovic.perret@cryptonext-security.com</email>
      </address>
    </author>
    <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="2021" month="November" day="22"/>

    <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 enveloped-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-introduction" title="Introduction">

<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. This mechanism could thus be used with any key encapsulation mechanism, including post-quantum KEMs or hybrid KEMs.</t>

<!-- End of introduction section -->

</section>
<section anchor="sec-terminology" title="Terminology">
<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" title="Design Rationales">

<t>In the Envelopped-Data Content section of <xref target="RFC5652"></xref>, two levels of encryptions are defined for CMS:</t>

<t><list style="symbols">
  <t>the Content-encryption process which protects the data thanks to a symmetric algorithm used with a content encryption key (CEK);</t>
  <t>the Key-encryption process which protects this CEK thanks to 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 several recipients. In this scenario the CEK must be protected individually to the different recipients.</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 againt 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 encapsulation algorithm generates a random secret and a ciphertext from which the recipient can extract the shared secret, meaning that a KEM can not be used straightforward 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="RFC5652"></xref>.</t>

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

<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 encrypts the keying data using the recipient&#39;s public key to obtain encrypted keying data. The recipient can then decrypt 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" title="Underlying Components">

<t>The KEM-TRANS mechanism has the following underlying components:</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" title="KEM">

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

<t><list style="symbols">
  <t>a key generation function <spanx style="strong">KEM.keygen</spanx> 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 <spanx style="strong">KEM.encaps</spanx> 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 <spanx style="strong">KEM.decaps</spanx> taking as input a private key and a ciphertext and returning a session key.</t>
</list></t>

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

<t>A key derivation function (KDF) is a cryptographic function that 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>

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

<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 <spanx style="strong">Wrap</spanx> taking a wrapping key and a plaintext key as input and returning a wrapped key.</t>
  <t>a decaspulation function <spanx style="strong">Unwrap</spanx> taking as input a wrapping key and a wraped key and returning the plaintext key.</t>
</list></t>

<t>In the following, <spanx style="emph">kekLen</spanx> 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>

<t>Usage and formatting of the keying data is outside the scope of this algorithm. With some key derivation functions, it is possible to include other information besides the shared secret value in the input to the function.  Also, with some symmetric key-wrapping schemes, it is possible to associate a label with the keying data. Such uses are outside the scope of this document, as they are not directly supported by CMS.</t>

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

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

<t>The KEM-TRANS mechanism described in the next sections assumes that the recipient has previously generated a key pair (<spanx style="emph">recipPrivKey</spanx> and <spanx style="emph">recipPubKey</spanx>) 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" title="Sender&#39;s Operations">

<t>Let <spanx style="emph">recipPubKey</spanx> be the recipient&#39;s public key, and let <spanx style="emph">K</spanx> be the keying data to be transported.</t>

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

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

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

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

<t>Let <spanx style="emph">recipPrivKey</spanx> be the recipient&#39;s private key and let <spanx style="emph">EK</spanx> be the encrypted keying data.</t>

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

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

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

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

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

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

<figure><artwork><![CDATA[
EDITOR'S NOTE' - TO BE DISCUSSED
3 possibilities to communicate info:
-Use KeyTransRecipientInfo (as it is done in RSA-KEM and in here)
-Define in this RFC a KemRecipientInfo as instance of OtherRecipientInfo
-Define in this RFC a new top-level KemRecipientInfo
]]></artwork></figure>

<t>When the KEM Key Transport Mechanism is employed for a recipient, the RecipientInfo alternative for that recipient MUST be KeyTransRecipientInfo.</t>

<t>The mechanism satisfies the KeyTransportRecipientInfo interface defined in RFC 5652 by taking in a Content Encryption Key (CEK) and a recipient public key, and encrypting the CEK for that recipient.</t>

<t>The algorithm-specific fields of the KeyTransRecipientInfo value MUST have the following values:</t>

<t><list style="symbols">
  <t>keyEncryptionAlgorithm.algorithm MUST be id-kem-trans (see Appendix A);</t>
  <t>keyEncryptionAlgorithm.parameters MUST be a value of type GenericHybridParameters (see Appendix A), identifying:
  <list style="symbols">
      <t>the key encapsulation mechanism (id-kem);</t>
      <t>the key derivation function (id-kdf);</t>
      <t>the symmetric wrapping mechanism (id-wrap).</t>
    </list></t>
  <t>encryptedKey MUST be the encrypted keying data output by the KEM-TRANS Mechanism, where the keying data is the content-encryption key (CEK).</t>
</list></t>

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

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

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

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

<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 <spanx style="emph">keyEncipherment</spanx></t>

<t><spanx style="emph">digitalSignature</spanx>, <spanx style="emph">nonRepudiation</spanx>, <spanx style="emph">dataEncipherment</spanx>, <spanx style="emph">keyAgreement</spanx>, <spanx style="emph">keyCertSign</spanx>, <spanx style="emph">cRLSign</spanx>, <spanx style="emph">encipherOnly</spanx> and <spanx style="emph">decipherOnly</spanx> SHOULD NOT be present.</t>

<t>A key intended to be employed only with the KEM-TRANS Mechanism 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" title="Subject Public Key Info">

<figure><artwork><![CDATA[
EDITOR'S NOTE' - TODO 
Update this section according to the future PQC-PKIX RFCs
]]></artwork></figure>

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

<figure><artwork><![CDATA[
EDITOR'S NOTE' - TODO 
Clarify that id-kem refers to the KEM algo 
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" title="SMIME Capabilities Attribute Conventions">

<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 GenericHybridParameters 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" title="Security Considerations">

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

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

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

<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" title="Acknowledgements">
<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" title="Annex A : ASN.1 Syntax">

<t>The ASN.1 syntax for identifying the KEM Key Transport Mechanism is an extension of the syntax for the &quot;generic hybrid cipher&quot; in ANS X9.44 <xref target="X9.44"></xref>.</t>

<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>

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

<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 GenericHybridParameters syntax. 
The syntax for GenericHybridParameters is as follows:</t>

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

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

<t><list style="symbols">
  <t>kem identifies the underlying key encapsulation mechanism (KEM). This can be any NIST KEM.</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 <spanx style="emph">null</spanx> if the key encaspulation mechanism outputs a shared secret <spanx style="emph">SS</spanx> of size <spanx style="emph">kekLen</spanx>.</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" title="Annex A2 : Underlying Components">

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

<t>The KEM-TRANS Mechanism can support any NIST KEM, including post-quantum KEMs.</t>

<t>The object identifier for KEM is (TBD)</t>

<figure><artwork><![CDATA[
EDITOR'S NOTE' - TODO : 
PQ-KEMs OID have to be defined
]]></artwork></figure>

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

<t>The KEM-TRANS Mechanism can support any KDF from <xref target="SP-800-56C-r2"></xref>.</t>

<t>The KDF can be bypassed if the key encaspulation mechanism outputs a shared secret <spanx style="emph">SS</spanx> of size <spanx style="emph">kekLen</spanx>. kdf is then equal to <spanx style="emph">null</spanx>.</t>

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

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

<t>The KEM-TRANS Mechanism can support any wrapping mechanism from <xref target="RFC5649"></xref>.</t>

<figure><artwork><![CDATA[
EDITOR'S NOTE' - TO BE DISCUSSED :
Should we limit the compatible wrapping modes to [RFC5649]?
]]></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;
<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:
H4sIAMpVm2EAA81cW3fcNpJ+56/Ayg+RdJodSbE9dmfnokjtpMeWJavl9czx
5OxBk5CaIzbJEKTaPRnn7H/Yf7i/ZOsCgOCl20p2HnYexi0SBKoKVV9dUEgY
hkGVVKmaiPdaifxWXOW6Ct/VMqvqlXg9vRBJJqqlEmflpqjyu1IWyyQSF0pr
eafEfJNV8pPYP7uYHwRysSjVw0RcvbMfwmMRPBH//m9hKKbnby9vphMxjZNK
05RxKW8rkcmVEmH4hyDOI/w94edhocpSwT+lrMJUrgodRisdFj+F92oVHh0F
saxg7MnRyXF4fByenNh1Ws9p4t4Lemof60pm8X/KNM/gbVXWTExSlPSXrk6O
jl4enQSyVHIi5iqqy6TaBOu7iXhzenE1D+7XEzHLKlVmQO05kh5EsprAvHEQ
RHmcZDC01qHUUZIERTIR8L8nIpIZPFVClqXciP3kVsg0FRulD0ReiqXUS7FU
pQqEqPJogi/gp87LqlS3ekJTxOpW1ikKM7fvNyt+jX8Gsq6WeTkJcMGQ/l/A
psDbN2NxRdI1D1nsb+o4f4C9bb3KS6Ce9/6t+lQ1AuDXaiWTdCJS/nTMe/an
iMZnMD7UZvw4yld9Qv4MhMD+tsj4c50mKvOfP46Gv9N3Y9SXxxNwMRaXdabX
INdli4qL5F71XhEh04zUQrxJVkml4jYRK/hsnNvP/qR4LK0N/8vyciWr5EHh
nly/Ojs5Pn5pfj47eXFkfz5/dmJ+vjj+3VP789mzY/z5l/Hzl0cTs6ox3b1Z
dstT52CsKlpmeZrfbUQoTudvx8dCZayH4rpOFXA9L1SU3CYRfwBG/53UsPHT
1jCx/930+mAkzmSWZzA27b0/g/cCjEecJ7qC53WilyruDTuHYXuGYGuDR78z
D3wddSI+nZ8hpy/HT592OT1dqTJB23lLxANVc7RfWcZmvLiqFykw81ptfMza
CJAQoc6rJJNZlOCXqgSlBRJnWQy7VILAQvpuCpgAk+jlCjYQgBGZQRO/U6V4
JaMqL5N/sOz8FX4Lj/Or8MXRUfjs+VlYnnR5vVagN0BCzGshA0BdeA4SeOBH
FwpmjjVCLb5p0z2PlmqldJesk6NdZL2dzW+CLmTf1gBNmqGexZhoRJ8kg+1G
lJqIZVUVevL113dJtawXqPBfR3KRf31fylWcr7OwvI1Onp+8ZOhNrL42pvDy
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
hS0DkayaOga+oymFx5Jw07POOQpHwrqop+OT8fH4m4Ox9fQwERPdfEsHZkpT
kwWChL8CGTfJaaPbZwouhGFVhRzl79SHxqqeQDjCZZCoJtdHR7AjPsprM9QQ
QiqIWoLJDnUt4Ug2ukO2U4qBcTsOg+DQNFfOkzsA3bpUhyNxmOXZtSrqOCHZ
4hNUwdaXVG7dnN6VSnl/oyLhTPhndP3G/lTmy0sgx1R8YuU/anrAuOuDBIkF
TT6KcDvO9QjnTrgpy8pwwJj8iWWq814QQ6bV2NJYfJ/ncedso8AehSSyX+IW
3oF3yrxKkpE0umtbjL3hM1TzqXzIk9icrSf6nlXCNpUmdFZAk9jvxUr2+mTd
eZZBfyqvslfB0cia1nz2gIJaYb0clQB7S6mZ112i6ZekOpbWRYgnYl6zanr3
MsjZmFoUvw2bzuAQw5ztEdP5pQjeFzFbh48TfisKV39RKcXVu7Pw6vXsL+iU
NQcfxhYbV7vGFjdtdD43u7VVM0xrE++k76Xbk5I5WdfTKwyyGfq23qQch2zT
h32jHu8Uy1kqS14LjwwZF0p1i07RS1PRSYtgvUxSn73+uJt+MwiLr1WjGN6+
thb4H2xxCf3q5cXsYirOZCFdNHxa2U6XvqfRq2QFE3rDQ2mHd1zPR3OZyoPp
k/Gz8YkJ4NjUaPnW6ua4zc0q9m3AR91D8+m799O3Z1PqjW59vHHv9IGBIXcM
SV5vg8guS7I+7Jih08ZO2zNZcX5brbFyLLMshwDEqkufVjztNIcHYyEo1saD
v6qs+dBRGm7o0J+VbESYkSYSOyrtQugO7ZHMI6XSog3VsLKU6C/F+yZ23SY9
UFED75bxnXknWZ9HeysS7XtLa5Bu3dk5h8yEkq3Z5NbQs3UU5YWwPJEXhpqA
zB3aEKQ0Bw3tDLXle4yQzqfXza0+Op3eKjYT/mm8Zms6XHpfZ8KF3rMGbCCy
krBsezxf57EtpFrxWbLHCyoOYyMIoonDu8XNRxrsdiRpyhDdioW9H4o4gadv
3dMPfhtGrbe7PE5gF+C9IEvBrvABPByevNcoPzt9ezpMHlig7JP2wbvxdTEf
+fiA8naKTEWOnnZDUnQ5O9cHCAaoaRgtqE+RKrgNCfvQTWSAw4Y7zMUacwu8
WHFnslw+pJ1Nb165QXhymonZ/PLr2fSMb1bTHRHvvclfftOtEu5ZxL4FRz3z
jzPyVddVHtep+kq3ImEsfnjmT1DhbpPQ9RGfr12HcAO709W+0+g+y9epiu9M
FyTvq+w8/ty5JQjokpdAGTXHYhRuD/ZYFnyfsXIdMHQ9S9yVeV1Qg/unAhyr
uU+HN+zz0t5B8ppGUrzUjGfZDS2ccNLXGC1SsTopVYod5xA3e3eE28WAQuVg
A5hy5oj+HGTTVS/spAEEUxWBBU7YHJGukjQllmA+11VB14FKvGOMkSf3cv3H
5ewKTw/x7ppougel5rt3uE1FXeo6qXrHppPfbMgfFIMX0npbUygMYvPvyiB/
bm9IxMucQmgslwR0CTDJ6JZVxbfZIAavkHFT/064J5ZA3N/8RV6W+RrA2TU+
6wRkBYy2LMuSUS3xmhKFbADLaPQKtgU3n84kIL4zcRxfWDVVH/zGTTcWe2d5
seGGpbWE3GQl7yn4oW1TUlvLIVWgOjPmA5naA1l+NLdwuzc+ukres40sU+AL
xMRYq7mnaixEZ8cmUee33o3jru/8QtmQO8RNRmIP2f37y0rs2Tte5qoTJ5V0
HwjjYbpMLj7SPz/as+v2DCbfguWG3N1x/yO++AbbNdhX2tvfFbtA10C9ZaET
Lk4b0R6DbNtN3QMiYsr6QZDl7AvS9bHU9pMmekenu+ZzkHYMBq5GTCa/Fz+L
m+/OxWdTE24NSRpfNByijLqRFgVqXv62LVLjXRmL7hZtG5/QjSeGP8vNtrHE
lLtHhUkYCrPVJtzU7Jpx8S2NaxqFXZ+wG0MnWzDmg6ksNrtCQ4zxeJXeXXXS
gQqvuTpha7yrRjf00Pnc1vIpXlw1dQzTeInAiS6cji9xcuB29+Rbm0j7E8NT
Bs2Prf+cApgti9UMVT/VXN84zOo0PRSJK8l1mkIaTtwZ3NC5JYZ7yT+UO+pE
vmiHdjM2VBbGLs0BxgaGMp/mv5KAwOTZ/gnY/mBDfFMx3dKsrrs9XY1meblk
axd3XiEd70IY0ze+D2Z/sKueMREBX4JmrGB9Jb9tkIa9tmVtoMP+V7C1XYd4
CnhtNmaxwUsfiEr/av1hq9Bcpe1o6/bKT+sIUUyCGU2AsTqdQ5GscJOQBcoz
5z+cfvPHYL6k6HCtICKBIMVlpMACVvyoaxpW74jjj22ZWyCy/62Rx8v7Mar9
SIa/wEmzUh7zmapbg7n5X143bx8ESwAA

-->

</rfc>

