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


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

<!ENTITY RFC1421 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1421.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2986 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2986.xml">
<!ENTITY RFC5280 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml">
<!ENTITY RFC5480 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5480.xml">
<!ENTITY RFC5639 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5639.xml">
<!ENTITY RFC5652 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5652.xml">
<!ENTITY RFC5914 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5914.xml">
<!ENTITY RFC5958 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5958.xml">
<!ENTITY RFC5990 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5990.xml">
<!ENTITY RFC6090 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6090.xml">
<!ENTITY RFC7468 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7468.xml">
<!ENTITY RFC7748 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7748.xml">
<!ENTITY RFC8017 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8017.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8410 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8410.xml">
<!ENTITY RFC8411 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8411.xml">
<!ENTITY I-D.draft-ounsworth-pq-composite-sigs-05 SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ounsworth-pq-composite-sigs-05.xml">
<!ENTITY I-D.draft-ounsworth-pq-composite-kem-00 SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ounsworth-pq-composite-kem-00.xml">
<!ENTITY I-D.draft-ietf-lamps-dilithium-certificates-00 SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-lamps-dilithium-certificates-00.xml">
<!ENTITY I-D.draft-ietf-lamps-cms-sphincs-plus-01 SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-lamps-cms-sphincs-plus-01.xml">
<!ENTITY I-D.draft-ietf-lamps-kyber-certificates-00 SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-lamps-kyber-certificates-00.xml">
<!ENTITY RFC4210 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4210.xml">
<!ENTITY RFC4211 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4211.xml">
<!ENTITY RFC7292 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7292.xml">
<!ENTITY RFC7296 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7296.xml">
<!ENTITY RFC8446 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml">
<!ENTITY RFC8551 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8551.xml">
<!ENTITY I-D.draft-becker-guthrie-noncomposite-hybrid-auth-00 SYSTEM "https://bib.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://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-guthrie-ipsecme-ikev2-hybrid-auth-00.xml">
<!ENTITY I-D.draft-driscoll-pqt-hybrid-terminology-01 SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-driscoll-pqt-hybrid-terminology-01.xml">
]>


<rfc ipr="trust200902" docName="draft-ounsworth-pq-composite-keys-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <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="J." surname="Gray" fullname="John Gray">
      <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>john.gray@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="2023" month="March" day="13"/>

    <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 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 using either a Post-Quantum / Traditional Hybrid, Post-Quantum / Post-Quantum Hybrid, or combinations thereof. This document, and its companions, defines a specific instantiation of 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>This document defines the structures CompositePublicKey and CompositePrivateKey, which are sequences of the respective structure for each component algorithm. Explicit pairings of algorithms are defined which should meet most Internet needs. The generic composite key type is also 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.</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 <xref target="I-D.ounsworth-pq-composite-sigs"/> and <xref target="I-D.ounsworth-pq-composite-kem"/>.</t>

<!-- End of Abstract -->



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ounsworth-pq-composite-keys/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Limited Additional Mechanisms for PKIX and SMIME (lamps) Working Group mailing list (<eref target="mailto:spasm@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/spasm/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/spasm/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/EntrustCorporation/draft-ounsworth-pq-composite-keys"/>.</t>
    </note>


  </front>

  <middle>


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

<t><list style="symbols">
  <t>General restructuring of the document.</t>
  <t>Aligned composite pairings with OpenPGP () and JOSE/COSE WGs, particularly draft-wussler-openpgp-pqc-00.</t>
  <t>We have dropped the MAY / RECOMMENDED column as well as per-algorithm usage guidance because in the end we think it does not belong at the X.509 level because we believe these recommendations belong at the application profile level; for example what is RECOMMENDED for X.509-based client authentication may be very different from what is RECOMMENDED for X.509-based code-signing.</t>
  <t>Renamed &quot;id-SPHINCSsha256256frobust-ECDSA-P256&quot; to &quot;id-SPHINCSplusSHA256-ECDSA-P256&quot; because the public key format does not depend on the signature algorithm parameters.</t>
  <t>The following algorithms were removed:
  <list style="symbols">
      <t>pk-example-ECandRSA</t>
      <t>id-Dilithium5-Falcon1024-ECDSA-P521</t>
      <t>id-Dilithium5-Falcon1024-RSA</t>
      <t>id-Kyber512-RSA</t>
    </list></t>
  <t>The following algorithms were added:
  <list style="symbols">
      <t>id-Dilithium3-EDSA-brainpoolP256r1</t>
      <t>id-Dilithium3-Ed25519</t>
      <t>id-Dilithium5-ECDSA-P384</t>
      <t>id-Dilithium5-ECDSA-brainpoolP384r1</t>
      <t>id-Dilithium5-Ed448</t>
      <t>id-Falcon512-ECDSA-brainpoolP256r1</t>
      <t>id-SPHINCSplusSHA256-ECDSA-brainpoolP256r1</t>
      <t>id-SPHINCSplusSHA256-Ed25519</t>
      <t>id-Kyber512-ECDH-brainpoolP256r1-KMAC128</t>
      <t>id-Kyber768-RSA-KMAC256</t>
      <t>id-Kyber768-ECDH-P256-KMAC256</t>
      <t>id-Kyber768-ECDH-brainpoolP256r1-KMAC256</t>
      <t>id-Kyber768-X25519-KMAC256</t>
      <t>id-Kyber1024-ECDH-P384-KMAC256</t>
      <t>id-Kyber1024-ECDH-brainpoolP384r1-KMAC256</t>
      <t>id-Kyber1024-X448-KMAC256</t>
    </list></t>
  <t>Changed &quot;examples&quot; to &quot;samples&quot; when referring to <xref target="appdx-samples"/>.</t>
</list></t>

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

<t>During the transition to post-quantum cryptography (PQ or PQC), 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 by using a Post-Quantum/Traditional (PQ/T) or Post-Quantum/Post-Quantum (PQ/PQ) Hybrid scheme.</t>

<t>The transition to PQC 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 traditional to fully post-quantum-aware cryptography.</t>
</list></t>

<t>This document provides the composite mechanism, which is a specific instantiation of the PQ/T hybrid paradigm 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 only specifies key formats; usage of these keys are covered in the corresponding composite signatures <xref target="I-D.ounsworth-pq-composite-sigs"/> and composite KEM <xref target="I-D.ounsworth-pq-composite-kem"/> specifications.</t>

<t>This document is intended for general applicability anywhere that keys are used within PKIX or CMS structures.</t>

<section anchor="algorithm-selection-criteria"><name>Algorithm Selection Criteria</name>

<t>The composite algorithm combinations defined in this document were chosen according to the following guidelines:</t>

<t><list style="numbers">
  <t>A single RSA combination is provided (but RSA modulus size not mandated), matched with NIST PQC Level 3 algorithms.</t>
  <t>Elliptic curve algorithms are provided with combinations on each of the NIST <xref target="RFC6090"></xref>, Brainpool <xref target="RFC5639"></xref>, and Edwards <xref target="RFC7748"></xref> curves. NIST PQC Levels 1 - 3 algorithms are matched with 256-bit curves, while NIST levels 4 - 5 are matched with 384-bit elliptic curves. This provides a balance between matching classical security levels of post-quantum and traditional algorithms, and also selecting elliptic curves which already have wide adoption.</t>
  <t>NIST level 1 candidates (Falcon512 and Kyber512) are provided, matched with 256-bit elliptic curves, intended for constrained use cases.</t>
  <t>A single SPHINCS+ combination is provided for use cases that wish to put hash-based signatures into hybrid combination.</t>
  <t>A generic composite algorithm is provided for implementers who wish to use combinations not listed here, without the overhead of defining new OIDs. Caution should be exercised to avoid issues with compatibility and complex cryptographic policy mechanisms.</t>
</list></t>

<t>The authors wish to note that although all the composite structures defined in this and the companion composite signatures <xref target="I-D.ounsworth-pq-composite-sigs"/> and composite KEM <xref target="I-D.ounsworth-pq-composite-kem"/> specifications are defined in such a way as to easily allow 3 or more component algorithms, it was decided to only specify explicit pairs. The generic composite specified in this document allows for an arbitrary number of components. This also does not preclude future specification of explicit combinations with three or more components.</t>

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

<t>This document is consistent with all terminology from <xref target="I-D.driscoll-pqt-hybrid-terminology"/>.</t>

<t>In addition, the following terms are used in this document:</t>

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

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

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

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

<!-- End of Introduction section -->

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

<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><xref target="I-D.driscoll-pqt-hybrid-terminology"/> defines composites as:</t>

<ul empty="true"><li>
  <t><em>Composite Cryptographic Element</em>:  A cryptographic element that
     incorporates multiple component cryptographic elements of the same
     type in a multi-algorithm scheme.</t>
</li></ul>

<t>Composite keys as defined here follow this definition and should be regarded as a single key that performs a single cryptographic operation such key generation, 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 and should be ignored by application and protocol layers and deferred to the cryptographic library layer.</t>

<section anchor="pk-composite"><name>pk-Composite</name>

<t>The following ASN.1 Information Object Class applies to all composite key types, with suitable replacements for the ASN.1 identifier <spanx style="verb">pk-Composite</spanx> and the OID <spanx style="verb">id-composite-key</spanx> as appropriate. See the ASN.1 Module in <xref target="sec-asn1-module"/> for parmeterized as well as signature and KEM versions.</t>

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

<t><spanx style="verb">keyUsage</spanx> is omitted here because composites may be formed for keys of any type, provided that any key usage specified MUST apply to all component keys. Composites MAY NOT be used to combine key types, for example to make a &quot;dual-usage&quot; key by combining a signing key with a KEM key.</t>

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

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

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

<t>A composite key MUST contain at least two component public keys. When the composite key is used in conjunction with an explicit composite algorithm identifier defined under section <xref target="sec-alg-ids"/>, the order of the component keys is determined by that algorithm identifier&#39;s definition.</t>

<t>A CompositePublicKey MUST NOT contain a component public key which itself describes a composite key; i.e. recursive CompositePublicKeys are not allowed. The purpose is a general reduction in complexity by not needing to consider nested key types.</t>

<t>Each element of a CompositePublicKey is a SubjectPublicKeyInfo object encoding a component public key. 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="sec-alg-ids"/> for specific algorithms defined in this document.</t>

<t>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 anchor="sec-keyusage"><name>Key Usage</name>

<t>Protocols such as X.509 <xref target="RFC5280"></xref> that specify a key usage along with the public key. For composite keys, a single key usage is specified for the entire public key and it MUST apply to all component keys. For example if a composite key is marked with a key usage of digitalSignature, then all component keys MUST be capable of producing digital signatures and handled with policies appropriate for digital signature keys. 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>

<t>Specifications of explicit composite key types must specify allowable key usages for that type based on the types of the components.</t>

</section>
<section anchor="sec-component-matching"><name>Component Matching</name>

<t>Many cryptographic libraries will require treating each component key independently and thus expect a full SubjectPublicKeyInfo for each component at some layer of the software stack. This left two design choices: either we carry full SPKI for each component within the CompositePublicKey, or we compress it by only carrying the raw key bytes and force implementations to carry OID and parameter mapping tables to be able to reconstruct component SPKIs.</t>

<t>The authors decided to carry the full SPKIs in order to lessen the implementation complexity at the expense of a small amount of redundant data to transmit. This also leads to the same wire format between explicitly specified combinations and generic composites where the component OIDs cannot be infered and thus must be carried.</t>

<t>This design choice has a non-obvious security risk in that the <spanx style="verb">algorithm</spanx> carried within each component SPKI is redundant information which MUST match -- and can be inferred from -- the specification of the explicit algorithm.</t>

<t>Security consideration: Implementations SHOULD 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 <spanx style="verb">SubjectPublicKeyInfo.algorithm</spanx>, and ensure that it matches what is expected for that position in the explicit key, and then proceed to parse the <spanx style="verb">SubjectPublicKeyInfo.subjectPublicKey</spanx>. 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 SHOULD be done when handling the corresponding private key.</t>

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

<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><sourcecode type="ASN.1" name="CompositePrivateKey-asn.1-structures"><![CDATA[
CompositePrivateKey ::= SEQUENCE SIZE (2..MAX) OF OneAsymmetricKey
]]></sourcecode></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 the order of the component keys is the same as the order defined in <xref target="sec-composite-pub-keys"/> for the components of CompositePublicKey.</t>

</section>
<section anchor="sec-as-one-asymmetric-key"><name>As a PrivateKeyInfo or OneAsymmetricKey</name>

<t>A CompositePrivateKey can be stored in a OneAsymmetricKey structure (version 1 of which is also known as PrivateKeyInfo) <xref target="RFC5958"></xref>. When this is done, the privateKeyAlgorithm field SHALL be set to the corresponding composite algorithm identifier defined according to <xref target="sec-alg-ids"/>, the privateKey field SHALL contain the CompositePrivateKey, and the publicKey field MUST NOT be present. Associated public key material MAY be present in the CompositePrivateKey.</t>

</section>
<section anchor="sec-encoding-rules"><name>Encoding Rules</name>
<!-- 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><sourcecode type="ASN.1"><![CDATA[
CompositePublicKeyOs ::= OCTET STRING (CONTAINING CompositePublicKey ENCODED BY der)
]]></sourcecode></figure>

<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><sourcecode type="ASN.1"><![CDATA[
CompositePublicKeyBs ::= BIT STRING (CONTAINING CompositePublicKey ENCODED BY der)
]]></sourcecode></figure>

</section>
</section>
<section anchor="sec-alg-ids"><name>Algorithm Identifiers</name>

<t>This section defines algorithm identifiers, component algorithms and their ordering for composite combinations. The combinations registered in this section are intended to strike a balance between the overall number of combinations (&quot;the combinatorial explosion problem&quot;), while also covering the needs of a wide range of protocols, applications, and regulatory environments in which X.509-based technologies are used.</t>

<t>This section is not intended to be exhaustive and other authors may define OIDs for new combinations so long as they are compatible with the structures and processes defined in this and the companion signature and encryption documents.</t>

<section anchor="signature-public-key-types"><name>Signature public key types</name>

<t>This table summarizes the list of explicit composite Signature algorithms by the key and signature OID and the two component algorithms which make up the explicit composite algorithm.  These are denoted by First Signature Alg, and Second Signature Alg.</t>

<t>The OID referenced are TBD and MUST be used only for prototyping and replaced with the final IANA-assigned OIDS. The following prefix is used for each: replace &lt;CompSig&gt; with the String &quot;2.16.840.1.114027.80.5.1&quot;</t>

<t>Therefore &lt;CompSig&gt;.1 is equal to 2.16.840.1.114027.80.5.1.1</t>

<t>Note that a single OID is used for both the key type and the signature algorithm; ie there is a one-to-one correspondance between key types and signature algorithms, hence why these key type names contain more information than they strictly need to define a key type.</t>

<texttable>
      <ttcol align='left'>Composite Signature Key Type</ttcol>
      <ttcol align='left'>OID</ttcol>
      <ttcol align='left'>First Key Type</ttcol>
      <ttcol align='left'>Second Key Type</ttcol>
      <c>id-Dilithium3-RSA-PSS</c>
      <c>&lt;CompSig&gt;.14</c>
      <c>Dilithium3</c>
      <c>RSASSA-PSS</c>
      <c>id-Dilithium3-RSA-PKCS15-SHA256</c>
      <c>&lt;CompSig&gt;.1</c>
      <c>Dilithium3</c>
      <c>RSAES-PKCS-v1_5</c>
      <c>id-Dilithium3-ECDSA-P256-SHA256</c>
      <c>&lt;CompSig&gt;.2</c>
      <c>Dilithium3</c>
      <c>EC-P256</c>
      <c>id-Dilithium3-ECDSA-brainpoolP256r1-SHA256</c>
      <c>&lt;CompSig&gt;.3</c>
      <c>Dilithium3</c>
      <c>EC-brainpoolP256r1</c>
      <c>id-Dilithium3-Ed25519</c>
      <c>&lt;CompSig&gt;.4</c>
      <c>Dilithium3</c>
      <c>Ed25519</c>
      <c>id-Dilithium5-ECDSA-P384-SHA384</c>
      <c>&lt;CompSig&gt;.5</c>
      <c>Dilithium5</c>
      <c>EC-P384</c>
      <c>id-Dilithium5-ECDSA-brainpoolP384r1-SHA384</c>
      <c>&lt;CompSig&gt;.6</c>
      <c>Dilithium5</c>
      <c>EC-brainpoolP384r1</c>
      <c>id-Dilithium5-Ed448</c>
      <c>&lt;CompSig&gt;.7</c>
      <c>Dilithium5</c>
      <c>Ed448</c>
      <c>id-Falcon512-ECDSA-P256-SHA256</c>
      <c>&lt;CompSig&gt;.8</c>
      <c>Falcon512</c>
      <c>EC-P256</c>
      <c>id-Falcon512-ECDSA-brainpoolP256r1-SHA256</c>
      <c>&lt;CompSig&gt;.9</c>
      <c>Falcon512</c>
      <c>EC-brainpoolP256r1</c>
      <c>id-Falcon512-Ed25519</c>
      <c>&lt;CompSig&gt;.10</c>
      <c>Falcon512</c>
      <c>Ed25519</c>
      <c>id-SPHINCSplusSHA256128sSimple-ECDSA-P256-SHA256</c>
      <c>&lt;CompSig&gt;.11</c>
      <c>SPHINCSplusSHA256128sSimple</c>
      <c>EC-P256</c>
      <c>id-SPHINCSplusSHA256128sSimple-ECDSA-brainpoolP256r1-SHA256</c>
      <c>&lt;CompSig&gt;.12</c>
      <c>SPHINCSplusSHA256128sSimple</c>
      <c>EC-brainpoolP256r1</c>
      <c>id-SPHINCSplusSHA256128sSimple-Ed25519</c>
      <c>&lt;CompSig&gt;.13</c>
      <c>SPHINCSplusSHA256128sSimple</c>
      <c>Ed25519</c>
      <c>id-composite-sig</c>
      <c>(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) OpenCA(18227) Algorithms(2) id-alg-composite(1)</c>
      <c>Any</c>
      <c>Any</c>
</texttable>

<t>The table above contains everything needed to implement the listed explicit composite algorithms. See the ASN.1 module in section <xref target="sec-asn1-module"/> for the explicit definitions of the above Composite signature algorithms.</t>

<t>Full specifications for the referenced algorithms can be found as follows:</t>

<t><list style="symbols">
  <t><em>Dilithium</em>: <xref target="I-D.ietf-lamps-dilithium-certificates"/></t>
  <t><em>EC</em>: <xref target="RFC5480"></xref>
  <list style="symbols">
      <t><em>EC-P256</em>: AlgorithmIdentifier.parameters MUST be <spanx style="verb">secp256r1</spanx> as defined in <xref target="RFC5480"></xref>.</t>
      <t><em>EC-brainpoolP256r1</em>: AlgorithmIdentifier.parameters MUST be <spanx style="verb">brainpoolP256r1</spanx> as defined in <xref target="RFC5639"></xref>.</t>
      <t><em>EC-P384</em>: AlgorithmIdentifier.parameters MUST be <spanx style="verb">secp384r1</spanx> as defined in <xref target="RFC5480"></xref>.</t>
      <t><em>EC-brainpoolP384r1</em>: AlgorithmIdentifier.parameters MUST be <spanx style="verb">brainpoolP384r1</spanx> as defined in <xref target="RFC5639"></xref>.</t>
    </list></t>
  <t><em>Ed25519 / Ed448</em>: <xref target="RFC8410"></xref></t>
  <t><em>Falcon</em>: TBD</t>
  <t><em>RSAES-PKCS-v1_5</em>: <xref target="RFC8017"></xref></t>
  <t><em>RSASSA-PSS</em>: <xref target="RFC8017"></xref></t>
  <t><em>SPHICNCSplus</em>: <xref target="I-D.ietf-lamps-cms-sphincs-plus"/></t>
</list></t>

<t>The intended application for the key is indicated in the keyUsage certificate extension; see Section 4.2.1.3 of <xref target="RFC5280"></xref>. If the keyUsage extension is present in a certificate that indicates signature public key types above in the SubjectPublicKeyInfo, then the at least one of following MUST be present:</t>

<figure><artwork><![CDATA[
  digitalSignature; or
  nonRepudiation; or
  keyCertSign; or
  cRLSign.
]]></artwork></figure>

<t>Requirements about the keyUsage extension bits defined in <xref target="RFC5280"></xref> still apply.</t>

</section>
<section anchor="kem-public-key-types"><name>KEM public key types</name>

<t>This table summarizes the list of explicit composite Signature algorithms by the key and signature OID and the two component algorithms which make up the explicit composite algorithm.  These are denoted by First Signature Alg, and Second Signature Alg.</t>

<t>The OID referenced are TBD and MUST be used only for prototyping and replaced with the final IANA-assigned OIDS. The following prefix is used for each: replace &lt;CompKEM&gt; with the String &quot;2.16.840.1.114027.80.5.2&quot;</t>

<t>Therefore &lt;CompKEM&gt;.1 is equal to 2.16.840.1.114027.80.5.2.1.</t>

<t>Note that a single OID is used for both the key type and the KEM algorithm; ie there is a one-to-one correspondance between key types and KEM algorithms, hence why these key type names contain more information than they strictly need to define a key type.</t>

<texttable title="Composite KEM key types" anchor="tab-kem-agls">
      <ttcol align='left'>Composite KEM Key Type</ttcol>
      <ttcol align='left'>OID</ttcol>
      <ttcol align='left'>First Key Type</ttcol>
      <ttcol align='left'>Second Key Type</ttcol>
      <ttcol align='left'>&#160;</ttcol>
      <c>id-Kyber512-ECDH-P256-KMAC128</c>
      <c>&lt;CompKEM&gt;.1</c>
      <c>Kyber512</c>
      <c>EC-P256</c>
      <c>&#160;</c>
      <c>id-Kyber512-ECDH-brainpoolP256r1-KMAC128</c>
      <c>&lt;CompKEM&gt;.2</c>
      <c>Kyber512</c>
      <c>EC-brainpoolP256r1</c>
      <c>&#160;</c>
      <c>id-Kyber512-X25519-KMAC128</c>
      <c>&lt;CompKEM&gt;.3</c>
      <c>Kyber512</c>
      <c>X25519</c>
      <c>&#160;</c>
      <c>id-Kyber768-RSA-KMAC256</c>
      <c>&lt;CompKEM&gt;.4</c>
      <c>Kyber768</c>
      <c>RSA-KEM</c>
      <c>&#160;</c>
      <c>id-Kyber768-ECDH-P256-KMAC256</c>
      <c>&lt;CompKEM&gt;.5</c>
      <c>Kyber768</c>
      <c>EC-P256</c>
      <c>&#160;</c>
      <c>id-Kyber768-ECDH-brainpoolP256r1-KMAC256</c>
      <c>&lt;CompKEM&gt;.6</c>
      <c>Kyber768</c>
      <c>EC-brainpoolP256r1</c>
      <c>&#160;</c>
      <c>id-Kyber768-X25519-KMAC256</c>
      <c>&lt;CompKEM&gt;.7</c>
      <c>Kyber768</c>
      <c>X25519</c>
      <c>&#160;</c>
      <c>id-Kyber1024-ECDH-P384-KMAC256</c>
      <c>&lt;CompKEM&gt;.8</c>
      <c>Kyber1024</c>
      <c>EC-P384</c>
      <c>&#160;</c>
      <c>id-Kyber1024-ECDH-brainpoolP384r1-KMAC256</c>
      <c>&lt;CompKEM&gt;.9</c>
      <c>Kyber1024</c>
      <c>EC-brainpoolP384r1</c>
      <c>&#160;</c>
      <c>id-Kyber1024-X448-KMAC256</c>
      <c>&lt;CompKEM&gt;.10</c>
      <c>Kyber1024</c>
      <c>X448</c>
      <c>&#160;</c>
      <c>id-composite-kem-KMAC128</c>
      <c>2.16.840.1.114027.80.4.1</c>
      <c>Any</c>
      <c>Any</c>
      <c>&#160;</c>
      <c>id-composite-kem-KMAC256</c>
      <c>2.16.840.1.114027.80.4.1  NEEDS NEW OID</c>
      <c>Any</c>
      <c>Any</c>
      <c>&#160;</c>
</texttable>

<t>The table above contains everything needed to implement the listed explicit composite algorithms. See the ASN.1 module in section <xref target="sec-asn1-module"/> for the explicit definitions of the above Composite signature algorithms.</t>

<t>Full specifications for the referenced algorithms can be found as follows:</t>

<t><list style="symbols">
  <t><em>EC</em>: <xref target="RFC5480"></xref>
  <list style="symbols">
      <t><em>EC-P256</em>: AlgorithmIdentifier.parameters within the component SKPI belonging to the EC key MUST be <spanx style="verb">secp256r1</spanx> as defined in <xref target="RFC5480"></xref>.</t>
      <t><em>EC-brainpoolP256r1</em>: AlgorithmIdentifier.parameters within the component SKPI belonging to the EC key MUST be <spanx style="verb">brainpoolP256r1</spanx> as defined in <xref target="RFC5639"></xref>.</t>
      <t><em>EC-P384</em>: AlgorithmIdentifier.parameters within the component SKPI belonging to the EC key MUST be <spanx style="verb">secp384r1</spanx> as defined in <xref target="RFC5480"></xref>.</t>
      <t><em>EC-brainpoolP384r1</em>: AlgorithmIdentifier.parameters within the component SKPI belonging to the EC key MUST be <spanx style="verb">brainpoolP384r1</spanx> as defined in <xref target="RFC5639"></xref>.</t>
    </list></t>
  <t><em>Kyber</em>: <xref target="I-D.ietf-lamps-kyber-certificates"/></t>
  <t><em>RSA-KEM</em>: <xref target="RFC5990"></xref></t>
  <t><em>X25519 / X448</em>: <xref target="RFC8410"></xref></t>
</list></t>

<t>Note: the inclusion of a hash function is so that these algorithm identifiers can double as both key types and KEM algorithms.</t>

<t>The intended application for the key is indicated in the keyUsage certificate extension; see Section 4.2.1.3 of <xref target="RFC5280"></xref>. If the keyUsage extension is present in a certificate that indicates any of the KEM public key types above in the SubjectPublicKeyInfo, then the following MUST be present:</t>

<figure><artwork><![CDATA[
  keyEncipherment
]]></artwork></figure>

<t>Requirements about the keyUsage extension bits defined in <xref target="RFC5280"></xref> still apply.</t>

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

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


-- command for easily copying it into a compiler (ubuntu with xclip)
-- cat ASN1ModuleIncludes.asn Composite-Keys-2023.asn | xclip -sel clip


Composite-Keys-2023
           {iso(1) identified-organization(3) dod(6) internet(1) security(5)
       mechanisms(5) pkix(7) id-mod(0) id-mod-composite-keys(98)}

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


  NamedCurve
    FROM PKIXAlgs-2009 { iso(1) identified-organization(3) dod(6)
     internet(1) security(5) mechanisms(5) pkix(7) id-mod(0)
     id-mod-pkix1-algorithms2008-02(56) }


  pk-Ed25519, pk-X25519, pk-X448
    FROM Safecurves-pkix-18
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-safecurves-pkix(93) } ;


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

-- TODO: 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 ]
}

--
-- Public Key
--

-- Generic Composite

-- TODO: 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) }


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

--
-- Composite public key information objects
--


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

pk-explicitCompositeSignature{OBJECT IDENTIFIER:id, PUBLIC-KEY:firstPublicKey,
  FirstPublicKeyType, PUBLIC-KEY:secondPublicKey, SecondPublicKeyType}
  PUBLIC-KEY ::= {
    IDENTIFIER id
    KEY ExplicitCompositePublicKey{firstPublicKey, FirstPublicKeyType,
      secondPublicKey, SecondPublicKeyType}
    PARAMS ARE absent
    CERT-KEY-USAGE { digitalSignature, nonRepudiation, keyCertSign, cRLSign }
}

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


-- TODO this is one possible way to reference specific named curves.
-- But I don't think this compiles.

--pk-ECDSA-P256 PUBLIC-KEY ::= {
-- IDENTIFIER id-ecPublicKey
--  KEY ECPoint
--  PARAMS TYPE NamedCurve.secp256r1 ARE required }
--
--pk-ECDSA-brainpoolP256r1 PUBLIC-KEY ::= {
-- IDENTIFIER id-ecPublicKey
--  KEY ECPoint
--  PARAMS NamedCurve{brainpoolP256r1} }
--
--pk-ECDSA-P384 PUBLIC-KEY ::= {
-- IDENTIFIER id-ecPublicKey
--  KEY ECPoint
--  PARAMS TYPE NamedCurve{secp384r1} }
--
--pk-ECDSA-brainpoolP384r1 PUBLIC-KEY ::= {
-- IDENTIFIER id-ecPublicKey
--  KEY ECPoint
--  PARAMS NamedCurve{brainpoolP384r1} }



-- Explicit Composite Signature Keys

-- TODO: To be replaced by IANA
id-Dilithium3-RSA-PSS OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) signature(1) dilithium3-rsa-pss(14) }

pk-Dilithium3-RSA-PSS PUBLIC-KEY ::= 
  pk-explicitCompositeSignature{id-Dilithium3-RSA-PSS, pk-Dilithium3TBD,
  OCTET STRING, pk-rsaSSA-PSS, OCTET STRING}


-- TODO: To be replaced by IANA
id-Dilithium3-RSA-PKCS15-SHA256 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) signature(1) dilithium3-rsa(1) }

pk-Dilithium3-RSA-PKCS15-SHA256 PUBLIC-KEY ::= 
  pk-explicitCompositeSignature{id-Dilithium3-RSA-PKCS15-SHA256, 
  pk-Dilithium3TBD, OCTET STRING, pk-rsa, RSAPublicKey}


-- TODO: To be replaced by IANA
id-Dilithium3-ECDSA-P256-SHA256 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) signature(1) dilithium3-rsa(2) }

pk-Dilithium3-ECDSA-P256-SHA256 PUBLIC-KEY ::= 
  pk-explicitCompositeSignature{id-Dilithium3-ECDSA-P256-SHA256, 
  pk-Dilithium3TBD, OCTET STRING, pk-ECDSA-P256, ECPoint}

--TODO: this is missing `PARAMS secp256r1`

  
-- TODO: To be replaced by IANA
id-Dilithium3-ECDSA-brainpoolP256r1 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) signature(1)  
  dilithium3-ecdsa-brainpoolp256r1(3) }

pk-Dilithium3-ECDSA-brainpoolP256r1 PUBLIC-KEY ::= 
  pk-explicitCompositeSignature{id-Dilithium3-ECDSA-brainpoolP256r1, 
  pk-Dilithium3TBD, OCTET STRING, pk-ec, ECPoint}

--TODO: this is missing `PARAMS brainpoolP256r1`


-- TODO: To be replaced by IANA
id-Dilithium3-Ed25519 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) signature(1) dilithium3-ed25519(4) }

pk-Dilithium3-Ed25519 PUBLIC-KEY ::= 
  pk-explicitCompositeSignature{id-Dilithium3-Ed25519, 
  pk-Dilithium3TBD, OCTET STRING, pk-Ed25519, OCTET STRING}


-- TODO: To be replaced by IANA
id-Dilithium5-ECDSA-P384 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) signature(1) dilithium5-ecdsa-p384(5) }

pk-Dilithium5-ECDSA-P384 PUBLIC-KEY ::= 
  pk-explicitCompositeSignature{id-Dilithium5-ECDSA-P384, 
  pk-Dilithium5TBD, OCTET STRING, pk-ec, ECPoint}

--TODO: this is missing `PARAMS secp384r1`


-- TODO: To be replaced by IANA
id-Dilithium5-ECDSA-brainpoolP384r1 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) signature(1) dilithium5-ecdsa-brainpoolp384r1(6) }

pk-Dilithium5-ECDSA-brainpoolP384r1 PUBLIC-KEY ::= 
  pk-explicitCompositeSignature{id-Dilithium5-ECDSA-brainpoolP384r1, 
  pk-Dilithium5TBD, OCTET STRING, pk-ec, ECPoint}

--TODO: this is missing `PARAMS brainpoolP384r1`



-- TODO: To be replaced by IANA
id-Dilithium5-Ed448 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) signature dilithium5-ed448(7) }

pk-Dilithium5-Ed448 PUBLIC-KEY ::= 
  pk-explicitCompositeSignature{id-Dilithium5-Ed448, 
  pk-Dilithium5TBD, OCTET STRING, pk-Ed25519, OCTET STRING}

--TODO: I have a question out to LAMPS about why there is no pk-Ed448. See: https://mailarchive.ietf.org/arch/msg/spasm/bJHcxCA3bXoqKHqXnZ85Vrixu68/


-- TODO: To be replaced by IANA
id-Falcon512-ECDSA-P256-SHA256 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) signature falcon512-ecdsa-p256-sha256(8) }

pk-Falcon512-ECDSA-P256-SHA256 PUBLIC-KEY ::= 
  pk-explicitCompositeSignature{id-Falcon512-ECDSA-P256-SHA256, 
  pk-falcon512TBD, OCTET STRING, pk-ec, ECPoint}

--TODO: this is missing `PARAMS secp256r1`


-- TODO: To be replaced by IANA
id-Falcon512-ECDSA-brainpoolP256r1-SHA256 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) signature(1) falcon512-ecdsa-brainpoolp256r1-sha256(9) }

pk-Falcon512-ECDSA-brainpoolP256r1-SHA256 PUBLIC-KEY ::= 
  pk-explicitCompositeSignature{id-Falcon512-ECDSA-brainpoolP256r1-SHA256, 
  pk-falcon512TBD, OCTET STRING, pk-ec, ECPoint}

--TODO: this is missing `PARAMS brainpoolp256r1`



-- TODO: To be replaced by IANA
id-Falcon512-Ed25519 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) signatur(1) falcon512-ed25519(10) }

pk-Falcon512-Ed25519 PUBLIC-KEY ::= 
  pk-explicitCompositeSignature{id-Falcon512-Ed25519, 
  pk-falcon512TBD, OCTET STRING, pk-Ed25519, OCTET STRING}



-- TODO: To be replaced by IANA
id-SPHINCSplusSHA256128sSimple-ECDSA-P256-SHA256 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) signature(1) sphincsplussha256128ssimple-ecdsa-p256-sha256(11) }

pk-SPHINCSplusSHA256-ECDSA-P256 PUBLIC-KEY ::= 
  pk-explicitCompositeSignature{id-SPHINCSplusSHA256-ECDSA-P256, 
  pk-sphincs-plus-256, SPHINCS-Plus-PublicKey, pk-ec, ECPoint}

--TODO: this is missing `PARAMS secp256r1`



-- TODO: To be replaced by IANA
id-SPHINCSplusSHA256128sSimple-ECDSA-brainpoolP256r1-SHA256 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) signature(1) 
  id-sphincsplussha256128ssimple-ecdsa-brainpoolp256r1-sha256(12) }

pk-SPHINCSplusSHA256128sSimple-ECDSA-brainpoolP256r1-SHA256 PUBLIC-KEY ::= 
  pk-explicitCompositeSignature{id-SPHINCSplusSHA256128sSimple-ECDSA-brainpoolP256r1-SHA256, 
  pk-sphincs-plus-256, SPHINCS-Plus-PublicKey, pk-ec, ECPoint}

--TODO: this is missing `PARAMS brainpoolp256r1`


-- TODO: To be replaced by IANA
id-SPHINCSplusSHA256128sSimple-Ed25519 OBJECT IDENTIFIER ::= { 
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027) 
  algorithm(80) explicitcomposite(5) signature(1) 
  sphincsplussha256128ssimple-ed25519(13) }

pk-SPHINCSplusSHA256128sSimple-Ed25519 PUBLIC-KEY ::= 
  pk-explicitCompositeSignature{id-SPHINCSplusSHA256128sSimple-Ed25519, 
  pk-sphincs-plus-256, SPHINCS-Plus-PublicKey, pk-Ed25519, OCTET STRING}



-- Explicit Composite KEM Keys


-- TODO: To be replaced by IANA
id-Kyber512-ECDH-P256-KMAC128 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) explicitcomposite-kem(2) id-kyber512-ecdh-p256(1) }

pk-Kyber512-ECDH-P256-KMAC128 PUBLIC-KEY ::= 
  pk-explicitCompositeKEM{id-Kyber512-ECDH-P256-KMAC128, 
  pk-Kyber512TBD, OCTET STRING, pk-ec, ECPoint}

--TODO: this is missing `PARAMS secp256r1`


-- TODO: To be replaced by IANA
id-Kyber512-ECDH-brainpoolP256r1-KMAC128 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) explicitcomposite-kem(2) id-kyber512-ecdh-brainpoolp256r1(2) }

pk-Kyber512-ECDH-brainpoolP256r1-KMAC128 PUBLIC-KEY ::= 
  pk-explicitCompositeKEM{id-Kyber512-ECDH-brainpoolP256r1-KMAC128, 
  pk-Kyber512TBD, OCTET STRING, pk-ec, ECPoint}

--TODO: this is missing `PARAMS brainpoolp256r1`


-- TODO: To be replaced by IANA
id-Kyber512-X25519-KMAC128 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) kem(2)
  id-kyber512-x25519(3) }

pk-Kyber512-X25519-KMAC128 PUBLIC-KEY ::= 
  pk-explicitCompositeKEM{id-Kyber512-X25519-KMAC128, 
  pk-Kyber512TBD, OCTET STRING, pk-X25519, OCTET STRING}


-- TODO: To be replaced by IANA
id-Kyber768-RSA-KMAC256 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) kem(2)
  id-kyber768-rsa(4) }

pk-Kyber768-RSA-KMAC256 PUBLIC-KEY ::= 
  pk-explicitCompositeKEM{id-Kyber768-RSA-KMAC256, 
  pk-Kyber768TBD, OCTET STRING, pk-rsa, RSAPublicKey}


-- TODO: To be replaced by IANA
id-Kyber768-ECDH-P256-KMAC256 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) kem(2)
  id-kyber768-ecdh-p256(5) }

pk-Kyber768-ECDH-P256-KMAC256 PUBLIC-KEY ::= 
  pk-explicitCompositeKEM{id-Kyber768-ECDH-P256-KMAC256, 
  pk-Kyber768TBD, OCTET STRING, pk-ec, ECPoint}

--TODO: this is missing `PARAMS secp256r1`


id-Kyber768-ECDH-brainpoolP256r1-KMAC256 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) kem(2)
  id-kyber768-ecdh-p256(6) }

pk-Kyber768-ECDH-brainpoolP256r1-KMAC256 PUBLIC-KEY ::= 
  pk-explicitCompositeKEM{id-Kyber768-ECDH-brainpoolP256r1-KMAC256, 
  pk-Kyber768TBD, OCTET STRING, pk-ec, ECPoint}

--TODO: this is missing `PARAMS brainpoolp256r1`


-- TODO: To be replaced by IANA
id-Kyber768-X25519-KMAC256 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) kem(2)
  id-kyber768-x25519(7) }

pk-Kyber768-X25519-KMAC256 PUBLIC-KEY ::= 
  pk-explicitCompositeKEM{id-Kyber768-X25519-KMAC256, 
  pk-Kyber768TBD, OCTET STRING, pk-X25519, OCTET STRING}



-- TODO: To be replaced by IANA
id-Kyber1024-ECDH-P384-KMAC256 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) kem(2)
  id-kyber1024-ecdh-p384(8) }

pk-Kyber1024-ECDH-P384-KMAC256 PUBLIC-KEY ::= 
  pk-explicitCompositeKEM{id-Kyber1024-ECDH-P384-KMAC256, 
  pk-Kyber1024TBD, OCTET STRING, pk-ec, ECPoint}

--TODO: this is missing `PARAMS secp384r1`


-- TODO: To be replaced by IANA
id-Kyber1024-ECDH-brainpoolP384r1-KMAC256 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) kem(2)
  id-kyber1024-ecdh-brainpoolp384r1(9) }

pk-Kyber1024-ECDH-brainpoolP384r1-KMAC256 PUBLIC-KEY ::= 
  pk-explicitCompositeKEM{id-Kyber1024-ECDH-brainpoolP384r1-KMAC256, 
  pk-Kyber1024TBD, OCTET STRING, pk-ec, ECPoint}

--TODO: this is missing `PARAMS brainpoolp384r1`


-- TODO: To be replaced by IANA
id-Kyber1024-X448-KMAC256 OBJECT IDENTIFIER ::= {
  joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
  algorithm(80) explicitcomposite(5) kem(2)
  id-kyber1024-x448(10) }

pk-Kyber1024-X448-KMAC256 PUBLIC-KEY ::= 
  pk-explicitCompositeKEM{id-Kyber1024-X448-KMAC256, 
  pk-Kyber1024TBD, OCTET STRING, pk-X448, OCTET STRING}


END

<CODE ENDS>
]]></sourcecode></figure>

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

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

<t>All sorts of OIDs in the ASN.1 module. Too many to list here (sorry).</t>

<t>This document registers the following in the SMI &quot;Security for PKIX Algorithms (1.3.6.1.5.5.7.6)&quot; registry:</t>

<figure><sourcecode 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) id-composite-key(??) }
]]></sourcecode></figure>

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

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

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

<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"><name>Key mismatch in explicit composite</name>

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

<t>Implementations SHOULD 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 <spanx style="verb">SubjectPublicKeyInfo.algorithm</spanx>, and ensure that it matches what is expected for that position in the explicit key, and then proceed to parse the <spanx style="verb">SubjectPublicKeyInfo.subjectPublicKey</spanx>. 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 SHOULD be done when handling the corresponding private key.</t>

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

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

<ul empty="true"><li>
  <t>EDNOTE: Max had proposed a CRL mechanism to accomplish this, which could be revived if necessary.</t>
</li></ul>

</section>
<section anchor="protection-of-private-keys"><name>Protection of Private Keys</name>

<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.</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"><name>Checking for Compromised Key Reuse</name>

<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;
&RFC5480;
&RFC5639;
&RFC5652;
&RFC5914;
&RFC5958;
&RFC5990;
&RFC6090;
&RFC7468;
&RFC7748;
&RFC8017;
&RFC8174;
&RFC8410;
&RFC8411;
&I-D.draft-ounsworth-pq-composite-sigs-05;
&I-D.draft-ounsworth-pq-composite-kem-00;
&I-D.draft-ietf-lamps-dilithium-certificates-00;
&I-D.draft-ietf-lamps-cms-sphincs-plus-01;
&I-D.draft-ietf-lamps-kyber-certificates-00;
<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'>

&RFC4210;
&RFC4211;
&RFC7292;
&RFC7296;
&RFC8446;
&RFC8551;
&I-D.draft-becker-guthrie-noncomposite-hybrid-auth-00;
&I-D.draft-guthrie-ipsecme-ikev2-hybrid-auth-00;
&I-D.draft-driscoll-pqt-hybrid-terminology-01;
<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="work-in-progress"><name>Work in Progress</name>

<section anchor="combiner-modes-kofn"><name>Combiner modes (KofN)</name>

<t>For content commitment use-cases, such as legally-binding non-repudiation, the signer (whether it be a CA or an end entity) needs to be able to specify how its signature is to be interpreted and verified.</t>

<t>For now we have removed combiner modes (AND, OR, KofN) from this draft, but we are still discussing how to incorporate this for the cases where it is needed (maybe a X.509 v3 extension, or a signature algorithm param).</t>

</section>
</section>
<section anchor="appdx-samples"><name>Samples</name>

<t>These samples are reproduced here for completeness, but are also available in github:</t>

<t>https://github.com/EntrustCorporation/draft-ounsworth-pq-composite-keys/tree/master/sampledata</t>

<ul empty="true"><li>
  <t>TODO: move these to https://github.com/lamps-wg before publication</t>
</li></ul>

<section anchor="appdx-genComposite-samples"><name>Generic Composite Public Key Samples</name>

<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 explicit private key is as follows. Note that the PQ key comes from OpenQuantumSafe-openssl and is in the {privatekey || publickey} concatenated format. This may cause interoperability issues with some clients, and also makes the private keys appear larger than they would be if generated by a non-openssl client.</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: rsaEncryption 
        parameters: NULL
      }
      privateKey: <rsa key octet string>
    }
  }
]]></artwork></figure>

</section>
<section anchor="appdx-expComposite-samples"><name>Explicit Composite Public Key Samples</name>

<section anchor="id-dilithium3-ecdsa-p256"><name>id-Dilithium3-ECDSA-P256</name>

<t>This example uses the following OID as defined in Open Quantum Safe, which correspond to NIST Round3 candidates:</t>

<t>https://github.com/open-quantum-safe/oqs-provider/blob/main/ALGORITHMS.md</t>

<figure><artwork><![CDATA[
id-dilithium3_aes 1.3.6.1.4.1.2.267.11.6.5
]]></artwork></figure>

<t>A Dilithium3-ECDSA-P256 public key:</t>

<figure><artwork><![CDATA[
-----BEGIN PUBLIC KEY-----
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
Srzd4w0i+5dCNM9rX
-----END PUBLIC KEY-----
]]></artwork></figure>

<t>The corresponding explicit private key is as follows. Note that the PQ key comes from OpenQuantumSafe-openssl and is in the {privatekey || publickey} concatenated format. This may cause interoperability issues with some clients, and also makes the private keys appear larger than they would be if generated by a non-openssl client.</t>

<figure><artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
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
9wve
-----END PRIVATE KEY-----
]]></artwork></figure>

</section>
<section anchor="id-dilithium3-rsa"><name>id-Dilithium3-RSA</name>

<t>This example uses the following OID as defined in Open Quantum Safe, which correspond to NIST Round3 candidates:</t>

<t>https://github.com/open-quantum-safe/oqs-provider/blob/main/ALGORITHMS.md</t>

<figure><artwork><![CDATA[
id-dilithium3_aes 1.3.6.1.4.1.2.267.11.6.5
]]></artwork></figure>

<t>A Dilithium3-RSA public key:</t>

<figure><artwork><![CDATA[
-----BEGIN PUBLIC KEY-----
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
-----END PUBLIC KEY-----
]]></artwork></figure>

<t>The corresponding explicit private key is as follows. Note that the PQ key comes from OpenQuantumSafe-openssl and is in the {privatekey || publickey} concatenated format. This may cause interoperability issues with some clients, and also makes the private keys appear larger than they would be if generated by a non-openssl client.</t>

<figure><artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
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
xo0q1Hy6tHThjXl2WXxTQEKyA7olA+T2uI6x1Q==
-----END PRIVATE KEY-----
]]></artwork></figure>

</section>
<section anchor="id-falcon512-ecdsa-p256"><name>id-Falcon512-ECDSA-P256</name>

<t>This example uses the following OID as definid in Open Quantum Safe, which correspond to NIST Round3 candidates:</t>

<t>https://github.com/open-quantum-safe/oqs-provider/blob/main/ALGORITHMS.md</t>

<figure><artwork><![CDATA[
id-falcon512 1.3.9999.3.1
]]></artwork></figure>

<t>A Falcon512-ECDSA-P256 public key:</t>

<figure><artwork><![CDATA[
-----BEGIN PUBLIC KEY-----
MIIEBTAMBgpghkgBhvprUAUDA4ID8wAwggPuMIIDjzAHBgUrzg8DAQOCA4IACZdJCeFxldpfuli
HAR1VY2ntR4Rc6Q9UvTsy6vo7xDbFSewjE1Ei4gmUTWz6PfkpoDkrOVqA4tkTvQZE23jQKVfglH
DziGZuOtsw2aCjXlJsIdJieTytFvEegdOsagJJLd3IjqQOu41LCiLGXLQ+widcNBcZ/Bs1oCANw
qJtjofEiRcUCie6vnMiMiLsMLl8S8MBn3CIDMB/319AmgQro0YqMjEsS3VBzIyCnkmwy3QAPN+m
oJkrrBDUqtLkXyh5vaeirZk9DnFDJc6Yq9Fz5yHVoE120ZjVyJBC0O8p2BX2YXm3YhOXWoDgo3v
gJhRlYHnUg28oMpaBav7V+0fyNAalD3dpLHGVqAVblvY6uDSLv1uBY9DcHMhPrHDBjaE1MbkBZp
wGrHQh4AM5p5pFwcAGSIKYZsiUmPWctwItvMV+ydsdQvEyISfBq+1FyLdTFqsQv4GfUlpk3MlZe
cvNVdSD2FjHgLOqkZZyqspZil4jCNRCUW64cSOOT7m0I6nC2U+s4Lcbh6yuu0z8mBcj0nWud1E1
WICEjviAo8dkevJMU63lOxbAXXe/ZSgJ8ZDhL4dXfSXLhFeg07aOmKFUah5a8i5JrFSnh6zku/L
nf1GyfdnDBiAcsYlxtFEjYkG8cTJIOwhRslem6TAJhtxSM+cHUKIQY+Dl6QmNFKR1wBGqap0w+A
WAtu4VK2rTSL6ENRmBB+pwStWl0+rAVjRtONLkCX7aSfh10yaaJBloTJ1NLqQI2aTBM0EcjhhmI
PBCgtf4+2bQTFLe0pKcW2aB7TvMHcUKyHQFMu5erQXbY1FmP1w2y5R+GK1myuJIQMrWCKZxd74d
nk5EaunOYxIGgslmINGjmKmzwTiuIwsF2oimRdMUla36Ss4nmcCzlONcQ1NKtdvXaWJotbGIIGs
xCFUvspsIdZemJ8MZxZIAotW5u12IaIgmiMdTUoH1O5mpjso5iUhynqlOqfw6aJbJH3+FxMT85P
N0UdzR65uiMfSiq/HVb0zhB0gJLrqpPAXaMgiYZHBqQqeQeB5pwTYM5xuiKIbW9KG+gBIOCimVG
mTUd5U+4hceULMCpaTff2636q/ofEAZlrfQC2aV/GAWx6iOm67AQMVTKG34XFqVY+C9eLyipwPq
FLAQt8WaxSAuEScapj1+xpCpUlUhm8Ca2AbvfEi9pit9Rj8y9t7TIpDmMFkwEwYHKoZIzj0CAQY
IKoZIzj0DAQcDQgAEFFnVIrPg3W3QEt95Z4WQn1cmoZV9tpo20FG9umA2B7CSaf7q9FwgVY7qvD
HymrF59in1pXEPnEWLZ9xLO5A6cg==
-----END PUBLIC KEY-----
]]></artwork></figure>

<t>The corresponding explicit private key is as follows. Note that the PQ key comes from OpenQuantumSafe-openssl and is in the {privatekey || publickey} concatenated format. This may cause interoperability issues with some clients, and also makes the private keys appear larger than they would be if generated by a non-openssl client.</t>

<figure><artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
MIII9gIBADAMBgpghkgBhvprUAUDBIII4TCCCN0wggiWAgEAMAcGBSvODwMBBIIIhgSCCIJZ+EB
+0I+BBBHBEB9A//69D3BA65EC9A/A//D/E/G5666D5+EA7787H/BE+CD868BJB8DDCC/+C98/+C
A669+A/93GB+/HB4AEB77+/D/4F+CF5+B86B5FA6AC+A7//6/+D+7CE9/GAAE8CE/DDD4+FK97B
AD489BA/6/AADC4C9B7B9//EA+FBE7BAFAAD9/BBC4G798/E6D/EB+FHCFDAABEDABB4BCAJAA+
CA46GBBB/8F9++C99+D4DD6F+AECAEBDDDE+A++GBD9+AEC9C/5/9A+D/EBF+DE/B/A48/E754B
/8A++495CCDABENGB37C6D5+92C9F8/D9HDH/AB76CFAA+CIAGBEJGA3JFB68BGBAAC6HDHC/6E
++8/9EHBE/BECF+7/5/CE7FD4+CD99BHB/w+/9BLB98/ACJ9FDB+/EA+CCDA+8988F+E8A8B5A5
D9/5995AAG//88+BHB9C+2B7GCH9CD56F956EACBDEB+AEDGL/D+6IB9GBFAD6CF6F7D6KD9D9D
DDEC/CED8E97B+45FCF1z6CDD9DBJFCA9/A+CCFDKG/+EA+A7BA79KABB7717C5/CB//+FC+/A9
E9C+7H7+CF/358GC//FBB46/+F/4/++B+A/B6G9DFB6G/8CE9B3+7C/D+FABB9/EDFAAEF+D6CD
88D7CDEFAI2HG87BGB/C+/A/ACDC/AFF/3/8F/E/D966B+97DBDB9EA/9D/FD8++8/B/AC5/A84
C9HDE+5DA/CDBFB1AC8FBFE/+/DA9AD/+85A+CE+D6+BB9/H5C+CDFCCE7+B/GD6+C/CEE8G7B+
AEC/F6ADA6CF9B+C8D+D+B+K+4ABAAA4/8CDE/A+FBD/9I/A79E/8++C/+AB79D2BE5F4C9+G/B
E/5+ID/A/AI//J/A+D5F8CA+9/EEEA+6DD98B4DHC8CDBI/C8BCC5IK+9+7CAFBH9BH3ABCDE/D
C9AGDD+8CC8EADBC/94F5B+6F8++EK6G8879BEECFCABC+6OvxsQz3+SHpzfP35AjW/Cfp9g7oB
P776gMtBxMJ3woSCuzpJi0p2dnrByfhDSreIBELDycfAgAo7AACKfYQ97kPBBMW9iYzOdNIGxjv
FuzxFQsWuy4qQxgDLBYe1AIBLPIqFgPj/fFo9vwDDO4W+vnq1fP68hkZCSDl/yfpGhTvHhHoB/X
b+STpCf0S5wMhyvIR2/L75BcC7xozCxH88fXHBy/1ChPZ+fsP/hsF+djx/+MKBesPzwP/+hcLBu
8MFxX53hwAKwYfPOkuLfjUBQfnId4IDeTfIUFkHhox+u8l9QUq4vgVBff1EwjVLhsC6w/z9hf1+
xESFeoHBewGCg8XtdDnCRjo0fcF0yDTEv4uzxYA0BT8++gIAQ708d/z79nS5/YO5fYi7RwJ9AoK
BOLsANLV3hP/Af/zDvS71RLv1dP25t2wGwfdNesxEgIlKgPzAfr85rAWDAkG7f4n+hMA+wzuJAg
RDwoVADYvBjoz6gjmAwcV2gf+4AT5BSgCAun97gX2+Qq39BUT39nx3/DAtxAZ3PgOCg8MKfAL9/
n+/eMHD9TuHu365OQE9/0BA87qyvX36BMOFB39OfXx/AsC0fb+39EJCuUS3BH75ub38Or6HuD2y
9wFAvK7BBYQFf0TGxAB6P/7GvwUBxMVA+sZJDEHMjwH9e8J2BFO1AMJl0kJ4XGV2l+6WIcBHVVj
ae1HhFzpD1S9OzLq+jvENsVJ7CMTUSLiCZRNbPo9+SmgOSs5WoDi2RO9BkTbeNApV+CUcPOIZm4
62zDZoKNeUmwh0mJ5PK0W8R6B06xqAkkt3ciOpA67jUsKIsZctD7CJ1w0Fxn8GzWgIA3Com2Oh8
SJFxQKJ7q+cyIyIuwwuXxLwwGfcIgMwH/fX0CaBCujRioyMSxLdUHMjIKeSbDLdAA836agmSusE
NSq0uRfKHm9p6KtmT0OcUMlzpir0XPnIdWgTXbRmNXIkELQ7ynYFfZhebdiE5dagOCje+AmFGVg
edSDbygyloFq/tX7R/I0BqUPd2kscZWoBVuW9jq4NIu/W4Fj0NwcyE+scMGNoTUxuQFmnAasdCH
gAzmnmkXBwAZIgphmyJSY9Zy3Ai28xX7J2x1C8TIhJ8Gr7UXIt1MWqxC/gZ9SWmTcyVl5y81V1I
PYWMeAs6qRlnKqylmKXiMI1EJRbrhxI45PubQjqcLZT6zgtxuHrK67TPyYFyPSda53UTVYgISO+
ICjx2R68kxTreU7FsBdd79lKAnxkOEvh1d9JcuEV6DTto6YoVRqHlryLkmsVKeHrOS78ud/UbJ9
2cMGIByxiXG0USNiQbxxMkg7CFGyV6bpMAmG3FIz5wdQohBj4OXpCY0UpHXAEapqnTD4BYC27hU
ratNIvoQ1GYEH6nBK1aXT6sBWNG040uQJftpJ+HXTJpokGWhMnU0upAjZpMEzQRyOGGYg8EKC1/
j7ZtBMUt7SkpxbZoHtO8wdxQrIdAUy7l6tBdtjUWY/XDbLlH4YrWbK4khAytYIpnF3vh2eTkRq6
c5jEgaCyWYg0aOYqbPBOK4jCwXaiKZF0xSVrfpKzieZwLOU41xDU0q129dpYmi1sYggazEIVS+y
mwh1l6YnwxnFkgCi1bm7XYhoiCaIx1NSgfU7mamOyjmJSHKeqU6p/Dpolskff4XExPzk83RR3NH
rm6Ix9KKr8dVvTOEHSAkuuqk8BdoyCJhkcGpCp5B4HmnBNgznG6Iohtb0ob6AEg4KKZUaZNR3lT
7iFx5QswKlpN9/brfqr+h8QBmWt9ALZpX8YBbHqI6brsBAxVMobfhcWpVj4L14vKKnA+oUsBC3x
ZrFIC4RJxqmPX7GkKlSVSGbwJrYBu98SL2mK31GPzL23tMikOYwQQIBADATBgcqhkjOPQIBBggq
hkjOPQMBBwQnMCUCAQEEICXQxbtuhGjYSkyLz+K0V0tRyxgEBlQcElOVwHZSA4QL
-----END PRIVATE KEY-----
]]></artwork></figure>

</section>
<section anchor="id-sphincsplussha256256frobust-ecdsa-p256"><name>id-SPHINCSplusSHA256256frobust-ECDSA-P256</name>

<ul empty="true"><li>
  <t>TODO: we switched to using a pub key identifier without the signing mode, ie just id-SPHINCSplusSHA256-ECDSA-P256</t>
</li></ul>

<t>This example uses the following OID as definid in Open Quantum Safe:</t>

<t>https://github.com/open-quantum-safe/oqs-provider/blob/main/ALGORITHMS.md</t>

<figure><artwork><![CDATA[
id-SPHINCSplusSHA256256frobust 1.3.9999.6.6.1
]]></artwork></figure>

<t>A SPHINCSplusSHA256256frobust-ECDSA-P256 public key:</t>

<figure><artwork><![CDATA[
-----BEGIN PUBLIC KEY-----
MIG/MAwGCmCGSAGG+mtQBQcDga4AMIGqME0wCAYGK84PBgYBA0EA6HRU4f2vmr2LV5vZVlaniti
Ly8ZCfheVqolJGrY5GxpNwvIt8fK6swNtftSgmrC+fCDE48/fbzX7a2U3F1/S3TBZMBMGByqGSM
49AgEGCCqGSM49AwEHA0IABFjKamMP3nn7Ua8Y8XEJtqnp7ya+Ino3UoxjMhhVKHx0fQxAz7lB7
Eytrtq3H7e59JYdkceK1h+T8jZFyUP5e0M=
-----END PUBLIC KEY-----
]]></artwork></figure>

<t>which decodes as:</t>

<figure><artwork><![CDATA[
algorithm: AlgorithmIdentifier{id-Dilithium3-ECDSA-P256}

subjectPublicKey: CompositePublicKey {
  SubjectPublicKeyInfo {
    algorithm: AlgorithmIdentifier {
      algorithm: id-SPHINCSplusSHA256256frobust
      }
    subjectPublicKey: <sphincs key octet string>
    },
    SubjectPublicKeyInfo {
    algorithm: AlgorithmIdentifier {
      algorithm: ecPublicKey
      parameters: prime256v1
      }
    subjectPublicKey: <ec octet string>
    }
  }
           
]]></artwork></figure>

<t>The corresponding explicit private key is as follows. Note that the PQ key comes from OpenQuantumSafe-openssl and is in the {privatekey || publickey} concatenated format. This may cause interoperability issues with some clients, and also makes the private keys appear larger than they would be if generated by a non-openssl client.</t>

<figure><artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
MIIBMgIBADAMBgpghkgBhvprUAUHBIIBHTCCARkwgdMCAQAwCAYGK84PBgYBBIHDBIHA0PwPCww
Ulg3VLrZC7cGLqF0jRZrREj/l4kKF4JsLTjRR2P4RLqEm0qBa7ukb4ytHE6HDfM0h6dJ19F02hO
SO6Oh0VOH9r5q9i1eb2VZWp4rYi8vGQn4XlaqJSRq2ORsaTcLyLfHyurMDbX7UoJqwvnwgxOPP3
281+2tlNxdf0t3odFTh/a+avYtXm9lWVqeK2IvLxkJ+F5WqiUkatjkbGk3C8i3x8rqzA21+1KCa
sL58IMTjz99vNftrZTcXX9LdMEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCAwCM4
KKsZbXlaZBph1ixcUhlNiZ1qp4LnA90Nm/rArZw==
-----END PRIVATE KEY-----
]]></artwork></figure>

<!-- End of Exmamples-->

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

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

<ul empty="true"><li>
  <t>EDNOTE 10: Possible topics to address:</t>
</li></ul>

<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"><name>Textual encoding of Composite Private Keys</name>

<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 (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="sec-backwards-compat"><name>Backwards Compatibility</name>

<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"><name>OR modes</name>

<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"><name>Parallel PKIs</name>

<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). This concept contains strong overlap with other documented approaches, such as <xref target="I-D.becker-guthrie-noncomposite-hybrid-auth"/> and highlights the synergy between composite and non-composite hybrid approaches.</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 <xref target="I-D.becker-guthrie-noncomposite-hybrid-auth"/> or <xref target="I-D.guthrie-ipsecme-ikev2-hybrid-auth"/>. Note that it is possible to use the signature algorithm defined in <xref target="I-D.ounsworth-pq-composite-sigs"/> 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 Implementation Considerations section -->

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

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

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

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

<t>John Gray (Entrust), <br />
Serge Mister (Entrust), <br />
Scott Fluhrer (Cisco Systems), <br />
Panos Kampanakis (Cisco Systems), <br />
Daniel Van Geest (ISARA), <br />
Tim Hollebeek (Digicert), <br />
Klaus-Dieter Wirth (D-Trust), <br />
Patrick Kelsey (Not for Radio LLC), <br />
Anthony Hu (wolfSSL), and <br />
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"><name>Making contributions</name>

<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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
7+BiX0PfwgIGwToN3cs3PErW4bhFlVFT4LVZrmtitWkE+1M/eyOgl//X3/7X
3zwhh7gF2QbIS7f8EAK4FF5ID8U+iIGEFTIO0yzRAUIEpXtUScV2ssnhxX5I
TBHrG3STk/vo7nlxfLCpNNWJ3MRz9n1mMDn90nLYdJewHeLPi4zz+iiaSUHB
mGyuNzWeoZ/IZwZ+Y0csywzH5+EQtxkxmrzXN+v+AL4zmrZPkC9dhjkPrS4L
i3jIcTzbyxg6K2ta0arQncOmetgMF3stPe1w22JPXXWN9EbpZUqL6hFBwJ0I
BD1G20DvRqN6zjDQUZ2mRZZpa6AhxA2tgXSwod2wtqyP2cMsz2Zq22sy0Zh2
Zt3s9ra90BozdlqFXs0ojce3UnoimErG4U5ZqcZNJfOycjrdStLomU1mnFsz
q6FbG0+zCaNs0LNupWxPLxm7mDyOnH1ttd4d3E6tNNi3uv3+Zpzf0WrDWo25
To6byLeiyGa5QW2ZU+sHOiEa5YKZyWYNnufL0irXk8SNANq+VU2K6nqnT9wk
d9XXy/ki3T9XT62WJXMNJjkSy3R+fcnlE3m5d+4apVs5wxbH3UFhPKqk0+PK
LFmxT8NCYSCUxdWA4Y6n7TR/6U2FiphjM1pZOS7HRpru7ROjjr6mq7d0b5Gr
r082q3RydcW0OGlyySz44m6u723N7je1hXYcpMuLA6u202Jx1UiXJNWV14k1
2y+UpMmE1roMTXNI2dH1w6jU2SmL49xejS56qWtXW3LysmpU5cvUEC+F+rAz
5IBPzlMzMRrmLXNWU5KscE2W67tb5ToTuVyzUzkXa7V5tVDsX/lOqTM3c+2Z
Nm1KnfHgdGGu++1qslfKrUQnI1h1o3+7jKtabuFUmXF/nT+VN/tufnLgC22d
b+cca7odHJNMTd5sb9qg2t5t4Yfl4EjPBwljP16Im8tOHLtKke503E11mbms
hfKYm2+43SSXPvWFs6Fyen876NyOMz05uGSu0mkj3Ubp0ziR1NNOTbQ7Q6t8
Kqwm7lDrKX1J6jfSWlPdNo5HozNotcxZcbEobbcuL3HrW7Lb22SkVq2Z29mJ
9pJ2Ckw5U1VGrjXXTuX5YcOtxGtf7XKK3jXcM5+Vq/XdedhmtGGttFGa2yZr
q9Ne72TuL+PEqVhWy4saPavRpam8Ankru/WMWc45fL5VsfuDbV3qSez2zDfT
vHxLLq7llZPj55fJ+lpbs1LiZlT2I2udW/QUt5zVx/O+vC9ljpmRLE6cgy3T
hea03LOnrX27eNB7Zk+Sst18sSLPGXvXsHsJWxar11U2s891mcVhV8+s5OJg
WV8lCcirbKcgqzdbXS57I6lXaNvS7io3Z5e2fRvkGmc+4WSLc2G+PmQWu6Z7
UMYDmhkez2anyh47yeIwW54IRreSlceT3qruMrc2P5sv0wMGGL+WrG2FxL5h
jkqn0nE8nZfWxmqscevVdXDpZ+xWvluSWb0ppEen3WZUFK8Sd27u+GaZV2fL
bl0Wi9tCI7EVewzH9tMDBDJby7B2c5Rt2PmRWR2Y9uV6PstzbZQuN6usfGK5
26p1drNVO8spm0mzsD8m6MJ2Y6tdd8xewB7QVLtqMJ3xvu0uy86l17ba4rLb
Hy2mM3cvZMpcrz2zeN2YtMZDpq0vys2Ekbmtr7lSZUpf2mpPbLrdc73Qzllc
WT7NuUpht+bL1uRa3M/FrTOiV1q6QneF9o62G2BhphuJc680dbnqZFtkOtLO
zsjdMZuuK/U6feW6ynzHqEZBYVszo62tkuWtMbnuVnxa4c4D47CoONPEvD3Q
pWZTUzv7spxrHRe0nemfcrxQyWe7DDe/ZW+nw2l77MmKVDHGBZftjE4dodep
Cmp2d9skXGXVcgZW7qg385dVb99IZu3hbJFnu8uaUWlLaSnD7NxDFYM8EAq7
0rSXkeyFabvXUanHJwrb/a136nCFNiO525Xd3Y5ahl7es4P8rLDbK5rBZ8S1
Oxw20snjodmxW7RwvunTZn+xyrbam0StYoqtZiYn79ILy1lbxfNgt5q3Ozu9
xRhtcXC+8utj/SwLWXlTKfR76nxfyGV7tf2qbM6Wp0vC7u7Xo4Gkzca7W/N0
No+19UE0KsmIeXmvDX9f+zJWTPO+CG1gZYHXjjzfr1TGL0G4C8LDdDjm4PFh
ZPSEX3zzuaFJBb9/wNaMAvBdO/M/f1oxU/T5xB6s0bspfcgSBWf6yRmvd7xp
sFOfedPQ0V/uL68PTrj6WU6+n3101fv8JnwraKwkMDJmKc+axYX+ww0V325G
0YMeL44oAV0hlUc34yh4U9B9HsxAdmNqT7rE5frT9t5N7Rz7hIJw6aVpL1Eh
CisdlEAXX7cKWRgwt7BS0b+DOUH5iVYF+C/3miuVX7NZeFAkiKWpp6iIRBS+
fiSkwLfX9ybrGIUU+AaNQgraCNo0D9iodB1G4zh62GbZs9tghn2WKXF07szx
vb6WmCUzNWHscsZFmcx2ycVENrQtWIxcrceKS7NWPRQtTjjwx9Xg0u73Dmle
mNmb0qm4bk+XiylfZ0qLUZ478btTQna2ueF1eTk5u2LjzBTq0lhNZvjzsWs6
h3LPSRfL09Feu6gq050um9ZR2c9yQ1CdlmXSU2OXnw+z+nSdq1SWiUV2bwk3
OcdWxKQqFEt7mR4oyUuvoupu2spOb72hzRjabLZsuXrmtpssjt1OcpctNrhm
uXXiDpNkYWVeSsZATLAbTtK1WWe2qLdyRlmrScnDdDUb9LO2lJWX1aPe4TaL
Nedeq3PjxPS3W04/76s7Du2b3PbOfrUaZDletpOdBMPkh8XtXm+N9EIuaWRt
YVJz5F5G6ZQWvJwD4Z8B84Bpj4/NRcfsDnY7t1655NdapXJcrF39dJaG17xs
cvogsZPPwqpQSVvLriFK0vRkZtLKrKc5i/184JzGgwZfd5Lr5LzbmdhKLlku
AIOW6b6c3lTTojuW7eEqy2zq80kuUUxOjHbWSrJn5bRkxMJkoNojx+6X5sZg
xJTcUdJQ8nNe4zP563DbH7ZGruCU8uK+LCVXSZ45TwZHO7vo8ulCotuwtNlh
sz+OuEl6vHIz7qBUK7a3fbdo6o2JWpmUsnqyl3Oq3c6xzZuTMivZTKMxGmbp
2TpzMo1pzTwsrMmwmqgLrcJwPqy7V9Mq1yZ9YcUlzeNxn51vj4erzeYb6ZZm
ieuD3ejvSr1h2xk2pho7yWg9fi6l27pWlQcyz3cFK1HJddhJT9AFhU/qgw3f
7Mmdntm6MsMqneebTeDTY6s27NqtXknaF6+XrKMv+2OloU8X3KJpzKp1qSOP
BZvVE8vxYKKwC2fbOcqHdNFZWqvuSs4st9umUJSFLdfrcvyZT2865tph7dpW
7nKNlcgsOA6Yli8mLxP6Ol5t8+tiYinNZ+ZtM1qLs8J0NruUM7sNOy8Pe9ft
tGRsk2lQE+XKOT/qTsqDZEbZq/qRLtk6m8ztjvzmuqjc+tvMabU8qInyqT4z
93pOneQrI2Yyyhy3vHQubk+nTDlZFTP9/k2pOULeMC7Z7pQuGKNMRs+fjey1
UGw3neWytDQXTY5lTv3EKis7dSGTF3fr+t4QN+uGertMe5WCOeiOFu1hWlmZ
28tU7xWu80lrN5EU8dyy51XpIEz4zBDMdeXUz9GrmjJI8Gfh4EhHwZkr3GRD
b5xis1S0LsxmnJPNpssrw9ptxCTL1m6WaY9de9Ou82oSjNv+amOXF7fsuslI
0sDQMsdEaWxmzxVbmN72AjccTNW2oGRF7mawuWxtUejO+ONtcdo1y+lpsrOf
3dhq7SS1+mxzXl6d1KrcndamVfrYPNGDRPewKaZ7lrrZjdvGoSDJK75upefy
WMprvfxxvLfZ3CWnLNINR9Vr3WJ9VeHTy+Jqf2GYQu7QWo6nfPN84XujZCJn
zBpWWtm1LxMQc4eTXQEfWtDOUpvv8Fa1u25dpKM2vbmT06V2vNQGDaY61SzV
nPe1SadiHkpmRXDEVVnmEieFr63O24xzUzKXYbfROZtXiz3w/Xm5PBOufTMr
CnnZaa57l0IzKZStfb207jYYsVi1TmajnmbZcn9WKSwuWmIkjWeDTUV3hILA
lFVTZ4SqdNMkxQJXnV6e7OZ2fSqULoJlsJPW9exoG3Vcztdv4+xU6IwqawcU
Tce0OpNTYjfrXrtMqVPgi46jD0tCvilnqkXR6sridLSti/1z3c3prrO5casW
LJyZoIO7PN2pmVsdvI9boTueF4VV5nwGuJbz/k6Y6t12idXonFk81OWykxTb
l3b2lDcq20XeZXKj3YE3V+JknDSGo4rQ4ZTWespWGWY/LZekTP5Ynu8Txtgp
SW33nLslwQlYWMfOdZGfn6adZk9hhe1hYdJid7GypWI7WV9tZmNbK2wz/O3S
vF1zSre/q81co1Cp2sYskazU8p1itqOm29W6ULisO3Zl1KXXli3m2l2nvUIb
dPye77ZWMsfK7Wu3Mm4BjjZissHmm0dwwXNL92q3mlyic54fy1p7yZn8YV1Q
zHVZEE7l2mw+qKdXLWO8kdftynQ0rGpqs+3Itq1Wat1ut7fMFhbFRq48KKny
QpKanVI90c0aF2vD18tcd1YvcBNzZhcUTaxn+jc52akXy7v5RK5e0uniZucM
88WJVGHd7Lw1sgHwJX9ccLfhpdq4zAwt0WkUrsPTcpfb55XhZdje2yelv0vL
+etiVV+tmKHbH7Djtmttd1zLbetjp8etbseruRjBgqloVrOQTpfOjVphm9js
k7lJx8jNe8w6PWeZutAeDTv78cZYtIW1ep1KG8YuSRMx6bTENDjCGZgjLxqG
3muXZkZmebGbk4yplmktkSnu8/3kEGBdD9aLXfacz1vnU1Le5I/7gdusNIfL
Eze0Npe6oXDtdPU0G16ZHLfYTFej+bF3mg4El5GWuVXSSIBQtMZ6qa0lL83F
wpmV9VWv3Oie6Et5vWLEud0U2aOgL45id36ezaeSwhiTQttle3R/WxzsOXDM
asPt/HI8JLaVdH502wjlbWHFHetprrhvLnLgSU/5QnfUuOSP89kqr3SaSrJl
cLYz6ySbNyGtIE9yVOukZ2fV0p3GQlzIifS8R882UrrU39166aQ9KN+23Loj
u1WhvT8IprHbrs2j6xjj1aVVPF+M5KUhJi9XZz1TQbireW6SaU2Uidi6JDLG
XqgWtOpgVqrejswg7Qx6F2W4yttKpbQFmZU5uMWjWcm3t+N25rIb9Yf7Dr0Y
H+WNypZ2WzpXthZ9ZW13xwn9Kmq30TGf0+jz7GqshKGcOXNpbruYCpba0fRC
cajKNS6pmXJjXnGsTHJQVLrXnm72zr3zUtvJlZ44lDrFZELpVif7SnJ6uDLC
WVw30qPNmuvOS9wlqfO0aHdztULTLXZbGbrZc8/T0WN01A+OJphzj6XpUWeo
jQ+FUqOxrJZGlSxSIHymyHXOVRdUc3Zh9pKnSW9aFTrDbTFbZQarWTI72SSb
9MmYdSebzLQ8S4ggUAvnjJEsKmyvW3Vm39kv+e+Q+n96SH12fBpSH6OQ+mw3
Ytl6iTtruiKhoHaXzjTYq9ugh0OGtvkOe57XUTuBBru9nqkt6aGWKTErsKbq
4lns1LMT1Sqak2ubXdjd4bCbabWO40Euv53KsgZmV7tk9PXadrO/LoFP19qN
HeuTRaJe63ODtn0oOFx/IOVbyam1y9rKuHNi6fHpxi+Naq3Nb3IXpjU5tfiS
LSanzD7XOtNcpqdNmosMw+jj+WauSQkWlsyFv9QLQ4ErzGe93HjdZnRGpucj
plm/MjOwpjKcrWTYBn9rNFhOYOq6MlMETuhuVZ7J1rVunhvK+bmWkLVxoWvS
7MRURnqmtxXonjje0FydnzDKTdC4Sb3Ja3VbFhbz8aXFCWOuoLFaoU33NlKT
E1tnjZ3X67WxOU4UtKa+pbfzGicoud5UznR53dYYkRkz9c2C0dfMiN9MZsqk
x01rYm0yGY8mDdlWbiIvAXo4vjupD8fahO1dE/xQZhmam05m8+24LjV4Vr7y
1mLd1Yb8gh8b862mc2eloXKaqI+m3DDTbtKWXKBH9Ka3ZuYTrj4dj8Uas20n
GJbrjVRWz0JnOYGd51pca67UhrPuWGV5gda5OribRuvCT4d6d03TND/OjNkJ
yzH8ZcwsBL02trobtjlkEtp8vObERb5+VdjuhKkvMvMLGP/nuiBfhhmlMB5O
G8BJ835jeFPE4XWS4UxlOsnS+cW2N5pvJZa58OuxrXIGzHHO2T2rSy/oXrPF
DOuLIX/pXQxuMuTnbI0zGxzdnJtjs16f1iZ8tyZoi3Hrpk3os2IBogyZrp+F
cXc6PycmtcWGawhzXuzOWsJclPh6bkzTNVkUm0xOaNKccmPr9YKmC2flCtRi
6JveUPJMs2fVG/S521xchMJiOL5OEnN6Mm6Cczfs1uUGZ4PLNWRuvcliNGQE
AxSHqG0Xs3pOGQ0vdUvY8FOmVq+rdI/rWty2VatPJhe2Md5OdFlPtFihyQN3
cCJXMICrGHphj/X6Vua0JnzJtkx6bHC0Lsx4sz6e1PjNfKY2+Cx/ke0Wq+SV
KbBrky5MbkBHQetlWjpzlTMqtB2aDMxX0Hl7yCijnsUBKSaAt8V6ntVotVY3
5XyjNtH4XN3m512xzyyGOq8xKisICYOZaN3a3F7kFXBo6pf6us+NRYEDao0m
ue6wx+nAV/NNb87Xu1rvDF5eg7+OJy1rYnM3neOm9Wy7WZ/Qopqoj7l6fqIr
W/7cndCMDl12a2OeGTX4Ya0u9PKK3dP1tWIqDW2tjxczbTwUtBzfWEwWG5Tq
wDQ0bkzr1sRI6KOFadTpS/0sW8PJeLLI8cMW22B5cX4ZWnKdtlpZ+dIraLUF
aCxemKy7hTEv8MKItnhByS9YDQYC6rPzxJYxJ8PeaGjLfJtmGX3EZ3r6vNCb
cCaj0SJTAK6aD29GA9B/FQrDmsLq+iLHZBdMvS4b4wswaB0IpM1HiWGeHur2
kJYbzLXfBN+4YXB8Rjc5oXXRdH3DX+dCt9ng61vAqaHWVJaZdXUlw8PSG4I/
Ub9qQ+XKbHv8JMHyI25YnzHMmB1fepOJoTU0m5toNeaqn4cTpikbMtuyp1yb
7mZBjtRb7PzaYoSbvO7RQpMbz6H9eDNh+FqiXujaErfIaON+rTtU2eGZvoos
b7S2usZsmUtrUtdak8W1VehzTG44VBqKoImtMZOHiTJd8FSHmfmM5eaakBCm
DF1npmODvnYL+pk/jzeMBoTI8PmhqTfmF44VMkOgii7wY3nNGbo2vxg0GJBX
kZENJic2h3ZLmIjKNCFfx7Sc7eV0QQfvi5kMzy1YIvKkN6KzGqdp3YvIjRtK
YZ6vT8W6bAkCXW9wYxNIMJbPU65ucYY2WViLEZPYgiTKsHR3o9J1kZtOm2NR
5xgkGGltMtzo4oKV2HGeYZV611xY9HRsyecWsK9+mV+ZkXaT54o92bQ0lklw
50mG2SoXerM405dug2U0ZjFv15QbiBuG03RmfOZvTE2r04V+g5nx7GRWnzKi
ktVM7qqJkxoIgDmzma+FxJY2tU1v3BrW7fFsaEvN8VbIs1wr064Np8LYYPVm
d6ZnFxo96jKtxqJR13mjzslXmmltFxuxPs/AhHnlqhmJybS71ccc6Bnd0G4t
emH2WU6nr0yeay4asMBq42yDV5vzdU/r8XxOOfdyrbmc79WnvHyVa621wots
n+P1Hsj7BmcCh8y7HOgQvsvJDaUxrU/rck7PqA3QgjmQIblhbnwezpQpv13U
22xLFyZSvb/IJNs18O7W+cy61nAT806hU25z9FE9XfsdYzXo1SxmnnYcrdRg
KtlLb+cqbWWtJW1XaGT6LtNzt9Zlo+UtulO3FW4+LC+qw+slbe0S4PGq81bG
vpbLyuwoF2p2U+pfDoMj3e1b4H0u9sxhvDmAnnMkSxisj8u+qJYM1wLFtynz
XXtbUbX+SWHVemKkHevJqWRI9XFmyi54TT+Oh5f5vtHKF4ZboSOeO6PCKnls
2vwkU6yu6duxkeMKcjK3bFzV5Yhtb24bSe/2GnrCONxMK5NfCVet1h21BO6a
O55ul2V6Ry8KI/W8qx4m5qCa6azyefm6P51bjLlOXk/lpgp2vVbS0qVG300X
RMtMFDa50XJTNhaKVV41rPV+lRcV41be9TiWbZ7oeno0sC7snC5kz+NaUuuN
Lcm4VXq7TbWXyU0y9ZlR7i3araGbTpiTA38c2VNz0qz3L1XNPc8NdjsWi6Xt
fmR03HRbqMiFWz1b6FmnoSFtdmYpc2hbh9pGZsYLzXaOtVbH6jSrVuK6OpRB
EFnCstBrZPT1qexmj/M0Z43y25PWaPKtY360zLl7s9nZTDpuO1t13O5+WS9V
qu6pVwIc5yvrnrtoyYn6gLvJLJdcLatZK7OdXpKrEr0s98Vtmh2I2enW7jYv
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
NufjqjwIb+HZNub+C9M1Pr1ndQEA

-->

</rfc>

