<?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 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 RFC3279 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3279.xml">
<!ENTITY RFC4210 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4210.xml">
<!ENTITY RFC4211 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4211.xml">
<!ENTITY RFC7292 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7292.xml">
<!ENTITY RFC7296 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7296.xml">
<!ENTITY RFC8446 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml">
<!ENTITY RFC8551 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8551.xml">
<!ENTITY I-D.draft-ounsworth-pq-composite-sigs-05 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ounsworth-pq-composite-sigs-05.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">
<!ENTITY I-D.draft-guthrie-ipsecme-ikev2-hybrid-auth-00 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-guthrie-ipsecme-ikev2-hybrid-auth-00.xml">
]>

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

<rfc ipr="trust200902" docName="draft-ounsworth-pq-composite-keys-02" category="std" >
  <front>
    <title abbrev="PQ Composite Keys">Composite Public and Private Keys 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="M." surname="Pala" fullname="Massimiliano Pala">
      <organization>CableLabs</organization>
      <address>
        <email>director@openca.org</email>
      </address>
    </author>
    <author initials="J." surname="Klaussner" fullname="Jan Klaussner">
      <organization>D-Trust GmbH</organization>
      <address>
        <postal>
          <street>Kommandantenstr. 15</street>
          <city>Berlin</city>
          <code>10969</code>
          <country>Germany</country>
        </postal>
        <email>jan.klaussner@d-trust.net</email>
      </address>
    </author>

    <date year="2022" month="June" day="07"/>

    <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 cryptalanysis, 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 implementors 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 reffered 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 the structures CompositePublicKey and CompositePrivateKey, which are sequences of the respective structure for each component algorithm. The generic composite variant is defined which allows arbitrary combinations of key types to be placed in the CompositePublicKey and CompositePrivateKey structures without needing the combination to be pre-registered or pre-agreed. The explicit variant is also defined which allows for a set of algorithm identifier OIDs to be registered together as an explicit composite algorithm and assigned an OID.</t>

<t>This document is intended to be coupled with corresponding documents that define the structure and semantics of composite signatures and encryption, such as [draft-ounsworth-pq-composite-sigs-05] and draft-ounsworth-pq-composite-kem (yet to be published).</t>

<!-- End of Abstract -->



    </abstract>



  </front>

  <middle>


<section anchor="changes-in-version-02" title="Changes in version -02">

<t><list style="symbols">
  <t>Merged Generic Composite (<xref target="sec-generic-composite"/>) and Explicit Composite (<xref target="sec-explicit"/>) into one document and made them share a wire encoding (only differing by the OIDs used).</t>
  <t>Removed Composite-OR Public Key.</t>
  <t>Synced document structure with -sigs</t>
  <t>Added <xref target="sec-backwards-compat"/> addressing backwards compatibility and ease of migration concerns.</t>
</list></t>

<t>TODO diff this against the public version and see if there are any more changes.</t>

</section>
<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, but we may also not fully trust their post-quantum replacements until further time has passed to allow additional scrutiny and the discovery of 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 signatures 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 concerns by providing formats for encoding multiple public key and private key values into existing public key and private key fields. Backwards compatibility is not directly addressed via the composite mechanisms defined in the document, but some notes on how it can be obtained can be found in <xref target="sec-backwards-compat"/>.</t>

<t>This document is intended for general applicability anywhere that keys are 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:
          A standardized cryptographic primitive, as well as 
          any ASN.1 structures needed for encoding data and 
          metadata needed to use the algorithm. This document is
          concerned with algorithms for producing either digital
          signatures or ciphertexts for the purpose of key exchange.</t>

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

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

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

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

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

<t>LEGACY:   For the purposes of this document, a legacy algorithm is
          any cryptographic algorithm currently in use which is 
          not believed to be resistant to quantum cryptanalysis.</t>

<t>PKI:
          Public Key Infrastructure, as defined in <xref target="RFC5280"></xref>.</t>

<t>POST-QUANTUM AGLORITHM:
          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>

</section>
</section>
<section anchor="sec-composite-keys" title="Composite Key Structures">

<t>In order to represent public keys and private keys that are composed of multiple algorithms, we define encodings consisting of a sequence of public key or private key primitives (aka &quot;components&quot;) such that these structures can be used directly in existing public key fields such as those found in PKCS#10 <xref target="RFC2986"></xref>, CMP <xref target="RFC4210"></xref>, X.509 <xref target="RFC5280"></xref>, CMS <xref target="RFC5652"></xref>, and the Trust Anchor Format <xref target="RFC5914"></xref>.</t>

<t>A composite key is a single key object that performs an atomic cryptographic operation -- such a signing, verifying, encapsulating, or decapsulating -- using its encapsulated sequence of component keys as if it was a single key. This generally means that the complexity of combining algorithms can be deferred from the protocol layer to the cryptographic library layer.</t>

<section anchor="pk-composite" title="pk-Composite">

<t>The PUBLIC-KEY ASN.1 information object class is defined in <xref target="RFC5912"></xref>. The PUBLIC-KEY information object for generic (<xref target="sec-generic-composite"/>) and explicit (<xref target="sec-explicit"/>) composite public and private keys has the following form:</t>

<figure><artwork type="ASN.1" name="CompositeAlgorithmObject-asn.1-structures"><![CDATA[
pk-Composite PUBLIC-KEY ::= {
    id <identifier>,
    KeyValue CompositePublicKey,
    Params ARE ABSENT,
    PrivateKey CompositePrivateKey,
}
]]></artwork></figure>

<t>The identifier may be an OID representing any composite key type.</t>

<t><xref target="sec-generic-composite"/> defines the object identifier id-composite-key which indicates that this is a &quot;generic composite key&quot; which allows arbitrary combinations of key types to be placed in the CompositePublicKey and CompositePrivateKey structures without needing the combination to be pre-registered or pre-agreed.</t>

<t><xref target="sec-explicit"/> defines a framework for defining new &quot;explicit&quot; combinations that use the same wire encoding structures as generic, but with OIDs that dictate specific combinations of component algorithms.</t>

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

<t>For protocols such as X.509 <xref target="RFC5280"></xref> that specify key usage along with the public key, any key usage may be used with composite keys, with the requirement that the specified key usage MUST apply to all component keys. For example if a composite key is marked with a KeyUsage of digitalSignature, then all component keys MUST be capable of producing digital signatures. The composite mechanism MUST NOT be used to implement mixed-usage keys, for example, where a digitalSignature and a keyEncipherment key are combined together into a single composite key.</t>

</section>
</section>
<section anchor="sec-composite-pub-keys" title="CompositePublicKey">

<t>Composite public key data is represented by the following structure:</t>

<figure><artwork type="ASN.1" name="CompositePublicKey-asn.1-structures"><![CDATA[
CompositePublicKey ::= SEQUENCE SIZE (2..MAX) OF SubjectPublicKeyInfo
]]></artwork></figure>

<t>A composite key MUST contain at least two component public keys.</t>

<t>A CompositePublicKey MUST NOT contain a component public key which itself describes a composite key; i.e. recursive CompositePublicKeys are not allowed.</t>

<t>EDNOTE: unclear that banning recursive composite keys actually accomplishes anything other than a general reduction in complexity and therefore reduction in attack surface.</t>

<t>Each component SubjectPublicKeyInfo SHALL contain an AlgorithmIdentifier OID which identifies the public key type and parameters for the public key contained within it. See <xref target="appdx-examples"/> for examples.</t>

<t>Each element of a CompositePublicKey is a SubjectPublicKeyInfo object encoding a component public key. When the CompositePublicKey must be provided in octet string or bit string format, the data structure is encoded as specified in <xref target="sec-encoding-rules"/>.</t>

</section>
<section anchor="sec-priv-key" title="CompositePrivateKey">

<t>EDNOTE: we need to put a bit more effort into private keys, specifically defining what OIDs to use in the generic and explicit cases.</t>

<t>This section provides an encoding for composite private keys intended for PKIX protocols and other applications that require an interoperable format for transmitting private keys, such as PKCS #12 <xref target="RFC7292"></xref> or CMP / CRMF <xref target="RFC4210"></xref>, <xref target="RFC4211"></xref>. It is not intended to dictate a storage format in implementations not requiring interoperability of private key formats.</t>

<t>In some cases the private keys that comprise a composite key may not be represented in a single structure or even be contained in a single cryptographic module. The establishment of correspondence between public keys in a CompositePublicKey and private keys not represented in a single composite structure is beyond the scope of this document.</t>

<t>The composite private key data is represented by the following structure:</t>

<figure><artwork type="ASN.1" name="CompositePrivateKey-asn.1-structures"><![CDATA[
CompositePrivateKey ::= SEQUENCE SIZE (2..MAX) OF OneAsymmetricKey
]]></artwork></figure>

<t>Each element is a OneAsymmetricKey <xref target="RFC5958"></xref> object for a component private key.</t>

<t>The parameters field MUST be absent.</t>

<t>A CompositePrivateKey MUST contain at least two component private keys, and they MUST be in the same order as in the corresponding CompositePublicKey.</t>

<t>EDNOTE: does this also need an explicit version? It would probably reduce attack surface of tricking a client into running the wrong parser and a given piece of data.</t>

</section>
<section anchor="sec-encoding-rules" title="Encoding Rules">
<!-- EDNOTE 7: Examples of how other specifications specify how a data structure is converted to a bit string can be found in RFC 2313, section 10.1.4, 3279 section 2.3.5, and RFC 4055, section 3.2. -->

<t>Many protocol specifications will require that the composite public key and composite private key 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>

<figure><artwork type="ASN.1"><![CDATA[
CompositePublicKeyOs ::= OCTET STRING (CONTAINING CompositePublicKey ENCODED BY der)
]]></artwork></figure>

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

<figure><artwork type="ASN.1"><![CDATA[
CompositePublicKeyBs ::= BIT STRING (CONTAINING CompositePublicKey ENCODED BY der)
]]></artwork></figure>

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

<t>This section defines the algorithm identifier for generic composite, as well as a framework for defining explicit combinations. This section is not intended to be exhaustive and other authors may define others so long as they are compatible with the structures and processes defined in this and companion signature and encryption documents.</t>

<t>Some use-cases desire the flexibility for client to use any combination of supported algorithms, while others desire the rigidity of explicitly-specified combinations of algorithms.</t>

<section anchor="sec-generic-composite" title="id-composite-key (Generic Composite Keys)">

<t>The id-composite-key algorithm identifier is used for identifying a generic composite public key and a generic composite private key. This allows arbitrary combinations of key types to be placed in the CompositePublicKey and CompositePrivateKey structures without needing the combination to be pre-registered or pre-agreed.</t>

<figure><artwork type="asn.1"><![CDATA[
id-composite-key OBJECT IDENTIFIER ::= {
    joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
    Algorithm(80) Composite(4) CompositeKey(1) }
]]></artwork></figure>

<t>EDNOTE: this is a temporary OID for the purposes of prototyping. We are requesting IANA to assign a permanent OID, see <xref target="sec-iana"/>.</t>

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

<figure><artwork type="ASN.1" name="CompositeAlgorithmObject-asn.1-structures"><![CDATA[
pk-Composite PUBLIC-KEY ::= {
    id id-composite-key,
    KeyValue CompositePublicKey,
    Params ARE ABSENT,
    PrivateKey CompositePrivateKey,
}
]]></artwork></figure>

<t>The motivation for this variant is primarily for prototyping work prior to the standardization of algorithm identifiers for explicit combinations of algorithms. However, the authors envision that this variant will remain relevant beyond full standardization for example in environments requiring very high levels of crypto agility, for example where clients support a large number of algorithms or where a large number of keys will be used at a time and it is therefore prohibitive to define algorithm identifiers for every combination of pairs, triples, quadruples, etc of algorithms.</t>

</section>
<section anchor="sec-explicit" title="Explicit Composite Keys">

<t>This variant provides a rigid way of specifying supported combinations of key types. This document does not define any explicit combinations, but provides a framework for doing so.</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>Profiles need to define an explicit composite key type which consists of:</t>

<t><list style="symbols">
  <t>A new algorithm identifier OID for the explicit algorithm.</t>
  <t>The PUBLIC-KEY information object of each component public key type.</t>
</list></t>

<t>See <xref target="appdx-creatingExplicitCombinations"/> for guidance on creating and registering OIDs for specific explicit combinations.</t>

<t>In this variant, the public key is encoded as defined in <xref target="sec-composite-keys"/> and <xref target="sec-composite-pub-keys"/>, however the PUBLIC-KEY.id SHALL be an OID which is registered to represent a specific combination of component public key types. See <xref target="appdx-examples"/> for examples.</t>

<t>The SubjectPublicKeyInfo.algorithm for each component key is redundant information which MUST match -- and can be inferred from -- the specification of the explicit algorithm. It has been left here for ease of implementation as the component SubjectPublicKeyInfo structures are the same between generic and explicit, as well as with single-algorithm keys. However, it introduces the risk of mismatch and leads to the following security consideration:</t>

<t>Security consideration: Implementations MUST check that the component AlgorithmIdentifier OIDs and parameters match those expected by the definition of the explicit algorithm. Implementations SHOULD first parse a component&#39;s SubjectPublicKeyInfo.algorithm, and ensure that it matches what is expected for that position in the explicit key, and then proceed to parse the SubjectPublicKeyInfo.subjectPublicKey. This is to reduce the attack surface associated with parsing the public key data of an unexpected key type, or worse; to parse and use a key which does not match the explicit algorithm definition. Similar checks MUST be done when handling the corresponding private key.</t>

</section>
</section>
<section anchor="sec-imp-considers" title="Implementation Considerations">

<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>
</list></t>

<section anchor="textual-encoding-of-composite-private-keys" title="Textual encoding of Composite Private Keys">

<t>CompositePrivateKeys can be encoded to the Privacy-Enhanced Mail (PEM) <xref target="RFC1421"></xref> format by placing a CompositePrivateKey into the privateKey field of a PrivateKeyInfo or OneAsymmetricKey object, and then applying the PEM encoding rules as defined in <xref target="RFC7468"></xref> section 10 and 11 for plaintext and encrypted private keys, respectively.</t>

</section>
<section anchor="asymmetric-key-packages-cms" title="Asymmetric Key Packages (CMS)">

<t>The Cryptographic Message Syntax (CMS), as defined in <xref target="RFC5652"></xref>, can be used to digitally sign, digest, authenticate, or encrypt the asymmetric key format content type.</t>

<t>When encoding composite private keys, the privateKeyAlgorithm in the OneAsymmetricKey SHALL be set to id-composite-key or to an OID corresponding to an explicit composite key.</t>

<t>The parameters of the privateKeyAlgorithm SHALL be a sequence of AlgorithmIdentifier objects, each of which are encoded according to the rules defined for each of the different keys in the composite private key.</t>

<t>The value of the privateKey field in the OneAsymmetricKey SHALL be set to the DER encoding of the SEQUENCE of private key values that make up the composite key. The number and order of elements in the sequence SHALL be the same as identified in the sequence of parameters in the privateKeyAlgorithm.</t>

<t>The value of the publicKey (if present) SHALL be set to the DER encoding of the corresponding CompositePublicKey. If this field is present, the number and order of component keys MUST be the same as identified in the sequence of parameters in the privateKeyAlgorithm.</t>

<t>The value of the attributes is encoded as usual.</t>

<t>EDNOTE: I wonder whether this has value as its own section, or if we should take what&#39;s relevant and merge it into <xref target="sec-priv-key"/>?</t>

</section>
<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 public key objects, from online negotiated protocols such as TLS 1.3 <xref target="RFC8446"></xref> and IKEv2 <xref target="RFC7296"></xref>, to non-negotiated asynchronous protocols such as S/MIME signed and encrypted email <xref target="RFC8551"></xref>, document signing such as in the context of the European eIDAS regulations <xref target="eIDAS2014"></xref>, and publicly trusted code signing <xref target="codeSigningBRsv2.8"></xref>, as well as myriad other standardized and proprietary protocols and applications that leverage CMS <xref target="RFC5652"></xref> signed or encrypted structures.</t>

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

<t>This document purposefully does not specify how clients are to combine component keys together to form a single cryptographic operation; this is left up to the specifications of signature and encryption algorithms that make use of the composite key type. One possible way to combine component keys is through an OR relation, or OR-like client policies for acceptable algorithm combinations, where senders and / or receivers are permitted to ignore some component keys. Some envisioned uses of this include environments where the client encounters a component key for which it does not possess a compatible algorithm implementation but wishes to proceed with the cryptographic operation using the subset of component keys for which it does have compatible implementations. Such a mechanism could be designed to provide ease of migration by allowing for composite keys to be distributed and used before all clients in the environment are fully upgraded, but it does not allow for full backwards compatibility since clients would at least need to be upgraded from their current state to be able to parse the composite structures.</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 key type (signature, key establishment, etc) for the same identity (name, SAN), 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 cryptographic operation.</t>

<t>For negotiated protocols, the client could choose which public key(s) or certificate(s) to use based on the negotiated algorithms, or could combine two of the public keys for example in a non-composite hybrid method such as [draft-becker-guthrie-noncomposite-hybrid-auth-00] (NOTE: need kramdown formatting help with this ref) or [draft-guthrie-ipsecme-ikev2-hybrid-auth-00]. Note that it is possible to use the signature algorithm defined in [draft-ounsworth-pq-composite-sigs-06] as a way to carry the multiple signature values generated by a non-composite public mechanism in protocols where it is easier to support the composite signature algorithms than to implement such a mechanism in the protocol itself. There is also nothing precluding a composite public key from being one of the components used within a non-composite authentication operation; this may lead to greater convenience in setting up parallel PKI hierarchies that need to service a range of clients implementing different styles of post-quantum migration strategies.</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>, the inclusion of multiple SignerInfo or RecipientInfo objects is often already treated as an OR relationship, so including one for each of the end entity&#39;s parallel PKI public keys would, in many cases, have the desired effect of allowing the receiver to choose one they are compatible with and ignore the others, thus achieving full backwards compatibility.</t>

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

</section>
</section>
</section>
<section anchor="sec-iana" title="IANA Considerations">
<t>The ASN.1 module OID is TBD.  The id-composite-key and id-composite-or-key OIDs are to be assigned by IANA.  The authors suggest that IANA assign an OID on the id-pkix arc:</t>

<figure><artwork type="ASN.1"><![CDATA[
id-composite-key OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) algorithms(6) composite(??) }
]]></artwork></figure>

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

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

<section anchor="sec-secCons-keyReuse" title="Reuse of keys in a Composite public key">

<t>There is an additional security consideration that some use cases such as signatures remain secure against downgrade attacks if and only if component keys are never used outside of their composite context and therefore it is RECOMMENDED that component keys in a composite key are not to be re-used in other contexts. In particular, the components of a composite key SHOULD NOT also appear in single-key certificates. This is particularly relevant for protocols that use composite keys in a logical AND mode since the appearance of the same component keys in single-key contexts undermines the binding of the component keys into a single composite key by allowing messages signed in a multi-key AND mode to be presented as if they were signed in a single key mode in what is known as a &quot;stripping attack&quot;.</t>

</section>
<section anchor="key-mismatch-in-explicit-composite" title="Key mismatch in explicit composite">

<t>This security consideration copied from <xref target="sec-explicit"/>.</t>

<t>Implementations MUST check that that the component AlgorithmIdentifier OIDs and parameters match those expected by the definition of the explicit algorithm. Implementations SHOULD first parse a component&#39;s SubjectPublicKeyInfo.algorithm, and ensure that it matches what is expected for that position in the explicit key, and then proceed to parse the SubjectPublicKeyInfo.subjectPublicKey. This is to reduce the attack surface associated with parsing the public key data of an unexpected key type, or worse; to parse and use a key which does not match the explicit algorithm definition. Similar checks MUST be done when handling the corresponding private key.</t>

</section>
<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 clients performing signature verification or encryption operations should be updated to fail to validate or refuse to encrypt for these algorithms.</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="protection-of-private-keys" title="Protection of Private Keys">

<t>Structures described in this document do not protect private keys in any way unless combined with a security protocol or encryption properties of the objects (if any) where the CompositePrivateKey is used (see next Section).</t>

<t>Protection of the private keys is vital to public key cryptography. The consequences of disclosure depend on the purpose of the private key. If a private key is used for signature, then the disclosure allows unauthorized signing. If a private key is used for key management, then disclosure allows unauthorized parties to access the managed keying material. The encryption algorithm used in the encryption process must be at least as &#39;strong&#39; as the key it is protecting.</t>

</section>
<section anchor="checking-for-compromised-key-reuse" title="Checking for Compromised Key Reuse">

<t>Certification Authority (CA) implementations need to be careful when checking for compromised key reuse, for example as required by WebTrust regulations; when checking for compromised keys, you MUST unpack the CompositePublicKey structure and compare individual component keys. In other words, for the purposes of key reuse checks, the composite public key structures need to be un-packed so that primitive keys are being compared. For example if the composite key {RSA1, PQ1} is revoked for key compromise, then the keys RSA1 and PQ1 need to be individually considered revoked. If the composite key {RSA1, PQ2} is submitted for certification, it SHOULD be rejected because the key RSA1 was previously declared compromised even though the key PQ2 is unique.</t>

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

<!-- Start of Appendices -->

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>

&RFC1421;
&RFC2119;
&RFC2986;
&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>


    </references>

    <references title='Informative References'>

&RFC3279;
&RFC4210;
&RFC4211;
&RFC7292;
&RFC7296;
&RFC8446;
&RFC8551;
&I-D.draft-ounsworth-pq-composite-sigs-05;
&I-D.draft-becker-guthrie-noncomposite-hybrid-auth-00;
&I-D.draft-guthrie-ipsecme-ikev2-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="codeSigningBRsv2.8" target="https://cabforum.org/wp-content/uploads/Baseline-Requirements-for-the-Issuance-and-Management-of-Code-Signing.v2.8.pdf">
  <front>
    <title>Baseline Requirements for the Issuance and Management of Publicly-Trusted Code Signing Certificates v2.8</title>
    <author initials="." surname="CAB Forum" fullname="CA / Browser Forum">
      <organization></organization>
    </author>
    <date year="2022" month="May"/>
  </front>
</reference>
<reference anchor="eIDAS2014" target="https://ec.europa.eu/futurium/en/system/files/ged/eidas_regulation.pdf">
  <front>
    <title>REGULATION (EU) No 910/2014 OF THE EUROPEAN PARLIAMENT AND OF THE COUNCIL of 23 July 2014 on electronic identification and trust services for electronic transactions in the internal market and repealing Directive 1999/93/EC</title>
    <author >
      <organization></organization>
    </author>
    <date year="2014" month="July"/>
  </front>
</reference>


    </references>


<section anchor="appdx-creatingExplicitCombinations" title="Creating explicit combinations">

<t>The following ASN.1 Information Objects may be useful in defining and parsing explicit pairs of public key types. Given an ASN.1 2002 compliant ASN.1 compiler, these Information Objects will enforce the binding between the public key types specified in the instantiation of pk-explicitComposite, and the wire objects which implement it. The one thing that is not enforced automatically by this Information Object is that publicKey.params are intended to be absent if and only if they are absent for the declared public key type. This ASN.1 module declares them OPTIONAL and leaves it to implementers to perform this check explicitly.</t>

<t>EDNOTE  this ASN.1 needs to change.  The current definition doesn&#39;t put a component AlgorithmIdentifier with each component key. Once we agree as a group that the text accurately describes what we want, we can spend a bit of time figuring out if the ASN.1 machinery lets us express it in a readable way and/or a way that will actually help people creating explicit pairs.</t>

<figure><artwork type="ASN.1"><![CDATA[
-- pk-explicitComposite - Composite public key information object

pk-explicitComposite{OBJECT IDENTIFIER:id, PUBLIC-KEY:firstPublicKey,
 FirstPublicKeyType, PUBLIC-KEY:secondPublicKey, SecondPublicKeyType} 
 PUBLIC-KEY ::= {PUBLIC-KEYPUBLIC-KEY
    IDENTIFIER id
    KEY ExplicitCompositePublicKey{firstPublicKey, FirstPublicKeyType,
     secondPublicKey, SecondPublicKeyType}
    PARAMS ARE absent
    CERT-KEY-USAGE {digitalSignature, nonRepudiation, keyCertSign,
      cRLSign}
}
]]></artwork></figure>

<t>The following ASN.1 object class then automatically generates the
public key structure from the types defined in pk-explicitComposite.</t>

<figure><artwork type="ASN.1"><![CDATA[
-- ExplicitCompositePublicKey - The data structure for a composite 
-- public key sec-composite-pub-keys and SecondPublicKeyType are needed
-- because PUBLIC-KEY contains a set of public key types, not a single
-- type.
-- TODO The parameters should be optional only if they are marked 
-- optional in the PUBLIC-KEY.


ExplicitCompositePublicKey{PUBLIC-KEY:firstPublicKey, FirstPublicKeyType, 
  PUBLIC-KEY:secondPublicKey, SecondPublicKeyType} ::= SEQUENCE {
    firstPublicKey SEQUENCE {
        params firstPublicKey.&Params OPTIONAL,
        publicKey FirstPublicKeyType
    },
    secondPublicKey SEQUENCE {
        params secondPublicKey.&Params OPTIONAL,
        publicKey SecondPublicKeyType
    }
}
]]></artwork></figure>

<t>Using this module, it becomes trivial to define explicit pairs. For an example, see <xref target="appdx-expComposite-examples"/>.</t>

<t>To define explicit triples, quadruples, etc, these Information Objects can be extended to have thirdPublicKey, fourthPublicKey, etc throughout.</t>

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

<section anchor="appdx-genComposite-examples" title="Generic Composite Public Key Examples">

<t>This is an example generic composite public key</t>

<figure><artwork><![CDATA[
-----BEGIN PUBLIC KEY-----
MIIBmDAMBgpghkgBhvprUAQBA4IBhgAwggGBMFkwEwYHKoZIzj0CAQYIKoZIzj0D
AQcDQgAExGPhrnuSG/fGyw1FN+l5h4p4AGRQCS0LBXnBO+djhcI6qnF2TvrQEaIY
GGpQT5wHS+7y5iJJ+dE5qjxcv8loRDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBANsVQK1fcLQObL4ZYtczWbObECAFSsng0OLpRTPr9VGV3SsS/VoMRZqX
F+sszz6I2UcFTaMF9CwNRbWLuIBczzuhbHSjn65OuoN+Om2wsPo+okw46RTekB4a
d9QQvYRVzPlILUQ8NvZ4W0BKLviXTXWIggjtp/Y1pKRHKz8n35J6OmFWz4TKGNth
n87D28kmdwQYH5NLsDePHbfdw3AyLrPvQLlQw/hRPz/9Txf7yi9Djg9HtJ88ES6+
ZbfE1ZHxLYLSDt25tSL8A2pMuGMD3P81nYWO+gJ0vYV2WcRpXHRkjmliGqiCg4eB
mC4//tm0J4r9Ll8b/pp6xyOMI7jppVUCAwEAAQ==
-----END PUBLIC KEY-----
]]></artwork></figure>

<t>which decodes as:</t>

<figure><artwork><![CDATA[
algorithm: AlgorithmIdentifier{id-composite-key}

subjectPublicKey: CompositePublicKey {
  SubjectPublicKeyInfo {
    algorithm: AlgorithmIdentifier {
      algorithm: ecPublicKey
      parameters: prime256v1
      }
    subjectPublicKey: <ec key octet string>
    },
    SubjectPublicKeyInfo {
    algorithm: AlgorithmIdentifier {
      algorithm: rsaEncryption
      parameters: NULL
      }
    subjectPublicKey: <rsa key octet string>
    }
  }
]]></artwork></figure>

<t>The corresponding generic private key is:</t>

<figure><artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
MIIFHgIBADAMBgpghkgBhvprUAQBBIIFCTCCBQUwQQIBADATBgcqhkjOPQIBBggq
hkjOPQMBBwQnMCUCAQEEICN0ihCcgg5n8ALtk9tkQZqg/WLEm5NefMi/kdN06Z9u
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDbFUCtX3C0Dmy+
GWLXM1mzmxAgBUrJ4NDi6UUz6/VRld0rEv1aDEWalxfrLM8+iNlHBU2jBfQsDUW1
i7iAXM87oWx0o5+uTrqDfjptsLD6PqJMOOkU3pAeGnfUEL2EVcz5SC1EPDb2eFtA
Si74l011iIII7af2NaSkRys/J9+SejphVs+EyhjbYZ/Ow9vJJncEGB+TS7A3jx23
3cNwMi6z70C5UMP4UT8//U8X+8ovQ44PR7SfPBEuvmW3xNWR8S2C0g7dubUi/ANq
TLhjA9z/NZ2FjvoCdL2FdlnEaVx0ZI5pYhqogoOHgZguP/7ZtCeK/S5fG/6aescj
jCO46aVVAgMBAAECggEAFtT6LpdZuYofTxh6Mo9Jc+xfG9cxWiSx4FQLQEQBBwWl
TQ3nlXDd+CRy+7Fpz8yXSE2HL8w5DDY945OyIL6LYl2KXgWHaLUPvxByqmfVqd7J
L0RnFiOzxU9g2Zr9BUOj3v7kqM3VtI4KhIK2rnWmPu+BDckmzgP9Kpm4KhbPuAYP
iqUZSkxpSUsd5ALLsk9b0xjR7UEYkEpV2/vORwieEhOmPLzuXh+Px0yavkazT/vU
+h/rDSoLQn7v4fVsQgNdOaaOG/gHemGuuiLPJJlX5ZZ6mmsIaEjz+MNk0aJDH2po
KbAr4B709dTsnYgv7YtkEfSyOeMEdhMiswI1c9FpwQKBgQD6kdHmHCoeWNNvlqxU
v57e7ZDAXDA6WcfrypcsF0l72rI3J8oOPmFaNaCmwIH/Icz+Zy7fr2IYxVjyDjCa
zi8qTnj2ZNds71hUYOcq60u0TcSVrtocA4HW7NoWJqK5thNlNaa1M358cYBopGoN
ocS9yf10q2MBZtpF0fc5PbFf+QKBgQDf1L4cezoebbNTaN4KoapycHXxKozP2GwI
r15YRYjt0ZpHstdUPABQuwlL9CuL+5Q17VRiM81cUVNfFsBzKIXYb/PBC5UD+DmR
qGlT6v6uUWY6jifUgEjfyPxO0oJ3M6cChHR/TvpkT5SyaEwHpIH7IeXbMFcS5m4G
mSNBECO/PQKBgCD0CoHT1Go3Tl9PloxywwcYgT/7H9CcvCEzfJws19o1EdkVH4qu
A4mkoeMsUCxompgeo9iBLUqKsb7rxNKnKSbMOTZWXsqR07ENKXnIhiVJUQBKhZ7H
i0zjy268WAxKeNSHsMwF4K2nE7cvYE84pjI7nVy5qYSmrTAfg/8AMRKpAoGBAN/G
wN6WsE9Vm5BLapo0cMUC/FdFFAyEMdYpBei4dCJXiKgf+7miVypfI/dEwPitZ8rW
YKPhaHHgeLq7c2JuZAo0Ov2IR831MBEYz1zvtvmuNcda8iU4sCLTvLRNL9Re1pzk
sdfJrPn2uhH3xfNqG+1oQXZ3CMbDi8Ka/a0Bpst9AoGBAPR4p6WN0aoZlosyT6NI
4mqzNvLE4KBasmfoMmTJih7qCP3X4pqdgiI0SjsQQG/+utHLoJARwzhWHOZf1JKk
D8lSJH02cp/Znrjn5wPpfYKLphJBiKSPwyIjuFwcR1ck84ONeYq421NDqf7lXbvx
oMqjTPagXUpzHvwluDjtSi8+
-----END PRIVATE KEY-----
]]></artwork></figure>

<t>which decodes as:</t>

<figure><artwork><![CDATA[
algorithm: AlgorithmIdentifier{id-composite-key}

SEQUENCE {
  OneAsymmetricKey {
      version: 0,
      privateKeyAlgorithm: PrivateKeyAlgorithmIdentifier{
        algorithm: ecPublicKey 
        parameters: prime256v1
      }
      privateKey: <ec key octet string>
    },
  OneAsymmetricKey {
      version: 0,
      privateKeyAlgorithm: PrivateKeyAlgorithmIdentifier{
        algorithm: rseEncryption 
        parameters: NULL
      }
      privateKey: <rsa key octet string>
    }
  }
]]></artwork></figure>

</section>
<section anchor="appdx-expComposite-examples" title="Explicit Composite Public Key Examples">

<t>Assume that the following is a defined explicit pair:</t>

<figure><artwork type="asn.1"><![CDATA[
id-pk-example-ECandRSA OBJECT IDENTIFIER ::= { 1 2 3 4 }

pk-example-ECandRSA PUBLIC-KEY ::= pk-explicitComposite{
    id-pk-example-ECandRSA,
    ecPublicKey,
    pk-ec,
    rsaEncryption,
    pk-rsa,
}
]]></artwork></figure>

<t>Then the same key as above could be encoded as an explicit composite public key as:</t>

<figure><artwork><![CDATA[
-----BEGIN PUBLIC KEY-----
MIIBkTAFBgMqAwQDggGGADCCAYEwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATE
Y+Gue5Ib98bLDUU36XmHingAZFAJLQsFecE752OFwjqqcXZO+tARohgYalBPnAdL
7vLmIkn50TmqPFy/yWhEMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
2xVArV9wtA5svhli1zNZs5sQIAVKyeDQ4ulFM+v1UZXdKxL9WgxFmpcX6yzPPojZ
RwVNowX0LA1FtYu4gFzPO6FsdKOfrk66g346bbCw+j6iTDjpFN6QHhp31BC9hFXM
+UgtRDw29nhbQEou+JdNdYiCCO2n9jWkpEcrPyffkno6YVbPhMoY22GfzsPbySZ3
BBgfk0uwN48dt93DcDIus+9AuVDD+FE/P/1PF/vKL0OOD0e0nzwRLr5lt8TVkfEt
gtIO3bm1IvwDaky4YwPc/zWdhY76AnS9hXZZxGlcdGSOaWIaqIKDh4GYLj/+2bQn
iv0uXxv+mnrHI4wjuOmlVQIDAQAB
-----END PUBLIC KEY-----
]]></artwork></figure>

<t>which decodes as:</t>

<figure><artwork><![CDATA[
algorithm: AlgorithmIdentifier{id-pk-example-ECandRSA}

subjectPublicKey: CompositePublicKey {
  SubjectPublicKeyInfo {
    algorithm: AlgorithmIdentifier {
      algorithm: ecPublicKey
      parameters: prime256v1
      }
    subjectPublicKey: <ec key octet string>
    },
    SubjectPublicKeyInfo {
    algorithm: AlgorithmIdentifier {
      algorithm: rsaEncryption
      parameters: NULL
      }
    subjectPublicKey: <rsa key octet string>
    }
  }
]]></artwork></figure>

<t>The corresponding explicit private key is:</t>

<figure><artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
MIIFFwIBADAFBgMqAwQEggUJMIIFBTBBAgEAMBMGByqGSM49AgEGCCqGSM49AwEH
BCcwJQIBAQQgI3SKEJyCDmfwAu2T22RBmqD9YsSbk158yL+R03Tpn24wggS+AgEA
MA0GCSqGSIb3DQEBAQUABIIEqDCCBKQCAQACggEBANsVQK1fcLQObL4ZYtczWbOb
ECAFSsng0OLpRTPr9VGV3SsS/VoMRZqXF+sszz6I2UcFTaMF9CwNRbWLuIBczzuh
bHSjn65OuoN+Om2wsPo+okw46RTekB4ad9QQvYRVzPlILUQ8NvZ4W0BKLviXTXWI
ggjtp/Y1pKRHKz8n35J6OmFWz4TKGNthn87D28kmdwQYH5NLsDePHbfdw3AyLrPv
QLlQw/hRPz/9Txf7yi9Djg9HtJ88ES6+ZbfE1ZHxLYLSDt25tSL8A2pMuGMD3P81
nYWO+gJ0vYV2WcRpXHRkjmliGqiCg4eBmC4//tm0J4r9Ll8b/pp6xyOMI7jppVUC
AwEAAQKCAQAW1Poul1m5ih9PGHoyj0lz7F8b1zFaJLHgVAtARAEHBaVNDeeVcN34
JHL7sWnPzJdITYcvzDkMNj3jk7IgvotiXYpeBYdotQ+/EHKqZ9Wp3skvRGcWI7PF
T2DZmv0FQ6Pe/uSozdW0jgqEgraudaY+74ENySbOA/0qmbgqFs+4Bg+KpRlKTGlJ
Sx3kAsuyT1vTGNHtQRiQSlXb+85HCJ4SE6Y8vO5eH4/HTJq+RrNP+9T6H+sNKgtC
fu/h9WxCA105po4b+Ad6Ya66Is8kmVfllnqaawhoSPP4w2TRokMfamgpsCvgHvT1
1OydiC/ti2QR9LI54wR2EyKzAjVz0WnBAoGBAPqR0eYcKh5Y02+WrFS/nt7tkMBc
MDpZx+vKlywXSXvasjcnyg4+YVo1oKbAgf8hzP5nLt+vYhjFWPIOMJrOLypOePZk
12zvWFRg5yrrS7RNxJWu2hwDgdbs2hYmorm2E2U1prUzfnxxgGikag2hxL3J/XSr
YwFm2kXR9zk9sV/5AoGBAN/Uvhx7Oh5ts1No3gqhqnJwdfEqjM/YbAivXlhFiO3R
mkey11Q8AFC7CUv0K4v7lDXtVGIzzVxRU18WwHMohdhv88ELlQP4OZGoaVPq/q5R
ZjqOJ9SASN/I/E7SgnczpwKEdH9O+mRPlLJoTAekgfsh5dswVxLmbgaZI0EQI789
AoGAIPQKgdPUajdOX0+WjHLDBxiBP/sf0Jy8ITN8nCzX2jUR2RUfiq4DiaSh4yxQ
LGiamB6j2IEtSoqxvuvE0qcpJsw5NlZeypHTsQ0peciGJUlRAEqFnseLTOPLbrxY
DEp41IewzAXgracTty9gTzimMjudXLmphKatMB+D/wAxEqkCgYEA38bA3pawT1Wb
kEtqmjRwxQL8V0UUDIQx1ikF6Lh0IleIqB/7uaJXKl8j90TA+K1nytZgo+FoceB4
urtzYm5kCjQ6/YhHzfUwERjPXO+2+a41x1ryJTiwItO8tE0v1F7WnOSx18ms+fa6
EffF82ob7WhBdncIxsOLwpr9rQGmy30CgYEA9HinpY3RqhmWizJPo0jiarM28sTg
oFqyZ+gyZMmKHuoI/dfimp2CIjRKOxBAb/660cugkBHDOFYc5l/UkqQPyVIkfTZy
n9meuOfnA+l9goumEkGIpI/DIiO4XBxHVyTzg415irjbU0Op/uVdu/GgyqNM9qBd
SnMe/CW4OO1KLz4=
-----END PRIVATE KEY-----
]]></artwork></figure>

<t>which decodes as:</t>

<figure><artwork><![CDATA[
algorithm: AlgorithmIdentifier{id-pk-example-ECandRSA}

SEQUENCE {
  OneAsymmetricKey {
      version: 0,
      privateKeyAlgorithm: PrivateKeyAlgorithmIdentifier{
        algorithm: ecPublicKey 
        parameters: prime256v1
      }
      privateKey: <ec key octet string>
    },
  OneAsymmetricKey {
      version: 0,
      privateKeyAlgorithm: PrivateKeyAlgorithmIdentifier{
        algorithm: rseEncryption 
        parameters: NULL
      }
      privateKey: <rsa key octet string>
    }
  }
]]></artwork></figure>

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

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

Composite-Keys-2022

DEFINITIONS IMPLICIT TAGS ::= BEGIN

EXPORTS ALL;

IMPORTS
  PUBLIC-KEY, SIGNATURE-ALGORITHM, ParamOptions, AlgorithmIdentifier{}
    FROM AlgorithmInformation-2009  -- RFC 5912 [X509ASN1]
      { iso(1) identified-organization(3) dod(6) internet(1)
        security(5) mechanisms(5) pkix(7) id-mod(0)
        id-mod-algorithmInformation-02(58) }

  SubjectPublicKeyInfo
    FROM PKIX1Explicit-2009
      { iso(1) identified-organization(3) dod(6) internet(1)
        security(5) mechanisms(5) pkix(7) id-mod(0)
        id-mod-pkix1-explicit-02(51) }

  OneAsymmetricKey
    FROM AsymmetricKeyPackageModuleV1
      { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
        pkcs-9(9) smime(16) modules(0)
        id-mod-asymmetricKeyPkgV1(50) } ;

--
-- Object Identifiers
--
 
der OBJECT IDENTIFIER ::=
  {joint-iso-itu-t asn1(1) ber-derived(2) distinguished-encoding(1)}

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



--  COMPOSITE-KEY-ALGORITHM
--
--  Describes the basic properties of a composite key algorithm
--
--  &id - contains the OID identifying the composite algorithm
--  &Params - if present, contains the type for the algorithm
--               parameters; if absent, implies no parameters
--  &paramPresence - parameter presence requirement
--
-- }

COMPOSITE-KEY-ALGORITHM ::= CLASS {
    &id             OBJECT IDENTIFIER UNIQUE,
    &Params         OPTIONAL,
    &paramPresence  ParamOptions DEFAULT absent
} WITH SYNTAX {
    IDENTIFIER &id
    [PARAMS [TYPE &Params] ARE &paramPresence ]
}


CompositeAlgorithmIdentifier ::= AlgorithmIdentifier{COMPOSITE-KEY-ALGORITHM, {CompositeAlgorithmSet}}

CompositeAlgorithmSet COMPOSITE-KEY-ALGORITHM ::= {
  CompositeAlgorithms, ...
}

--
-- Public Key
--

pk-Composite PUBLIC-KEY ::= {
    IDENTIFIER id-composite-key
    KEY CompositePublicKey
    PARAMS TYPE CompositeAlgorithmIdentifier ARE optional
    PRIVATE-KEY CompositePrivateKey
}

CompositePublicKey ::= SEQUENCE SIZE (2..MAX) OF SubjectPublicKeyInfo

CompositePublicKeyOs ::= OCTET STRING (CONTAINING CompositePublicKey ENCODED BY der)

CompositePublicKeyBs ::= BIT STRING (CONTAINING CompositePublicKey ENCODED BY der)

CompositePrivateKey ::= SEQUENCE SIZE (2..MAX) OF OneAsymmetricKey


-- pk-explicitComposite - Composite public key information object

pk-explicitComposite{OBJECT IDENTIFIER:id, PUBLIC-KEY:firstPublicKey,
  FirstPublicKeyType, PUBLIC-KEY:secondPublicKey, SecondPublicKeyType}
  PUBLIC-KEY ::= {
    IDENTIFIER id
    KEY ExplicitCompositePublicKey{firstPublicKey, FirstPublicKeyType,
      secondPublicKey, SecondPublicKeyType}
    PARAMS ARE absent
}

-- The following ASN.1 object class then automatically generates the
-- public key structure from the types defined in pk-explicitComposite.

-- ExplicitCompositePublicKey - The data structure for a composite
-- public key sec-composite-pub-keys and SecondPublicKeyType are needed
-- because PUBLIC-KEY contains a set of public key types, not a single
-- type.
-- TODO The parameters should be optional only if they are marked
-- optional in the PUBLIC-KEY


ExplicitCompositePublicKey{PUBLIC-KEY:firstPublicKey, FirstPublicKeyType,
  PUBLIC-KEY:secondPublicKey, SecondPublicKeyType} ::= SEQUENCE {
    firstPublicKey SEQUENCE {
        params firstPublicKey.&Params OPTIONAL,
        publicKey FirstPublicKeyType
    },
    secondPublicKey SEQUENCE {
        params secondPublicKey.&Params OPTIONAL,
        publicKey SecondPublicKeyType
    }
}

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>

</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>John Gray (Entrust),
Serge Mister (Entrust),
Scott Fluhrer (Cisco Systems),
Panos Kampanakis (Cisco Systems),
Daniel Van Geest (ISARA),
Tim Hollebeek (Digicert),
Klaus-Dieter Wirth (D-Trust), and
Francois Rousseau.</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-ounsworth-pq-composite-keys</t>

<!-- End of Contributors section -->

</section>
</section>


  </back>

<!-- ##markdown-source:
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
iB7ickooO8YSt89J9fNzdvKYAcn8u09aoqkgiwElp0rfxf+46Eo+ePkPvNNI
KFYu4uejwY6XTQ99Y8+mlvydqVNP/tTcJ/bPJg/P1ow7KzGyTfKSFM3QdeaD
MWgwuzb8ukWSH5OmTWlB3KfmJSq9nQjBQtk3Ziofj/dZV4zv6VBhrdp7rErw
sKzhilSwtPGrj8IF7LbB0y1BqpFvM24HGKqe0YrJTDzuxyR8K+boXWA/J7bO
YwKGJ4Dsuy2XiOeg2pzNVhv37T6ndWT3dDHTa7er27rcq66c1Xqzqq53jjuT
R1W51K6uV/J+tbqv9pqbfWM/b3Xsl/bHa74mj+Zt/ruekUdqfbSSG+/3w7Vr
BZP73PL+sC80++dmeV1ySvL9eFSb5LvVZ6s6ONde12r7+s1qFqc7d9RQ2vPM
/b0zmpb3rcn5zaFsPDyca43y2+u7urs17XG9VpMn7X19NH/AGdc7tS+PGtXq
SK6vVo2hDPdhBXYN/qjKfe9x1Cks1e5osOiWXua++vG0GCwaNbk58axVftB1
xtOhW3m8f7yaeJPco90bv7w9Z5rnnvfxcd0uztTmVOk1K7V9f7x46gbtqvrx
EawXrcmrdV0eBHb/fLAt7r2hfW5v9qXr8VTfVEtKRquMRrv5+PFjaLa7s9Ft
f/dSespXO92d8Tx9fmqvVq++k5sXnM641fm4ta7KD9eDbfPpozTt3Pf9dca6
vakXbzdbbT+at8r9rlfXh63FUttfyYeuO9yNuuZon1uPhx+5yvR9eXMwKvXX
VaXlP9zeNibX55mXxbJReGm9d+fdSd0vlv1J91YuOr3gvle/Gt4WrPnT4Hz1
kN/NH4tP6th5bo03r1vTuH8zaquSXs1sa6Vczt/mH0pupWveLnKOc/1+GPTa
N6+O8ziryfuGLI/+9CdGS41+/YiSiBvwIIOOieZYpcCC6pnIE3N3Sj/9PR1t
BzpPB1PuTnaBB1Z0sgMCY33fnzXij8JjuhqNkxFYJwmwO/Ib6MXy9a7AbzJF
5nip/6jz+gShb+U/iTz7r7po11MakU/rxLL7s273RwuGMT5bcUaSBDUqGd8J
WU/S53d3zHXi7z9FbKfZWrWr8gnWU4V7tWmtVh3N9qMRPTOtrtS39eZ1MIS/
q6vVW4b90atW9yOrVwP6HDUa7Vo/b6xr6mpVtm7lrr+p+JvRy9sq99RtbMt9
fdkzchutn79+qQS4gsaOraBfXW1gdOO+ss9XYaCmLE9q1c4KmN9kI6+A8G14
blRfNGc1//mqlq9vD+eZ+6fuc6+w/di+y6vqzH0o9evG9Wz2cZ17HJta3m3s
Ckq98aSY70u327s9N/pmqzorvlaXI68+eypkjBtDfu7d3thP73m7fB5M3bf6
8tXxvW79evj20BsMNrMrR9bvreWs0S02HtWP8qRWaAzri6Le9OXMxLgpmflC
wWi32zfKsthXJpvxwcs9VM4n+quzfvTOG4f162L+khvsK7uHB0tt3FfPp5Mb
+er1vXiVuVL7+55x/XGTr5VnvWFpNr3N5Wa3z+e39m5UKg3HN5PlsNoIdtun
q/f+0/h2UqzlVzdasJgZObn/lpl2169y5SPXfyk2X3d2TesWm5ppNZTH9/xL
u+zM12/2yh60Vi+rYJi7efFreic3KS/vc9cKGJKvmdfaoHStPD7Kq15VlhvI
x+WmP73uOtpLMLeX0/f1dc+uPKjn78v7ivr+ZEzeS81Rd9QAOtk/mZnp6Moy
n+vaeW18OL9pOh+3h+dJo9jq3u7L9fq8UioPDu3udXduFjvPq6eW0p0Nd+/V
w9t2+fim3Txkuvmx1TQGH++zyqr44laqs8Hr1e5m89a7evTbpc663Sm61tN2
GJxX6+pm+7EaVjrOFm4shoE8H2aMt9nLZPPuTGaeVpa7XW9TWeTfX8c3s8Z8
03Aei7ndYLw39MZ6sB12P4Ln9fnwPX9QdhvlY5rbzTLn65xbn9jdkXWzKy0f
vdGqrw0UZXCfW7X07X0QGN3hw4P5XH55ud5uvbbSeP047/U3eeWh3io6dqaz
kN1S9SZf0aaeNV/tbub+prGcHAZ6r6Gte4a3bxfUStPZjzrV1ah+vdFa21bN
1p/6/Z359j7L7Mo3+s1LXX6uy9dP6hJYieo18+ZN0W1fPdzag+G2qfSV2nbf
buXa6sf5y+Fm6Rbb8/fH10P9taZkPozbt6n1Wnzpa95NYT2bD9S363yQn6qT
R9e3VbnUerrp208Pb52yv+6bfUUp9K7Kt+q8ajv3dj9jq5PKYVnIvxV71Rff
aeaXanm4aC7P2ZKXhW5J1T9sfbHoT5V+qWMrzkFtPb937I9h8X7fzriF8nw8
f/XzL07L87XZUK6Ogr3ZrdSC7nl5VLh5HBu924I6e+wvm171o9N+ni9ywyoQ
fv28vh1n3u7N6fXuOpg9za9fjeVs1XhdHobvg7z9cNW7Vmvr1jg33TmbaXly
UBr7ltNu3bT150WvqU7K29J9ZjvpVxu1QW6IS67V8zW7NS3c21dTszI07ffD
fq/OV9PcTatSU3e1xsfyYe8VKnahoW0eW6W3ICOXthtb73mz2juIupVuV4xq
d/bW8RY37nu/Y3Umi95g+vL07L2N8zeNfufZaq+Nx4fZqNpZv9y0Mkb+4/VQ
vL59kt87en/S8nr7ZqlTtBo36m7euC05r+0b6/FQfptPtu5UXq5yt3Jv3HFk
+x6Up9x9Zt+/fvIalcdtudpVHDuv9ma1XFNrNuVDo6fNnapulLTaw7PRWS3P
b7bG48FZtnNaYz80/Jdb9ykz7wzXSqu10rtvN2rxIXiR7fxgV2yPb68KvWpj
/lH42Pm7bdBXNeXWmJW8Wne664773cpYLzgfm4ynLR/coVUM1q2r92X/7f68
YI+eX65qvUXduO0oOSVfdTy/QksejkvO9VM/r9gvpu0dptf9dqa0ffvo77qN
UqeqeNul3dtOH4z1zVttePVcct60ldHOT1690eg+dx74ra79II/3H+un1uBl
WXjobDL1W3Py0MoXVSf3YrmvVnk/dJbzTtdZP1SNzmS4P7Rfg+ZeHRfUzW1p
0Nfnb6VioV9/W96Yz4vde8buvb1Oh8rqeeZ8tHZ7M6i/+hPj9lzQnNLS8K+r
OiUMwKO6/lCB4E3X76R8aPadqAO/E1ppnJo9MhhP61BS0gL9vholLuCHKtR/
/bZcT4+1rNMbO1K0Ulv6KSXrdMfG75mKp61kLGr3gq3Qvj32gFHbnNBdlTDI
71L9a8mRRSNmGzXF0sYT+bNUWKkgFaUrqQQbyZx6LeWcPOk55V1bT03L0CkQ
F7uAT6rsZ0IPju7C1QvBDyh80YByM+kLobuwiEnoW6N4n3QLEfsZn1J1TxjY
m6ncrK56b/J+BGbr/T2arfK8sX+aHmu2sWLbr8nAJTLz8/tAL7cXldtFtz6b
XV0/b1uARPmlKT90R15TVxs35eKguX99e1OfXwbnvjy216u5YlaHlqx1Mze7
7ra9scr56fZt2DzkDk/rBq6q/XpK8x2AKg1iAe7XVh1Uq+VM8f1Rdh8re18u
e7u1aRQ++i9e2Ru15cfOQa+PSoHZ7J3vCrOXZ63z3q08rd6bW0d9vj58DIf2
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
0GW7AAA=

-->

</rfc>

