<?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.25 (Ruby 2.7.0) -->


<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

<!ENTITY RFC1421 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.1421.xml">
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2986 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2986.xml">
<!ENTITY RFC4210 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4210.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 RFC5912 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5912.xml">
<!ENTITY RFC5914 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5914.xml">
<!ENTITY RFC5958 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5958.xml">
<!ENTITY RFC7468 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7468.xml">
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8411 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8411.xml">
<!ENTITY I-D.draft-ounsworth-pq-composite-keys-01 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ounsworth-pq-composite-keys-01.xml">
<!ENTITY I-D.draft-perret-prat-lamps-cms-pq-kem-00 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-perret-prat-lamps-cms-pq-kem-00.xml">
<!ENTITY RFC3279 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3279.xml">
<!ENTITY RFC5990 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5990.xml">
<!ENTITY I-D.draft-ounsworth-pq-composite-sigs-07 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ounsworth-pq-composite-sigs-07.xml">
<!ENTITY I-D.draft-ietf-tls-hybrid-design-04 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-tls-hybrid-design-04.xml">
<!ENTITY I-D.draft-becker-guthrie-noncomposite-hybrid-auth-00 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-becker-guthrie-noncomposite-hybrid-auth-00.xml">
]>

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

<rfc ipr="trust200902" docName="draft-ounsworth-pq-composite-kem-00" category="std" >
  <front>
    <title abbrev="PQ Composite Keys">Composite KEM For Use In Internet PKI</title>

    <author initials="M." surname="Ounsworth" fullname="Mike Ounsworth">
      <organization abbrev="Entrust">Entrust Limited</organization>
      <address>
        <postal>
          <street>2500 Solandt Road -- Suite 100</street>
          <city>Ottawa, Ontario</city>
          <code>K2K 3G5</code>
          <country>Canada</country>
        </postal>
        <email>mike.ounsworth@entrust.com</email>
      </address>
    </author>
    <author initials="J." surname="Gray" fullname="John Gray">
      <organization abbrev="Entrust">Entrust Limited</organization>
      <address>
        <email>john.gray@entrust.com</email>
      </address>
    </author>

    <date year="2022" month="July" day="11"/>

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

    <abstract>


<t>The migration to post-quantum cryptography is unique in the history of modern digital cryptography in that neither the old outgoing nor the new incoming algorithms are fully trusted to protect data for the required data lifetimes. The outgoing algorithms, such as RSA and elliptic curve, may fall to quantum cryptanalysis, while the incoming post-quantum algorithms face uncertainty about both the underlying mathematics as well as hardware and software implementations that have not had sufficient maturing time to rule out classical cryptanalytic attacks and implementation bugs.</t>

<t>Cautious Implementers may wish to layer cryptographic algorithms such that an attacker would need to break all of them in order to compromise the data being protected. For digital signatures, this is referred to as &quot;dual&quot;, and for encryption key establishment this as referred to as &quot;hybrid&quot;. This document, and its companions, defines a specific instantiation of the dual and hybrid paradigm called &quot;composite&quot; where multiple cryptographic algorithms are combined to form a single key, signature, or key encapsulation mechanism (KEM) such that they can be treated as a single atomic object at the protocol level.</t>

<t>EDNOTE: the terms &quot;dual&quot; and &quot;hybrid&quot; are currently in flux. We anticipate an Informational draft to normalize terminology, and will update this draft accordingly.</t>

<t>This document defines a Composite key encapsulation mechanism (KEM)
procedure, for use with Composite keys which consist of combinations 
of Encryption or KEM algorithms for each composite component<vspace />
algorithm. This document also introduces the idea of assigning an Object Identifier (OID) to a shared secret combiner so that stronger combiners can be implemented in the future without needing to re-issue this specification.</t>

<t>This document is intended to be coupled with the composite keys
structure define in <xref target="I-D.ounsworth-pq-composite-keys"/> and the CMS KEM-TRANS mechanism in <xref target="I-D.perret-prat-lamps-cms-pq-kem"/>.</t>

<!-- End of Abstract -->



    </abstract>



  </front>

  <middle>


<section anchor="sec-intro" title="Introduction">

<t>During the transition to post-quantum cryptography, there will be uncertainty as to the strength of cryptographic algorithms; we will no longer fully trust traditional cryptography such as RSA, Diffie-Hellman, DSA and their elliptic curve variants, while we may also not fully trust their post-quantum replacements until they have had sufficient scrutiny and time to discover and fix implementation bugs. Unlike previous cryptographic algorithm migrations, the choice of when to migrate and which algorithms to migrate to, is not so clear. Even after the migration period, it may be advantageous for an entity&#39;s cryptographic identity to be composed of multiple public-key algorithms.</t>

<t>The deployment of composite public keys and composite encryption using post-quantum algorithms will face two challenges</t>

<t><list style="symbols">
  <t>Algorithm strength uncertainty: During the transition period, some post-quantum signature and encryption algorithms will not be fully trusted, while also the trust in legacy public key algorithms will start to erode.  A relying party may learn some time after deployment that a public key algorithm has become untrustworthy, but in the interim, they may not know which algorithm an adversary has compromised.</t>
  <t>Migration: During the transition period, systems will require mechanisms that allow for staged migrations from fully classical to fully post-quantum-aware cryptography.</t>
</list></t>

<t>This document provides a mechanism to address algorithm strength uncertainty by building on <xref target="I-D.ounsworth-pq-composite-keys"/> by providing the format and process for combining multiple cryptographic algorithms into a single key encapsulation operation. Backwards compatibility is not directly covered in this document, but is the subject of <xref target="sec-backwards-compat"/>.</t>

<t>This document is intended for general applicability anywhere that key establishment or enveloped content encryption is used within PKIX or CMS structures.</t>

<!-- End of Introduction 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>ALGORITHM:
          An information object class for identifying the type of
            cryptographic key being encapsulated.</t>

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

<t>CLIENT:
          Any software that is making use of a key at runtime.
          This includes a signer, verifier, encrypter, decrypter.</t>

<t>COMBINER:
          A combiner specifies how multiple shared secrets
          are combined into a single shared secret.
          It is expected that combiners will need to evolve 
          with discovery of cryptanalytic attacks, so this
          document takes the approach of assigning
          Object Identifiers (OIDs) to combiners so that
          stronger combiners can be implemented in the future.</t>

<t>COMPONENT ALGORITHM:
          A single basic algorithm which is contained within a
            composite algorithm.</t>

<t>COMPOSITE ALGORITHM:
          An algorithm which is a sequence of two or more component
            algorithms.</t>

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

<t>KEM:
        A key encapsulation mechanism as defined in <xref target="sec-kems"/>.</t>

<t>POST-QUANTUM ALGORITHM:
          Any cryptographic algorithm which is believed to be resistant
          to classical and quantum cryptanalysis, such as the algorithms being considered for standardization by NIST.</t>

<t>PUBLIC / PRIVATE KEY:
          The public and private portion of an asymmetric cryptographic
            key, making no assumptions about which algorithm.</t>

<t>SHARED SECRET:
        A value established between two communicating parties for use as cryptographic key material, but which cannot be learned by an active or 
        passive adversary. This document is concerned with shared secrets established via public key cryptagraphic operations.</t>

</section>
</section>
<section anchor="composite-kem-structures" title="Composite KEM Structures">

<section anchor="sec-kems" title="Key Encapsulation Mechanisms (KEMs)">

<t>We borrow here the definition of a key encapsulation mechanism (KEM) from <xref target="I-D.ietf-tls-hybrid-design"/>, in which a KEM consists of three algorithms:</t>

<t><list style="symbols">
  <t>KeyGen() -&gt; (pk, sk): A probabilistic key generation algorithm,
which generates a public key pk and a secret key sk.</t>
  <t>Encaps(pk) -&gt; (ct, ss): A probabilistic encapsulation algorithm,
which takes as input a public key pk and outputs a ciphertext ct
and shared secret ss.</t>
  <t>Decaps(sk, ct) -&gt; ss: A decapsulation algorithm, which takes as
input a secret key sk and ciphertext ct and outputs a shared
secret ss, or in some cases a distinguished error value.</t>
</list></t>

<t>This document is not concerned with the KeyGen() algorithm of a KEM, but it is included above for completeness.</t>

<t>The KEM interface defined above differs from both traditional key transport mechanism (for example for use with KeyTransRecipientInfo defined in <xref target="RFC5652"/>), and key agreement (for example for use with KeyAgreeRecipientInfo defined in <xref target="RFC5652"/>).</t>

<t>The KEM interface was chosen as the interface for a composite key exchange because it allows for arbitrary combinations of component algorithm types since both key transport and key agreement mechanisms can be promoted into KEMs in the following ways:</t>

<t>A key transport mechanism can be transformed into a KEM.Encaps(pk) by generating a random shared secret ss and performing KeyTrans.Encrypt(pk, ss) -&gt; ct; and into a KEM.Decaps(sk, ct) by KeyTrans.Decrypt(sk, ct) -&gt; ss. This follows the pattern of RSA-KEM <xref target="RFC5990"></xref>.</t>

<t>A key agreement mechanism can be transformed into a KEM.Encaps(pk) by generating an ephemeral key pair (pk_e, sk_e), and performing KeyAgree(pk, sk_e) -&gt; (ss, pk_e); and into a KEM.Decaps(sk, ct) by completing the key agreement as KeyAgree(pk_e, sk) -&gt; ss.</t>

<t>A composite KEM allows two or more underlying key transport, key agreement, or KEM algorithms to be combined into a single cryptographic operations by performing each operation, transformed to a KEM as outline above, and using a specified combiner function to combine the two or more component shared secrets into a single shared secret.</t>

<t>The main security property for KEMs is indistinguishability under
adaptive chosen ciphertext attack (IND-CCA2), which means that shared
secret values should be indistinguishable from random strings even
given the ability to have other arbitrary ciphertexts decapsulated.</t>

<t>EDNOTE: it would be really nice for security proofs if definition of KEM included that the bits of the shared secret output need to be uniformly distributed (ie IND-CCA), because for example it would then be safe to XOR or truncate them. While the NIST PQC candidates all seem to do this, we could not find a definition of &quot;KEM&quot; that includes it as a requirement.</t>

<t>A weaker security notion is indistinguishability under chosen
plaintext attack (IND-CPA), which means that the shared secret values
should be indistinguishable from random strings given a copy of the
public key.  IND-CPA roughly corresponds to security against a
passive attacker, and sometimes corresponds to one-time key exchange.</t>

<t>The composite KEM mechanisms meets these security properties if and only if the component primitives meet them.</t>

<t>TODO: needs more formal analysis that the methods of transforming KeyTrans and KeyAgree meet this.</t>

<t>EDNOTE:  Discussed use of ASN.1 to combine the shared secrets. ASN.1 is nice because it embeds the length values for
us. Decided instead to run each component shared secret through the supplied KDF which will normalize all the lengths.</t>

</section>
<section anchor="composite-keys" title="Composite Keys">

<t>A composite key is a single key object that performs an atomic cryptographic operation as
defined in <xref target="I-D.ounsworth-pq-composite-keys"/>.</t>

<section anchor="key-usage-bits" title="Key Usage Bits">

<t>When using composite KEM keys in a structure which defines a key usage (such as in an 
X509Certificate as defined in RFC 5280), the following key usage MUST be used.</t>

<t>keyEncipherment</t>

<t>Additional key usages SHOULD not be used.   The main intent for this keyEncipherment is to
encapsulate (encrypt) another key.  This is the main purpose of a KEM algorithm, and
composite-KEM does not deviate from this intent.</t>

<t>EDNOTE:  The main argument for using keyEncipherment verses keyAgreement is that multiple 
parties are required to contribute to a key agreement verses a single party in keyEncipherment.</t>

<t>EDNOTE:  It is recognized that KEMS will be added into other PKIX and X509 standards and LAMPS needs to make sure they all make the same choice about the key usage of a KEM key.</t>

</section>
</section>
<section anchor="compositeciphertextvalue" title="CompositeCiphertextValue">

<t>The compositeCipherTextValue is a concatenation of the ciphertexts of the
underlying component algorithms.  It is represented in ASN.1 as follows:</t>

<figure><artwork><![CDATA[
CompositeCiphertextValue ::= SEQUENCE SIZE (2..MAX) OF BIT STRING
]]></artwork></figure>

</section>
<section anchor="encoding-rules" title="Encoding Rules">

<t>Many protocol specifications will require that composite KEM data structures be represented by an octet string or bit string.</t>

<t>When an octet string is required, the DER encoding of the composite data structure SHALL be used directly.</t>

<t>EDNOTE: will this definition include an ASN.1 tag and length byte inside the OCTET STRING object? If so, that&#39;s probably an extra unnecessary layer.</t>

<t>When a bit string is required, the octets of the DER encoded composite data structure SHALL be used as the bits of the bit string, with the most significant bit of the first octet becoming the first bit, and so on, ending with the least significant bit of the last octet becoming the last bit of the bit string.</t>

<t>In the interests of simplicity and avoiding compatibility issues, implementations that parse these structures MAY accept both BER and DER.</t>

</section>
</section>
<section anchor="kem-algorithm-identifiers" title="KEM Algorithm Identifiers">

<t>The following algorithm Identifiers and their associated parameters are used with composite KEM.</t>

<section anchor="id-alg-composite-kem" title="id-alg-composite-kem">

<t>The id-alg-composite-kem object identifier is used for identifying a
   generic composite KEM algorithm. This allows arbitrary combinations 
   of component key transport, key agreement and KEM algorithms without 
   needing the combination to be pre-registered or standardized.</t>

<figure><artwork><![CDATA[
id-alg-composite-kem OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) 
  entrust(114027) Algorithm(80) Composite(4) KEM (5) }
]]></artwork></figure>

<t>EDNOTE: this is a temporary OID for the purposes of prototyping.  We
   are requesting IANA to assign a permanent OID, see Section 6.</t>

<t>Which yields an information object:</t>

<t>TODO - LAMPS needs to define a KEM-ALGORITHM  -  extension to RFC 5912 - Bring to IETF. We just made up the prefix &quot;kema&quot; (for &quot;KEM algorithm&quot;) is that the right prefix?</t>

<figure><artwork><![CDATA[
kema-CompositeKEM KEM-ALGORITHM ::= {
    IDENTIFIER id-alg-composite-kem
    VALUE CompositeCiphertextValue
    PARAMS composite-kem-params  
    PUBLIC-KEYS { pk-Composite }
    SMIME-CAPS { IDENTIFIED BY id-alg-composite } }
}
]]></artwork></figure>

<t>For Composite KEM, we define a composite KEM Algorithm ID as:</t>

<t>The following algorithm parameters MUST be included:</t>

<figure><artwork><![CDATA[
composite-kem-params  ::=  SEQUENCE {
    combiner     AlgorithmIdentifier
}
]]></artwork></figure>

<t>EDNOTE: this ASN.1 could be simplified to <spanx style="verb">composite-kem-params ::= AlgorithmIdentifier</spanx> to save a couple bytes on the wire, but we&#39;re presenting it this way for now for readability.</t>

<t>EDNOTE: does the (generic) params need to also carry a list of AlgorithmIdentifiers that were used in the encryption? With signatures we need this to prevent the verifier from coming up with false validity by using the wrong verification algorithm(s). With encryption I think it&#39;s less important because either your private key works or it doesn&#39;t, no harm done by trying to decrypt with the wrong alg.</t>

<t>If no, or a NULL, combiner is specified, then {#sect-null-combiner} applies.</t>

<t>See Ednote below for a discussion on some possible combiner modes</t>

</section>
<section anchor="other-explicit-algorithms" title="Other Explicit Algorithms">

<t>This variant provides a rigid way of specifying supported combinations of algorithms.</t>

<t>The motivation for this variant is to make it easier to reference and enforce specific combinations of algorithms. The authors envision this being useful for client-server negotiated protocols, protocol designers who wish to place constraints on allowable algorithm combinations in the protocol specification, as well as audited environments that wish to prove that only certain combinations will be supported by clients.</t>

<t>Explicit algorithms must define a new signature algorithm which consists of:</t>

<t><list style="symbols">
  <t>A new algorithm identifier OID for the explicit algorithm.</t>
  <t>The algorithm identifier OID and PUBLIC-KEY type of each component algorithm.</t>
  <t>Algorithm parameters either declared ABSENT, or defined with a type and encoding.</t>
</list></t>

<!-- See {{appdx-creatingExplicitCombinations}} for guidance on creating and registering OIDs for specific explicit combinations. -->

<t>TODO: lay out the details.</t>

</section>
</section>
<section anchor="sect-combiners" title="Combiner Algorithm Identifiers">

<t>This section defines concrete shared secret combiners that may be used with composite KEM.</t>

<t>~~~ BEGIN EDNOTE ~~~</t>

<t>EDNOTE: We need to add a KDF-based combiner here.
Suggestions are:</t>

<t>Option 0)</t>

<t><spanx style="verb">SS = SS1 || SS2 || .. || SSn</spanx>
with fixed length KEM algs.</t>

<t>Option 1)</t>

<t><spanx style="verb">SS = KDF( SS1 || SS2 || .. || SSn )</spanx>
with fixed length KEM algs.</t>

<t>Option 1b)</t>

<t><spanx style="verb">SS = KDF( pad(SS1, len_kdf) || pad(SS2, len_kdf) )</spanx></t>

<t>Option 2)</t>

<t><spanx style="verb">SS = KDF( KDF(SS1) || KDF(SS2) || .. || KDF(SSn) )</spanx></t>

<t>Option 2b)</t>

<t><spanx style="verb">SS = KDF(SS1) XOR KDF(SS2) XOR .. XOR KDF(SSn)</spanx></t>

<t>Option 3)</t>

<t>The combiner suggested in <xref target="Aviram2022"></xref>.</t>

<t>At present we are opting for Option 2.</t>

<t>QUESTION: Should the choice of combiner be assigned an OID and made agile? If not, then we perhaps we need a version field within the composite kem structure to allow for future agility.
Answer: for -00 of this document we have decided YES, but we can revisit this.</t>

<t>~~~ END EDNOTE ~~~</t>

<section anchor="sect-null-combiner" title="NULL">

<t>If no, or NULL, parameters are supplied, then the default combiner mode SHOULD be simple concatenation.</t>

<figure><artwork><![CDATA[
SS =  SS1 || SS2 || .. || SSn
]]></artwork></figure>

<t>This mode is often appropriate, and complies with NIST SP-56Cr2, when the protocol making use of this composite KEM will use the shared secret output to derive a cryptographic key via a KDF, making it uncessessary to use a combiner within composite KEM.</t>

<t>Security consideration: protocols that allow the NULL combiner MUST ensure either that none of the component shared secrets are directly controllable by an attacker (which allows for attacks similar to those discussed in <xref target="sec-apop-attack"/>), or that appropriate mitigations have been put into place.</t>

</section>
<section anchor="id-composite-kdf-combiner" title="id-composite-kdf-combiner">

<t>This section defines a KDF-based shared secret combiner.</t>

<figure><artwork><![CDATA[
id-composite-kdf-combiner OBJECT IDENTIFIER ::= { TBD }
]]></artwork></figure>

<t>It MUST carry parameters</t>

<figure><artwork><![CDATA[
alg-composite-kdf-combiner-params ::=  SEQUENCE {
        kdf     AlgorithmIdentifier
}
]]></artwork></figure>

<t>to specify the KDF to be used.</t>

<t>EDNOTE: this ASN.1 could be simplified to <spanx style="verb">alg-composite-kdf-combiner-params ::=  AlgorithmIdentifier</spanx> to save a couple bytes on the wire, but we&#39;re presenting it this way for now for readability.</t>

<t>The behaviour of this combiner is: <spanx style="verb">SS = KDF( KDF(SS1) || KDF(SS2) || .. || KDF(SSn) )</spanx> where <spanx style="verb">||</spanx> denotes contatenation.</t>

<t>Formally:</t>

<figure><artwork><![CDATA[
Input:
   SS1, SS2, .., SSn   Shared secrets to combine

Output:
   SS                  Combined shared secret.

1.  SS = KDF( KDF(SS1) || KDF(SS2) || .. || KDF(SSn) )
]]></artwork></figure>

<t>The intent of this combiner is to frustrate known cryptanalytic attacks by normalizing the component shared secrets to a common fixed length (dictated by the output length of the supplied KDF), as well as attacks that exploit known weaknesses in the underlying hash function since, short of a full pre-image attack, an attacker who is able to control SSi will still not be able to control KDF(SSi).</t>

<t>EDNOTE: this combiner needs cryptographic review.</t>

<t>EDNOTE: Do we need domain separation in case other protocols use the same shared secrets in the same construction? Something like <spanx style="verb">KDF( ASCII("compositeKEM") || KDF(SS1) || KDF(SS2) || .. || KDF(SSn) )</spanx> ?</t>

</section>
</section>
<section anchor="sec-encaps-proc" title="Composite Encapsulation process">

<t>Composite key encapsulations takes a CompositePublicKey as its input.  The
CompositePublicKey MUST contain composite keys (Pi .. Pn) which represent 
an algorithm which is a KEM (Key Encapsulation Method), or an algorithm that 
contains encryption or decryption primitive.  For example (RSA).</t>

<t>This operation outputs a shared-secret and cipher text.</t>

<t>COMBINER is a function used to combine multiple shared secrets as defined in <xref target="sect-combiners"/>.</t>

<t>This process employs the transformations from KeyTransport or keyAgreement to KEM as described in <xref target="sec-kems"/>.</t>

<figure><artwork><![CDATA[
Input:  
   PK1, PK2 .. PKn   Encryption public keys. See note below on 
                     composite inputs.

   A1, A2, ... An     Component keyTransport, keyAgreement, or
                      KEM algorithms. See note below on composite 
                      inputs.

   COMBINER          A combiner function.

   SIZE              The length of shared secret to generate
                    when transforming a keyTransport into a KEM.

Output:  SS, CT

1.  for i := 1 to n
       if Ai is of type KEM:
          SSi, CTi := encaps(PKi)
       
       else, if Ai is of type keyTransport:
         SSi := random_bits(SIZE)
         CTi := encrypt(SSi, PKi)

       else, if Ai is of type keyAgreement:
          PKe, SKe := keyGen()
          SSi := keyAgree(PKi, SKe)
          CTi := PKe


  2.  SS = COMBINER(SS1, SS2, .., SSn)
      CT = CT1, CT2, .., CTn
]]></artwork></figure>

<t>Note on composite inputs: the method of providing the list of component keys and algorithms is flexible and beyond the scope of this pseudo-code, for example they may be carried in CompositePublicKey structure. It is also possible to perform a composite KEM that combines ciphertexts for distinct recipient keys stored, for example, in separate X.509 certificates. Variations in the process to accommodate particular private key storage mechanisms, for example when distinct keys stored in separate software or hardware keystores, are considered to be conformant to this document so long as it produces the same output as the process sketched above.</t>

<t>Since recursive composite public keys are disallowed in [I-D.ounsworth-pq-composite-keys], no component ciphertext may itself be composite; ie the encopsulation process MUST fail if any of the public keys P1, P2, .., Pn or algorithm identifiers A1, A2, .., An are composite with the OID id-alg-composite.</t>

</section>
<section anchor="sec-decaps-proc" title="Composite Key Decapsulation">

<t>Composite key decapsulations takes a CompositePrivateKey as its input and the
sequence of Cipher texts (ct1 .. ctn) computed by the composite key 
encapsulation method.  The CompositePrivateKey MUST contain composite keys 
(Pi .. Pn) which represent an algorithm which is a KEM (Key Encapsulation Method),
or an algorithm that contains encryption or decryption primitive.  These keys 
MUST consist of the same component keys in the same order as the Composite Key 
Encapsulation process that generated them.</t>

<t>This operation outputs a shared-secret.</t>

<t>COMBINER is a function used to combine multiple shared secrets as defined in <xref target="sect-combiners"/>.</t>

<t>This process employs the transformations from KeyTransport or keyAgreement to KEM as described in <xref target="sec-kems"/>.</t>

<figure><artwork><![CDATA[
Input:   CompositePrivateKey = SK1, SK2 .. SKn

   SK1, SK2 .. SKn    Decryption private keys. See note below on 
                      composite inputs.

   A1, A2, ... An     Component keyTransport, keyAgreement, or
                      KEM algorithms. See note below on composite 
                      inputs.

   CT1, CT2, .., CTn  Ciphertexts. see note below on composite inputs.
   
   COMBINER          A combiner function.


Output:  SS

1. for i := 1 to n
 
      if Ai is of type KEM:
          SSi := decaps(Cti, SKi)

      else, if Ai is of type keyEncipherment:
          SSi := decrypt(Cti, SKi)

       else, if Ai is of type keyAgreement:
          PKe := decode(CTi)
          SSi := keyAgree(PKe, SKi)

2. Output SS = COMBINER(SS1, SS2, .., SSn)
]]></artwork></figure>

<t>Note on composite inputs: the method of providing the list of component keys and algorithms is flexible and beyond the scope of this pseudo-code, for example they may be carried in CompositePublicKey structure. It is also possible to perform a composite KEM that combines ciphertexts for distinct recipient keys stored, for example, in separate X.509 certificates. Variations in the process to accommodate particular private key storage mechanisms, for example when distinct keys stored in separate software or hardware keystores, are considered to be conformant to this document so long as it produces the same output as the process sketched above.</t>

</section>
<section anchor="sec-in-pract" title="In Practice">

<t>This section addresses practical issues of how this draft affects other protocols and standards.</t>

<t>EDNOTE 10: Possible topics to address:</t>

<t><list style="symbols">
  <t>The size of these certs and cert chains.</t>
  <t>In particular, implications for (large) composite keys / signatures / certs on the handshake stages of TLS and IKEv2.</t>
  <t>If a cert in the chain is a composite cert then does the whole chain need to be of composite Certs?</t>
  <t>We could also explain that the root CA cert does not have to be of the same algorithms. The root cert SHOULD NOT be transferred in the authentication exchange to save transport overhead and thus it can be different than the intermediate and leaf certs.</t>
  <t>We could talk about overhead (size and processing).</t>
  <t>We could also discuss backwards compatibility.</t>
  <t>We could include a subsection about implementation considerations.</t>
</list></t>

<section anchor="sec-backwards-compat" title="Backwards Compatibility">

<t>As noted in the introduction, the post-quantum cryptographic migration will face challenges in both ensuring cryptographic strength against adversaries of unknown capabilities, as well as providing ease of migration. The composite mechanisms defined in this document primarily address cryptographic strength, however this section contains notes on how backwards compatibility may be obtained.</t>

<t>The term &quot;ease of migration&quot; is used here to mean that existing systems can be gracefully transitioned to the new technology without requiring large service disruptions or expensive upgrades. The term &quot;backwards compatibility&quot; is used here to mean something more specific; that existing systems as they are deployed today can interoperate with the upgraded systems of the future.</t>

<t>These migration and interoperability concerns need to be thought about in the context of various types of protocols that make use of X.509 and PKIX with relation to key establishment and content encryption, from online negotiated protocols such as TLS 1.3 [RFC8446] and IKEv2 [RFC7296], to non-negotiated asynchronous protocols such as S/MIME signed email [RFC8551], as well as myriad other standardized and proprietary protocols and applications that leverage CMS <xref target="RFC5652"></xref> encrypted structures.</t>

<section anchor="k-of-n-modes" title="K-of-N modes">

<t>~~~ BEGIN EDNOTE ~~~
In the context of encryption, K-of-N modes could mean one of two things:</t>

<t>Type 1: sender uses a subset</t>

<t>This would mean the sender (encrypter) uses a subset of K the N component keys within the receiver&#39;s public key. The obvious way to combine them is with the <xref target="sec-encaps-proc"/> but skipping the unused keys / algorithms and emitting a NULL ciphertext in their place. This mechanism is straight-forward and allows ease of migration where a sender encounters a composite encryption public key where it does not support all component algorithms. It also supports performance optimization where, for example, a receiver can be issued a key with many component keys and a sender can choose the highest-performance subset that are still considered safe.</t>

<t>Type 2: receiver uses a subset</t>

<t>This would mean that the sender (encrypter) uses all N of the component keys within the receiver&#39;s public key in such a way that the receiver (decrypter) only needs to use K private keys to decrypt the message. This implies the need for some kind of Shamir&#39;s-like secret splitting scheme. This is a reasonably complex mechanism and it&#39;s currently unclear if there are any use-cases that require such a mechanism.</t>

<t>~~~ END EDNOTE ~~~</t>

</section>
<section anchor="parallel-pkis" title="Parallel PKIs">

<t>We present the term &quot;Parallel PKI&quot; to refer to the setup where a PKI end entity possesses two or more distinct public keys or certificates for the same identity (name), but containing keys for different cryptographic algorithms. One could imagine a set of parallel PKIs where an existing PKI using legacy algorithms (RSA, ECC) is left operational during the post-quantum migration but is shadowed by one or more parallel PKIs using pure post quantum algorithms or composite algorithms (legacy and post-quantum).</t>

<t>Equipped with a set of parallel public keys in this way, a client would have the flexibility to choose which public key(s) or certificate(s) to use in a given signature operation.</t>

<t>For negotiated protocols, the client could choose which public key(s) or certificate(s) to use based on the negotiated algorithms.</t>

<t>For non-negotiated protocols, the details for obtaining backwards compatibility will vary by protocol, but for example in CMS <xref target="RFC5652"></xref>.</t>

<t>EDNOTE: I copied and pruned this text from <xref target="I-D.ounsworth-pq-composite-sigs"/>. It probably needs to be fleshed out more as we better understand the implementation concerns around composite encryption.</t>

<!-- End of In Practice section -->

</section>
</section>
</section>
<section anchor="sec-iana" title="IANA Considerations">
<t>The ASN.1 module OID is TBD.</t>

<!-- End of IANA Considerations section -->

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

<section anchor="policy-for-deprecated-and-acceptable-algorithms" title="Policy for Deprecated and Acceptable Algorithms">

<t>Traditionally, a public key, certificate, or signature contains a single cryptographic algorithm. If and when an algorithm becomes deprecated (for example, RSA-512, or SHA1), it is obvious that structures using that algorithm are implicitly revoked.</t>

<t>In the composite model this is less obvious since implementers may decide that certain cryptographic algorithms have complementary security properties and are acceptable in combination even though one or both algorithms are deprecated for individual use. As such, a single composite public key, certificate, signature, or ciphertext may contain a mixture of deprecated and non-deprecated algorithms.</t>

<t>Specifying behaviour in these cases is beyond the scope of this document, but should be considered by Implementers and potentially in additional standards.</t>

<t>EDNOTE: Max is working on a CRL mechanism to accomplish this.</t>

</section>
<section anchor="or-modes" title="OR Modes">

<t>TODO -- we&#39;ll need security consideration analysis of whatever OR modes we choose.</t>

</section>
<section anchor="cryptographic-review-of-combiner" title="Cryptographic review of combiner">

<t>EDNOTE: LAMPS should probably request CFRG review of this draft to ensure that the combiner is resistant to all known cryptographic attacks.</t>

<section anchor="need-for-a-kdf-within-the-combiner" title="Need for a KDF within the combiner">

<t>It is expected that the majority of uses of the KEM defined in this document will be within a construct such as <xref target="I-D.perret-prat-lamps-cms-pq-kem"/> which supplies the KEM output to a KDF in order to derive a wrapping key. In these cases it is redundant for the combiner within the composite KEM to also use a KDF. However, it is possible for protocol designers to want to use a KEM output -- or a truncation of it -- directly as a symmetric key; for this purpose we have included a KDF in the composite KEM construction.</t>

<t>In protocols where the KEM output will be supplied to a KDF, it should be safe to use a NULL KDF within the composite KEM -- ie the KDF where <spanx style="verb">KDF(m) = m</spanx> -- but we leave the details of any such security analysis to the protocol designers who wish to implement it.</t>

</section>
<section anchor="sec-apop-attack" title="APOP Attack on concatenated keys">

<t>See the attack analysis described in summary in <xref target="Aviram2021"></xref>.</t>

<t>The pre-conditions for the described attack are quite strong: namely that the attacker has full control of both the content and length of the first shared secret in the combiner, and that the attacker can perform collision attacks against the underlying KDF.</t>

<t>We believe that, in general, neither of these pre-conditions are met within PKIX protocols. First, any key transport, key agreement, or KEM primitive approved for use within PKIX sets a fixed length for the shared secret that it produces so that the attacker cannot change the shared secret length between subsequent runs of the same protocol. This justification aligns with the justification used for <xref target="I-D.ietf-tls-hybrid-design"/>. Second, any non-deprecated KDF will not allow collision attacks.</t>

<t>In addition, the combiner construction defined in this document aims to provide additional collision resistance on top of that provided by the underlying KDF.</t>

</section>
<section anchor="aviram2022" title="Aviram2022">

<t>See the attack analysis described in summary in <xref target="Aviram2022"></xref>.</t>

<t>This paper is largely critiquing the use of HKDF (HMAC) as a dual-PRF combiner for two secrets. This is not exactly what we are doing here.</t>

<t><xref target="Aviram2022"></xref> gives the following definition:
&quot;If we would like to combine two keys, either of which might be influenced by an attacker, we need a dual-PRF as the keycombiner: That is, a function which is a PRF when keyed by either input.</t>

<t>We believe the construction offered in this document meets this definition of a dual-PRF so long as the chosen KDF is itself a PRF. This holds even if the chosen KDF is HKDF with the same key (salt) used in each KDF() operation.</t>

<!-- End of Security Considerations section -->

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


  </middle>

  <back>

    <references title='Normative References'>

&RFC1421;
&RFC2119;
&RFC2986;
&RFC4210;
&RFC5280;
&RFC5652;
&RFC5912;
&RFC5914;
&RFC5958;
&RFC7468;
&RFC8174;
&RFC8411;
<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>ITU-T</organization>
    </author>
    <date year="2015" month="November"/>
  </front>
  <seriesInfo name="ISO/IEC" value="8825-1:2015"/>
</reference>
&I-D.draft-ounsworth-pq-composite-keys-01;
&I-D.draft-perret-prat-lamps-cms-pq-kem-00;


    </references>

    <references title='Informative References'>

&RFC3279;
&RFC5990;
&I-D.draft-ounsworth-pq-composite-sigs-07;
&I-D.draft-ietf-tls-hybrid-design-04;
&I-D.draft-becker-guthrie-noncomposite-hybrid-auth-00;
<reference anchor="Bindel2017" target="https://link.springer.com/chapter/10.1007/978-3-319-59879-6_22">
  <front>
    <title>Transitioning to a quantum-resistant public key infrastructure</title>
    <author initials="N." surname="Bindel" fullname="Nina Bindel">
      <organization></organization>
    </author>
    <author initials="U." surname="Herath" fullname="Udyani Herath">
      <organization></organization>
    </author>
    <author initials="M." surname="McKague" fullname="Matthew McKague">
      <organization></organization>
    </author>
    <author initials="D." surname="Stebila" fullname="Douglas Stebila">
      <organization></organization>
    </author>
    <date year="2017"/>
  </front>
</reference>
<reference anchor="Aviram2022" target="https://eprint.iacr.org/2022/065">
  <front>
    <title>Practical (Post-Quantum) Key Combiners from One-Wayness and Applications to TLS.</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="Aviram2021" target="https://github.com/nimia/kdf_public">
  <front>
    <title>Concatenating Secrets May Be Dangerous</title>
    <author >
      <organization></organization>
    </author>
    <date year="2022"/>
  </front>
</reference>


    </references>


<section anchor="appdx-examples" title="Examples">

<t>TBD</t>

</section>
<section anchor="asn1-module" title="ASN.1 Module">

<t>TBD -- UPDATE</t>

<figure><artwork type="ASN.1"><![CDATA[
<CODE STARTS>

Composite-Keys-2022
  { TBD }

DEFINITIONS IMPLICIT TAGS ::= BEGIN

EXPORTS ALL;

IMPORTS
-- any?

--
-- Object Identifiers
--

-- To be replaced by IANA
id-alg-composite-kem OBJECT IDENTIFIER ::= {
joint-iso-itu-t(2) country(16) us(840) organization(1) 
entrust(114027) Algorithm(80) Composite(4) KEM (5) }

id-composite-kdf-combiner OBJECT IDENTIFIER ::= { TBD }


--
-- Composite structures
--

CompositeCiphertextValue ::= SEQUENCE SIZE (2..MAX) OF BIT STRING

kema-CompositeKEM KEM-ALGORITHM ::= {
    IDENTIFIER id-alg-composite-kem
    VALUE CompositeCiphertextValue
    PARAMS composite-kem-params  
    PUBLIC-KEYS { pk-Composite }
    SMIME-CAPS { IDENTIFIED BY id-alg-composite } }
}

TODO: this assumes that KEM-ALGORITHM is defined, which it currently is not.

composite-kem-params  ::=  SEQUENCE {
    combiner     AlgorithmIdentifier
}

alg-composite-kdf-combiner-params ::=  SEQUENCE {
        kdf     AlgorithmIdentifier
}

END

<CODE ENDS>

]]></artwork></figure>

</section>
<section anchor="intellectual-property-considerations" title="Intellectual Property Considerations">

<t>The following IPR Disclosure relates to this draft:</t>

<t>https://datatracker.ietf.org/ipr/3588/</t>

<t>EDNOTE:   I don&#39;t think this applies to this draft.</t>

</section>
<section anchor="contributors-and-acknowledgements" title="Contributors and 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>

<t>Serge Mister (Entrust), Ali Noman (Entrust), Scott Fluhrer (Cisco), Jan Klaussner (D-Trust), Max Pala (CableLabs), and
Douglas Stebila (University of Waterloo).</t>

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

<section anchor="making-contributions" title="Making contributions">

<t>Additional contributions to this draft are welcome. Please see the working copy of this draft at, as well as open issues at:</t>

<t>https://github.com/EntrustCorporation/draft-composite-kem/</t>

<!-- End of Contributors section -->

</section>
</section>


  </back>

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

-->

</rfc>

