<?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.6.35 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-lamps-cms-kemri-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="CMS KEMRecipientInfo">Using Key Encapsulation Mechanism (KEM) Algorithms in the Cryptographic Message Syntax (CMS)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-cms-kemri-02"/>
    <author initials="R." surname="Housley" fullname="Russ Housley">
      <organization abbrev="Vigil Security">Vigil Security, LLC</organization>
      <address>
        <postal>
          <city>Herndon, VA</city>
          <country>US</country>
        </postal>
        <email>housley@vigilsec.com</email>
      </address>
    </author>
    <author initials="J." surname="Gray" fullname="John Gray">
      <organization>Entrust</organization>
      <address>
        <postal>
          <city>Minneapolis, MN</city>
          <country>US</country>
        </postal>
        <email>john.gray@entrust.com</email>
      </address>
    </author>
    <author initials="T." surname="Okubo" fullname="Tomofumi Okubo">
      <organization abbrev="DigiCert">DigiCert, Inc.</organization>
      <address>
        <postal>
          <city>Fairfax, VA</city>
          <country>US</country>
        </postal>
        <email>tomofumi.okubo+ietf@gmail.com</email>
      </address>
    </author>
    <date year="2023" month="July" day="23"/>
    <area>Security</area>
    <workgroup>LAMPS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 76?>

<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
CMS content.</t>
    </abstract>
  </front>
  <middle>
    <?line 85?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The Cryptographic Message Syntax (CMS) enveloped-data content type
<xref target="RFC5652"/> and the CMS authenticated-enveloped-data content type
<xref target="RFC5083"/> support both key transport and key agreement algorithms to
establish the key used to encrypt the content.  In recent years,
cryptographers have be specifying Key Encapsulation Mechanism (KEM)
algorithms, including quantum-secure KEM algorithms.  This document
defines conventions for the use of KEM algorithms for the CMS
enveloped-data content type and the CMS authenticated-enveloped-data
content type.</t>
      <t>A KEM algorithm is a one-pass (store-and-forward) mechanism for
transporting random keying material to a recipient using the recipient's
public key.  The recipient's private key is needed to recover the random
keying material, which is then treated as a pairwise shared secret between
the originator and recipient.  A KEM algorithm provides three functions:</t>
      <ul spacing="normal">
        <li>KeyGen() -&gt; (pk, sk):</li>
      </ul>
      <ul empty="true">
        <li>
          <t>Generate the public key (pk) and a private key (sk).</t>
        </li>
      </ul>
      <ul spacing="normal">
        <li>Encapsulate(pk) -&gt; (ct, ss):</li>
      </ul>
      <ul empty="true">
        <li>
          <t>Given the recipient's public key (pk), produce a ciphertext (ct) to be
passed to the recipient and shared secret (ss) for the originator.</t>
        </li>
      </ul>
      <ul spacing="normal">
        <li>Decapsulate(sk, ct) -&gt; ss:</li>
      </ul>
      <ul empty="true">
        <li>
          <t>Given the private key (sk) and the ciphertext (ct), produce the
shared secret (ss) for the recipient.</t>
        </li>
      </ul>
      <t>To support a particular KEM algorithm, the CMS originator <bcp14>MUST</bcp14> implement
Encapsulate().</t>
      <t>To support a particular KEM algorithm, the CMS recipient <bcp14>MUST</bcp14> implement
KeyGen() and Decapsulate().  The recipient's public key is usually carried
in a certificate <xref target="RFC5280"/>.</t>
      <section anchor="terms">
        <name>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 BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="asn1">
        <name>ASN.1</name>
        <t>CMS values are generated using ASN.1 <xref target="X.680"/>, which uses the Basic
Encoding Rules (BER) and the Distinguished Encoding Rules (DER) <xref target="X.690"/>.</t>
      </section>
      <section anchor="cms-version-numbers">
        <name>CMS Version Numbers</name>
        <t>The major data structures include a version number as the first item in
the data structure.  The version number is intended to avoid ASN.1 decode
errors.  Some implementations do not check the version number prior to
attempting a decode, and then if a decode error occurs, the version
number is checked as part of the error handling routine.  This is a
reasonable approach; it places error processing outside of the fast path.
This approach is also forgiving when an incorrect version number is used
by the sender.</t>
        <t>Whenever the structure is updated, a higher version number will be
assigned.  However, to ensure maximum interoperability, the higher
version number is only used when the new syntax feature is employed.
That is, the lowest version number that supports the generated syntax is
used.</t>
      </section>
    </section>
    <section anchor="kem-processing-overview">
      <name>KEM Processing Overview</name>
      <t>KEM algorithms can be used with  three CMS content types: the
enveloped-data content type <xref target="RFC5652"/>, the authenticated-data
content type <xref target="RFC5652"/>, or the authenticated-enveloped-data
content type <xref target="RFC5083"/>.  For simplicity, the terminology associated
with the enveloped-data content type will be used in this overview.</t>
      <t>The originator randomly generates the content-encryption key, and then
all recipients obtain that key.  All recipients use the originator-generated
symmetric key to decrypt the CMS message.</t>
      <t>A KEM algorithm and a key-derivation function are used to securely
establish a pairwise symmetric key-encryption key, which is used to encrypt
the originator-generated content-encryption key.</t>
      <t>In advance, each recipient uses KeyGen() to create a key pair,
and then obtains a certificate <xref target="RFC5280"/> that includes the public key.</t>
      <t>The originator establishes the content-encryption key using these steps:</t>
      <ol spacing="normal" type="1"><li>The content-encryption key, called CEK, is generated at random.</li>
        <li>
          <t>For each recipient:  </t>
          <ul spacing="normal">
            <li>The recipient's public key is used with the Encapsulate() function to obtain a pairwise shared secret and the ciphertext for the recipient.</li>
            <li>The key-derivation function is used to derive a pairwise key-encryption key, called KEK, from the pairwise shared secret and other data that is sent in the clear.</li>
            <li>The KEK is used to encrypt the CEK for this recipient.</li>
          </ul>
        </li>
        <li>The CEK is used to encrypt the content for all recipients.</li>
      </ol>
      <t>The recipient obtains the content-encryption key using these steps:</t>
      <ol spacing="normal" type="1"><li>The recipient's private key and the ciphertext are used with the Decapsulate() function to obtain a pairwise shared secret.</li>
        <li>The key-derivation function is used to derive a pairwise key-encryption key, called KEK, from the pairwise shared secret and other data that is sent in the clear.</li>
        <li>The KEK is used to decrypt the content-encryption key, called CEK.</li>
        <li>The CEK is used to decrypt the content.</li>
      </ol>
    </section>
    <section anchor="kemri">
      <name>KEM Recipient Information</name>
      <t>This document defines KEMRecipientInfo for use with KEM algorithms.
As specified in Section 6.2.5 of <xref target="RFC5652"/>, recipient information for
additional key management techniques are represented in the
OtherRecipientInfo type, and they are each identified by a unique
ASN.1 object identifier.</t>
      <t>The object identifier associated with KEMRecipientInfo is:</t>
      <artwork><![CDATA[
  id-ori OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840)
    rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) 13 }

  id-ori-kem OBJECT IDENTIFIER ::= { id-ori 3 }
]]></artwork>
      <t>The KEMRecipientInfo type is:</t>
      <artwork><![CDATA[
  KEMRecipientInfo ::= SEQUENCE {
    version CMSVersion,  -- always set to 0
    rid RecipientIdentifier,
    kem KEMAlgorithmIdentifier,
    kemct OCTET STRING,
    kdf KeyDerivationAlgorithmIdentifier,
    kekLength INTEGER (1..65535),
    ukm [0] EXPLICIT UserKeyingMaterial OPTIONAL,
    wrap KeyEncryptionAlgorithmIdentifier,
    encryptedKey EncryptedKey }
]]></artwork>
      <t>The fields of the KEMRecipientInfo type have the following meanings:</t>
      <ul empty="true">
        <li>
          <t>version is the syntax version number.  The version <bcp14>MUST</bcp14> be 0.  The
CMSVersion type is described in Section 10.2.5 of <xref target="RFC5652"/>.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <t>rid specifies the recipient's certificate or key that was used by
the originator to with the Encapsulate() function.  The
RecipientIdentifier provides two alternatives for specifying the
recipient's certificate <xref target="RFC5280"/>, and thereby the recipient's public
key.  The recipient's certificate <bcp14>MUST</bcp14> contain a KEM public key.  Therefore,
a recipient X.509 version 3 certificate that contains a key usage
extension <bcp14>MUST</bcp14> assert the keyEncipherment bit.  The issuerAndSerialNumber
alternative identifies the recipient's certificate by the issuer's
distinguished name and the certificate serial number; the
subjectKeyIdentifier identifies the recipient's certificate by a key
identifier.  When an X.509 certificate is referenced, the key identifier
matches the X.509 subjectKeyIdentifier extension value.  When other
certificate formats are referenced, the documents that specify the certificate
format and their use with the CMS must include details on matching
the key identifier to the appropriate certificate field.  For recipient
processing, implementations <bcp14>MUST</bcp14> support both of these alternatives for
specifying the recipient's certificate.  For originator processing,
implementations <bcp14>MUST</bcp14> support at least one of these alternatives.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <t>kem identifies the KEM algorithm, and any associated parameters, used
by the originator.  The KEMAlgorithmIdentifier is described in <xref target="kemalg"/>.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <t>kemct is the ciphertext produced by the Encapsulate() function for
this recipient.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <t>kdf identifies the key-derivation algorithm, and any associated parameters,
used by the originator to generate the key-encryption key.  The
KeyDerivationAlgorithmIdentifier is described in Section 10.1.6 of <xref target="RFC5652"/>.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <t>kekLength is the size of the key-encryption key in octets.  This value is one
of the inputs to the key-derivation function.  The upper bound on the integer
value is provided to make it clear to implementers that support for very
large integer values is not needed.  Implementations <bcp14>MUST</bcp14> confirm that
the value provided is consistent with the key-encryption algorithm
identified in the wrap field below.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <t>ukm is optional user keying material.  When the ukm value is provided,
it is used as part of the info structure described in <xref target="kdf"/> to
provide a context input to the key-derivation function.  For example, the
ukm value could include a nonce, context information, or an identifier
for the originator.  A KEM algorithm may place requirements on the ukm
value.  Implementations that do not support the ukm field <bcp14>SHOULD</bcp14>
gracefully discontinue processing when the ukm field is present.  Note
that this requirement expands of the original purpose of the ukm
described in Section 10.2.6 of <xref target="RFC5652"/>; it is not limited to being
used with key agreement algorithms.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <t>wrap identifies a key-encryption algorithm used to encrypt the
content-encryption key.  The KeyEncryptionAlgorithmIdentifier
is described in Section 10.1.3 of <xref target="RFC5652"/>.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <t>encryptedKey is the result of encrypting the content-encryption
key or the content-authenticated-encryption key with the
key-encryption key.  EncryptedKey is an OCTET STRING.</t>
        </li>
      </ul>
    </section>
    <section anchor="kemalg">
      <name>KEM Algorithm Identifier</name>
      <t>The KEMAlgorithmIdentifier type identifies a KEM algorithm used to
establish a pairwise shared secret.  The details of establishment depend on
the KEM algorithm used.  A Key derivation algorithm is used to transform
the pairwise shared secret value into a key-encryption key.</t>
      <artwork><![CDATA[
  KEMAlgorithmIdentifier ::= AlgorithmIdentifier
]]></artwork>
    </section>
    <section anchor="kdf">
      <name>Key Derivation</name>
      <t>This section describes the conventions of using the KDF to compute the
key-encryption key for KEMRecipientInfo.  For simplicity, the
terminology used in the HKDF specification <xref target="RFC5869"/> is used here.</t>
      <t>Many KDFs internally employ a one-way hash function.  When this is
the case, the hash function that is used is indirectly indicated by
the KeyDerivationAlgorithmIdentifier.  Other KDFs internally employ an
encryption algorithm.  When this is the case, the encryption that is
used is indirectly indicated by the KeyDerivationAlgorithmIdentifier.</t>
      <t>The KDF inputs are:</t>
      <ul empty="true">
        <li>
          <t>IKM is the input key material. It is a symmetric secret input to
the KDF which may use a hash function or an encryption algorithm
to generate a pseudorandom key. The algorithm used to derive the
IKM is dependent on the algorithm identified in the
KeyDerivationAlgorithmIdentifier.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <t>L is the length of the output keying material in octets which is
identified in the kekLength of the KEMRecipientInfo.  The
value is dependent on the key-encryption algorithm that is used
which is identified in the KeyEncryptionAlgorithmIdentifier.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <t>info is contextual input to the KDF.  The DER-encoded
CMSORIforKEMOtherInfo structure is created from elements of the
KEMRecipientInfo structure.  CMSORIforKEMOtherInfo is defined as:</t>
        </li>
      </ul>
      <artwork><![CDATA[
      CMSORIforKEMOtherInfo ::= SEQUENCE {
        wrap KeyEncryptionAlgorithmIdentifier,
        kekLength INTEGER (1..65535),
        ukm [0] EXPLICIT UserKeyingMaterial OPTIONAL }
]]></artwork>
      <t>The CMSORIforKEMOtherInfo structure contains:</t>
      <ul empty="true">
        <li>
          <t>wrap identifies a key-encryption algorithm; the output of the
key-derivation function will be used as a key for this algorithm.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <t>kekLength is the length of the key-encryption key in octets; the
output of the key-derivation function will be exactly this size.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <t>ukm is optional user keying material; see <xref target="kemri"/>.</t>
        </li>
      </ul>
      <t>The KDF output is:</t>
      <ul empty="true">
        <li>
          <t>OKM is the output keying material with the exact length of L octets.
The OKM is the key-encryption key that is used to encrypt the
content-encryption key or the content-authenticated-encryption key.</t>
        </li>
      </ul>
      <t>An acceptable KDF <bcp14>MUST</bcp14> accept an IKM, L, and info as inputs.  An acceptable
KDF <bcp14>MAY</bcp14> also accept salt, which is carried as a parameter to the
KeyDerivationAlgorithmIdentifier if present.  All of these
inputs <bcp14>MUST</bcp14> influence the output of the KDF.</t>
    </section>
    <section anchor="asn1-mod">
      <name>ASN.1 Modules</name>
      <t>This section provides two ASN.1 modules <xref target="X.680"/>.  The first ASN.1
module is an extension to the AlgorithmInformation-2009 module in
<xref target="RFC5912"/>, and it defines the KEM-ALGORITHM CLASS.  The second
ASN.1 module defines the structures needed to use KEM Algorithms
with CMS <xref target="RFC5652"/>.</t>
      <t>The first ASN.1 module uses EXPLICIT tagging, and the second
ASN.1 module uses IMPLICIT tagging.</t>
      <t>Both ASN.1 modules follow the conventions established in
<xref target="RFC5911"/>, <xref target="RFC5912"/>, and <xref target="RFC6268"/>.</t>
      <section anchor="asn1-mod-1">
        <name>KEMAlgorithmInformation-2023 ASN.1 Module</name>
        <sourcecode type="asn.1" markers="true"><![CDATA[
  KEMAlgorithmInformation-2023
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
          id-mod-kemAlgorithmInformation-2023(TBD3) }

  DEFINITIONS EXPLICIT TAGS ::=
  BEGIN
  -- EXPORTS ALL;
  IMPORTS
    ParamOptions, PUBLIC-KEY, SMIME-CAPS
    FROM AlgorithmInformation-2009
      { 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
  --
  --  Describes the basic properties of a KEM algorithm
  --
  -- Suggested prefixes for KEM algorithm objects is: kema-
  --
  --  &id - contains the OID identifying the KEM algorithm
  --  &Value - if present, contains a type definition for the kemct;
  --               if absent, implies that no ASN.1 encoding is
  --               performed on the kemct value
  --  &Params - if present, contains the type for the algorithm
  --               parameters; if absent, implies no parameters
  --  &paramPresence - parameter presence requirement
  --  &PublicKeySet - specifies which public keys are used with
  --               this algorithm
  --  &Ukm - if absent, type for user keying material
  --  &ukmPresence - specifies the requirements to define the UKM
  --               field
  --  &smimeCaps - contains the object describing how the S/MIME
  --               capabilities are presented.
  --
  -- Example:
  -- kema-kem-rsa KEM-ALGORITHM ::= {
  --    IDENTIFIER id-kem-rsa
  --    PARAMS TYPE RsaKemParameters ARE optional
  --    PUBLIC-KEYS { pk-rsa | pk-rsa-kem }
  --    UKM ARE optional
  --    SMIME-CAPS { TYPE GenericHybridParameters
  --        IDENTIFIED BY id-rsa-kem }
  -- }

  KEM-ALGORITHM ::= CLASS {
    &id             OBJECT IDENTIFIER UNIQUE,
    &Value          OPTIONAL,
    &Params         OPTIONAL,
    &paramPresence  ParamOptions DEFAULT absent,
    &PublicKeySet   PUBLIC-KEY OPTIONAL,
    &Ukm            OPTIONAL,
    &ukmPresence    ParamOptions DEFAULT absent,
    &smimeCaps      SMIME-CAPS OPTIONAL
  } WITH SYNTAX {
    IDENTIFIER &id
    [VALUE &Value]
    [PARAMS [TYPE &Params] ARE &paramPresence]
    [PUBLIC-KEYS &PublicKeySet]
    [UKM [TYPE &Ukm] ARE &ukmPresence]
    [SMIME-CAPS &smimeCaps]
  }

  END
]]></sourcecode>
      </section>
      <section anchor="asn1-mod-2">
        <name>CMS-KEMRecipientInfo ASN.1 Module</name>
        <t>RFC Editor: Please replace "[THISRFC]" with the the number assigned
to this document.</t>
        <sourcecode type="asn.1" markers="true"><![CDATA[
  CMS-KEMRecipientInfo-2023
    { iso(1) member-body(2) us(840) rsadsi(113549)
      pkcs(1) pkcs-9(9) smime(16) modules(0)
      id-mod-cms-kemri-2023(TBD2) }

  DEFINITIONS IMPLICIT TAGS ::=
  BEGIN
  -- EXPORTS ALL;
  IMPORTS
    OTHER-RECIPIENT, CMSVersion, RecipientIdentifier,
    EncryptedKey, KeyDerivationAlgorithmIdentifier,
    KeyEncryptionAlgorithmIdentifier, UserKeyingMaterial
      FROM CryptographicMessageSyntax-2010  -- [RFC6268]
        { iso(1) member-body(2) us(840) rsadsi(113549)
          pkcs(1) pkcs-9(9) smime(16) modules(0)
          id-mod-cms-2009(58) }
    KEM-ALGORITHM
      FROM KEMAlgorithmInformation-2023  -- [THISRFC]
        { iso(1) identified-organization(3) dod(6) internet(1)
          security(5) mechanisms(5) pkix(7) id-mod(0)
          id-mod-kemAlgorithmInformation-2023(TBD3) }
    AlgorithmIdentifier{}
      FROM AlgorithmInformation-2009  -- [RFC5912]
        { iso(1) identified-organization(3) dod(6) internet(1)
          security(5) mechanisms(5) pkix(7) id-mod(0)
          id-mod-algorithmInformation-02(58) } ;

  --
  -- OtherRecipientInfo Types (ori-)
  --

  SupportedOtherRecipInfo OTHER-RECIPIENT ::= { ori-KEM, ... }

  ori-KEM OTHER-RECIPIENT ::= {
    KEMRecipientInfo IDENTIFIED BY id-ori-kem }

  id-ori OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840)
    rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) 13 }

  id-ori-kem OBJECT IDENTIFIER ::= { id-ori TBD1 }

  --
  -- KEMRecipientInfo
  --

  KEMRecipientInfo ::= SEQUENCE {
    version CMSVersion,  -- always set to 0
    rid RecipientIdentifier,
    kem KEMAlgorithmIdentifier,
    kemct OCTET STRING,
    kdf KeyDerivationAlgorithmIdentifier,
    kekLength INTEGER (1..65535),
    ukm [0] EXPLICIT UserKeyingMaterial OPTIONAL,
    wrap KeyEncryptionAlgorithmIdentifier,
    encryptedKey EncryptedKey }

  KEMAlgSet KEM-ALGORITHM ::= { ... }

  KEMAlgorithmIdentifier ::=
    AlgorithmIdentifier{ KEM-ALGORITHM, {KEMAlgSet} }

  --
  -- CMSORIforKEMOtherInfo
  --

  CMSORIforKEMOtherInfo ::= SEQUENCE {
    wrap KeyEncryptionAlgorithmIdentifier,
    kekLength INTEGER (1..65535),
    ukm [0] EXPLICIT UserKeyingMaterial OPTIONAL }

  END
]]></sourcecode>
      </section>
    </section>
    <section anchor="sec-cons">
      <name>Security Considerations</name>
      <t>The Security Considerations of <xref target="RFC5652"/> are applicable to this document.</t>
      <t>To be appropriate for use with this specification, the KEM algorithm <bcp14>MUST</bcp14>
explicitly be designed to be secure when the public key is used many
times.  For example, a KEM algorithm with a single-use public key is not
appropriate because the public key is expected to be carried in a
long-lived certificate <xref target="RFC5280"/> and used over and over.  Thus, KEM
algorithms that offer indistinguishability under adaptive chosen ciphertext
attack (IND-CCA2) security are appropriate.  A common design pattern for
obtaining IND-CCA2 security with public key reuse is to apply the
Fujisaki-Okamoto (FO) transform <xref target="FO"/> or a variant of the FO
transform <xref target="HHK"/>.</t>
      <t>The choice of the KDF <bcp14>SHOULD</bcp14> be made based on the security
level provided by the KEM. The KDF <bcp14>SHOULD</bcp14> at least have the
security level of the KEM.</t>
      <t>The choice of the key-encryption algorithm and the size of the
key-encryption key <bcp14>SHOULD</bcp14> be made based on the security level
provided by the KEM. The key-encryption algorithm and the
key-encryption key <bcp14>SHOULD</bcp14> at least have the security level of
the KEM.</t>
      <t>KEM algorithms do not provide data origin authentication; therefore, when
a KEM algorithm is used with the authenticated-data content type, the
contents are delivered with integrity from an unknown source.</t>
      <t>Implementations <bcp14>MUST</bcp14> protect the KEM private key, the key-encryption key, the
content-encryption key and the content-authenticated-encryption.  Compromise
of the KEM private key may result in the disclosure of all contents protected
with that KEM private key.  However, compromise of the key-encryption key, the
content-encryption key, or the content-authenticated-encryption may result in
disclosure of the encrypted content of a single message.</t>
      <t>The KEM produces the IKM input value for the KDF.  This IKM value <bcp14>MUST NOT</bcp14>
be reused for any other purpose.  Likewise, any random value used to by
the KEM algorithm to produce the shared secret or its encapsulation <bcp14>MUST NOT</bcp14>
be reused for any other purpose.  That is, the originator <bcp14>MUST</bcp14> generate a
fresh KEM shared secret for each recipient in the KEMRecipientInfo
structure, including any random value used by the KEM algorithm to produce
the KEM shared secret.  In addition, the originator <bcp14>MUST</bcp14> discard the KEM shared
secret, including any random value used by the KEM algorithm to produce
the KEM shared secret, after constructing the entry in the KEMRecipientInfo
structure for the corresponding recipient.  Similarly, the recipient <bcp14>MUST</bcp14>
discard the KEM shared secret, including any random value used by the KEM
algorithm to produce the KEM shared secret, after constructing the
key-encryption key from the KEMRecipientInfo structure.</t>
      <t>Implementations <bcp14>MUST</bcp14> randomly generate content-encryption keys,
content-authenticated-encryption keys, and message-authentication keys.
Also, the generation of KEM key pairs relies on random numbers.  The use
of inadequate pseudo-random number generators (PRNGs) to generate these
keys can result in little or no security.  An attacker may find it much
easier to reproduce the PRNG environment that produced the keys,
searching the resulting small set of possibilities, rather than brute
force searching the whole key space.  The generation of quality random
numbers is difficult.  <xref target="RFC4086"/> offers important guidance in this area.</t>
      <t>If the cipher and key sizes used for the key-encryption and the
content-encryption algorithms are different, the effective security is
determined by the weaker of the two algorithms.  If, for example, the
content is encrypted with AES-CBC using a 128-bit content-encryption key,
and the content-encryption key is wrapped with AES-KEYWRAP using a 256-bit
key-encryption key, then at most 128 bits of protection is provided.</t>
      <t>If the cipher and key sizes used for the key-encryption and the
content-authenticated-encryption algorithms are different, the effective
security is determined by the weaker of the two algorithms.  If, for example,
the content is encrypted with AES-GCM using a 128-bit
content-authenticated-encryption key, and the content-authenticated-encryption
key is wrapped with AES-KEYWRAP using a 192-bit key-encryption key, then at
most 128 bits of protection is provided.</t>
      <t>If the cipher and key sizes used for the key-encryption and the
message-authentication algorithms are different, the effective security is
determined by the weaker of the two algorithms.  If, for example, the
content is authenticated with HMAC-SHA256 using a 512-bit
message-authentication key, and the message-authentication key is wrapped
with AES-KEYWRAP using a 256-bit key-encryption key, then at most 256 bits of
protection is provided.</t>
      <t>Implementers should be aware that cryptographic algorithms, including KEM
algorithms, become weaker with time.  As new cryptoanalysis techniques are
developed and computing capabilities advance, the work factor to break a
particular cryptographic algorithm will be reduced.  As a result,
cryptographic algorithm implementations should be modular, allowing new
algorithms to be readily inserted.  That is, implementers should be prepared
for the set of supported algorithms to change over time.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>For KEMRecipientInfo in <xref target="kemri"/>, IANA is requested to assign an
object identifier (OID) to replace TBD1.  The OID for KEMRecipientInfo should
be allocated in the "SMI Security for S/MIME Other Recipient Info
Identifiers" registry (1.2.840.113549.1.9.16.13), and the Description
for the new OID should be set to "id-ori-kem".</t>
      <t>For the ASN.1 Module in <xref target="asn1-mod-1"/>, IANA is requested to assign an
object identifier (OID) for the module identifier to replace TBD3. The
OID for the module should be allocated in the "SMI Security for PKIX
Module Identifier" registry (1.3.6.1.5.5.7.0), and the Description
for the new OID should be set to "id-mod-kemAlgorithmInformation-2023".</t>
      <t>For the ASN.1 Module in <xref target="asn1-mod-2"/>, IANA is requested to assign an
object identifier (OID) for the module identifier to replace TBD2.  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), and the Description
for the new OID should be set to "id-mod-cms-kemri-2023".</t>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Our thanks to Burt Kaliski for his guidance and design review.</t>
      <t>Our thanks to Carl Wallace for his careful review of the ASN.1 modules.</t>
      <t>Our thanks to 
Hendrik Brockhaus,
Jonathan Hammell,
Mike Jenkins, and
David von Oheimb
for their careful review and thoughtful comments.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <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="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="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="X.680" 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="X.690" target="https://www.itu.int/rec/T-REC-X.680">
          <front>
            <title>Information technology -- ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.690"/>
          <seriesInfo name="ISO/IEC" value="8825-1:2021"/>
        </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>
      </references>
      <references>
        <name>Informative References</name>
        <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="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="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="RFC5912">
          <front>
            <title>New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)</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 Public Key Infrastructure using X.509 (PKIX) certificate 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="5912"/>
          <seriesInfo name="DOI" value="10.17487/RFC5912"/>
        </reference>
        <reference anchor="RFC6268">
          <front>
            <title>Additional New ASN.1 Modules for the Cryptographic Message Syntax (CMS) and the Public Key Infrastructure Using X.509 (PKIX)</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="July" year="2011"/>
            <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 some auxiliary ASN.1 modules to conform to the 2008 version of ASN.1; the 1988 ASN.1 modules remain the normative version. 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="6268"/>
          <seriesInfo name="DOI" value="10.17487/RFC6268"/>
        </reference>
        <reference anchor="FO">
          <front>
            <title>Secure Integration of Asymmetric and Symmetric Encryption Schemes</title>
            <author fullname="Eiichiro Fujisaki" initials="E." surname="Fujisaki">
              <organization/>
            </author>
            <author fullname="Tatsuaki Okamoto" initials="T." surname="Okamoto">
              <organization/>
            </author>
            <date month="December" year="2011"/>
          </front>
          <seriesInfo name="Journal of Cryptology" value="vol. 26, no. 1, pp. 80-101"/>
          <seriesInfo name="DOI" value="10.1007/s00145-011-9114-1"/>
        </reference>
        <reference anchor="HHK">
          <front>
            <title>A Modular Analysis of the Fujisaki-Okamoto Transformation</title>
            <author fullname="Dennis Hofheinz" initials="D." surname="Hofheinz">
              <organization/>
            </author>
            <author fullname="Kathrin Hövelmanns" initials="K." surname="Hövelmanns">
              <organization/>
            </author>
            <author fullname="Eike Kiltz" initials="E." surname="Kiltz">
              <organization/>
            </author>
            <date year="2017"/>
          </front>
          <seriesInfo name="Theory of Cryptography" value="pp. 341-371"/>
          <seriesInfo name="DOI" value="10.1007/978-3-319-70500-2_12"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
SaOoy41lAAA=

-->

</rfc>
