<?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 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 RFC4210 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4210.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 RFC6090 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6090.xml">
<!ENTITY RFC7748 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7748.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-keys-04 SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ounsworth-pq-composite-keys-04.xml">
<!ENTITY I-D.draft-massimo-lamps-pq-sig-certificates-00 SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-massimo-lamps-pq-sig-certificates-00.xml">
<!ENTITY I-D.draft-ietf-lamps-dilithium-certificates-01 SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-lamps-dilithium-certificates-01.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 RFC3279 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3279.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 RFC8017 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8017.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-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-truskovsky-lamps-pq-hybrid-x509-01 SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-truskovsky-lamps-pq-hybrid-x509-01.xml">
<!ENTITY I-D.draft-pala-klaussner-composite-kofn-00 SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-pala-klaussner-composite-kofn-00.xml">
]>


<rfc ipr="trust200902" docName="draft-ounsworth-pq-composite-sigs-08" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="PQ Composite Sigs">Composite Signatures 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 abbrev="CableLabs">CableLabs</organization>
      <address>
        <postal>
          <street>858 Coal Creek Circle</street>
          <city>Louisville, Colorado</city>
          <code>80027</code>
          <country>United States of America</country>
        </postal>
        <email>director@openca.org</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 cryptanalysis, while the incoming post-quantum algorithms face uncertainty about both the underlying mathematics as well as hardware and software implementations that have not had sufficient maturing time to rule out classical cryptanalytic attacks and implementation bugs.</t>

<t>Cautious implementers may wish to layer cryptographic algorithms such that an attacker would need to break all of them in order to compromise the data being protected 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 CompositeSignatureValue, and CompositeSignatureParams, which are sequences of the respective structure for each component algorithm. The explicit variant is defined which allows for a set of signature algorithm identifier OIDs to be registered together as an explicit composite signature algorithm and assigned an OID.  The generic composite variant is also defined which allows arbitrary combinations of signature algorithms to be used in the CompositeSignatureValue and CompositeSignatureParams 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 public and private keys and encryption <xref target="I-D.ounsworth-pq-composite-keys"/>, however may also be used with non-composite keys, such as when a protocol combines multiple certificates into a single cryptographic operation.</t>

<!-- End of Abstract -->



    </abstract>



  </front>

  <middle>


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

<t><list style="symbols">
  <t>explicit composite combinations defined and ASN.1 module updated</t>
  <t>Added new OIDs and considerations for the hash-then-sign paradigm for generic composite signatures</t>
  <t>Removed the OR modes of operation and replaced with K-of-N I-D reference</t>
  <t>Added considerations for external hashing</t>
</list></t>

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

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

<t>The deployment of composite signatures using post-quantum algorithms will face two challenges</t>

<t><list style="symbols">
  <t><em>Algorithm strength</em> 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><em>Backwards compatibility</em>: During the transition period, post-quantum algorithms will not be supported by all clients.</t>
</list></t>

<t>This document provides a mechanism to address algorithm strength uncertainty concerns by building on <xref target="I-D.ounsworth-pq-composite-keys"/> by providing formats for encoding multiple signature values into existing public signature fields, as well as the process for validating a composite signature. Backwards compatibility is addressed via using composite in conjunction with a non-composite hybrid mode such as that described in <xref target="I-D.becker-guthrie-noncomposite-hybrid-auth"/>.</t>

<t>This document is intended for general applicability anywhere that digital signatures are used within PKIX and 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 keys <xref target="I-D.ounsworth-pq-composite-keys"/> 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 BCP 14 <xref target="RFC2119"/>  <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>

<t>The following terms are used in this document:</t>

<t>ALGORITHM:
          A standardized cryptographic primitive, as well as 
          any ASN.1 structures needed for encoding data and 
          metadata needed to use the algorithm. This document is
          primarily concerned with algorithms for producing digital
          signatures.</t>

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

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

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

<t>COMPOSITE ALGORITHM:
          An algorithm which is a sequence of two or more component
            algorithms, as defined in <xref target="sec-composite-structs"/>.</t>

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

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

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

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

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

<t>SIGNATURE:
          A digital cryptographic signature, making no assumptions
            about which algorithm.</t>

<t>STRIPPING ATTACK:
          An attack in which the attacker is able to downgrade the 
          cryptographic object to an attacker-chosen subset of
          original set of component algorithms in such a way that
          it is not detectable by the receiver. For example, 
          substituting a composite public key or signature for a
          version with fewer components.</t>

<!-- End of Introduction section -->

</section>
</section>
<section anchor="sec-composite-structs"><name>Composite Signature Structures</name>

<t>In order for signatures to be composed of multiple algorithms, we define encodings consisting of a sequence of signature primitives (aka &quot;component algorithms&quot;) such that these structures can be used as a drop-in replacement for existing signature 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>.</t>

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

<t>A composite signature MAY be associated with a composite public key as defined in <xref target="I-D.ounsworth-pq-composite-keys"/>, but MAY also be associated with multiple public keys from different sources, for example multiple X.509 certificates, or multiple cryptographic modules. In the latter case, composite signatures MAY be used as the mechanism for carrying multiple signatures in a non-composite hybrid authentication mechanism such as those described in <xref target="I-D.becker-guthrie-noncomposite-hybrid-auth"/>.</t>

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

<t>For protocols such as X.509 <xref target="RFC5280"></xref> that specify key usage along with the public key, then the composite public key associated with a composite signature MUST have a signing-type key usage.</t>

<t>If the keyUsage extension is present in a Certification Authority (CA) certificate that indicates a composite key, then any combination of the following values MAY be present:</t>

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

<t>If the keyUsage extension is present in an End Entity (EE) certificate that indicates a composite key, then any combination of the following values MAY be present:</t>

<figure><artwork><![CDATA[
digitalSignature; and
nonRepudiation;
]]></artwork></figure>

</section>
</section>
<section anchor="sec-composite-sig-structs"><name>sa-CompositeSignature</name>

<t>The ASN.1 algorithm object for a composite signature is:</t>

<figure><sourcecode type="asn.1"><![CDATA[
sa-CompositeSignature SIGNATURE-ALGORITHM ::= {
    IDENTIFIER TYPE OBJECT IDENTIFIER
    VALUE CompositeSignatureValue
    PARAMS ANY DEFINED BY ALGORITHM
    PUBLIC-KEYS { pk-Composite }
    SMIME-CAPS ANY DEFINED BY ALGORITHM }
]]></sourcecode></figure>

<t>The following is an explanation how SIGNATURE-ALGORITHM elements are used 
to create Composite Signatures:</t>

<texttable>
      <ttcol align='left'>SIGNATURE-ALGORITHM element</ttcol>
      <ttcol align='left'>Definition</ttcol>
      <c>IDENTIFIER</c>
      <c>The Object ID used to identify the composite Signature Algorithm</c>
      <c>VALUE</c>
      <c>The Sequence of BIT STRINGS for each component signature value</c>
      <c>PARAMS</c>
      <c>Signature parameters either declared ABSENT, or defined with a type and encoding</c>
      <c>PUBLIC-KEYS</c>
      <c>The composite key required to produce the composite signature</c>
      <c>SMIME_CAPS</c>
      <c>Not needed for composite</c>
</texttable>

</section>
<section anchor="sec-compositeSignatureValue"><name>CompositeSignatureValue</name>

<t>The output of the composite signature algorithm is the DER encoding of the following structure:</t>

<figure><sourcecode type="asn.1" name="composite-sig-asn.1"><![CDATA[
CompositeSignatureValue ::= SEQUENCE SIZE (2..MAX) OF BIT STRING
]]></sourcecode></figure>

<t>Where each BIT STRING within the SEQUENCE is a signature value produced by one of the component keys. It MUST contain one signature value produced by each component algorithm, and in the same order as in the associated CompositeSignatureParams object.</t>

<t>A CompositeSignatureValue MUST contain the same number of component signatures as the corresponding public and private keys, and the order of component signature values MUST correspond to the component public keys.</t>

<t>The choice of <spanx style="verb">SEQUENCE OF BIT STRING</spanx>, rather than for example a single BIT STRING containing the concatenated signature values, is to gracefully handle variable-length signature values by taking advantage of ASN.1&#39;s built-in length fields.</t>

</section>
<section anchor="sec-compositeParameters"><name>CompositeSignatureParameters</name>

<t>Composite signature parameters are defined as follows and MAY be used when a composite signature is used with an AlgorithmIdentifier:</t>

<figure><sourcecode type="asn.1" name="CompositeSignatureParams-asn.1-structures"><![CDATA[
CompositeSignatureParams ::= SEQUENCE SIZE (2..MAX) OF  
     AlgorithmIdentifier{SIGNATURE-ALGORITHM, {SignatureAlgSet}}
]]></sourcecode></figure>

<t>The signature&#39;s CompositeSignatureParams sequence MUST contain the same component algorithms listed in the same order as in the associated CompositePublicKey.</t>

<t>For explicit algorithms, it is not strictly necessary to carry a CompositeSignatureParams with the list of component algorithms in the signature algorithm parameters because clients can infer the expected component algorithms from the algorithm identifier. The PARAMS is left optional because some types of component algorithms will require parameters to be carried, such as RSASSA-PSS-params as defined in <xref target="RFC8017"></xref>. <xref target="sec-composite-sig-structs"/> defines <spanx style="verb">PARAMS ANY DEFINED BY ALGORITHM</spanx> so that explicit algorithms may define params as ABSENT, or use <spanx style="verb">CompositeSignatureParams</spanx> as defined in ASN.1 module.  For generic compsite algorithms, CompositeSignatureParams MUST be included.</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 composite signature data structures be represented by an octet string or bit string.</t>

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

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

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

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

<t>This section defines the algorithm identifiers for explicit combinations.  For simplicity and prototyping purposes, the signature algorithm object identifiers specified in this document are the same as the composite key object Identifiers specified in {draft-ounsworth-pq-composite-keys}.  A proper implementation should not presume that the object ID of a composite key will be the same as its composite signature algorithm.</t>

<t>This section is not intended to be exhaustive and other authors may define others composite signature algorithms so long as they are compatible with the structures and processes defined in this and companion public and private key documents.</t>

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

<t>The following table summarizes the details for each explicit composite signature algorithms:</t>

<t>The OID referenced are TBD for prototyping only, and the following prefix is used for each:</t>

<t>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>replace &lt;SPHINCS&gt; with the String &quot;SPHINCSplusSHA256128sSimple&quot;</t>

<t>Signature public key types:</t>

<texttable title="Explicit Composite Signature Algorithms" anchor="tab-composite-sigs">
      <ttcol align='left'>Composite Signature AlgorithmID</ttcol>
      <ttcol align='left'>OID</ttcol>
      <ttcol align='left'>First Algorithm</ttcol>
      <ttcol align='left'>Second Algorithm</ttcol>
      <c>id-Dilithium3-RSA-PSS</c>
      <c>&lt;CompSig&gt;.14</c>
      <c>Dilithium3</c>
      <c>SHA256WithRSAPSS</c>
      <c>id-Dilithium3-RSA-PKCS15-SHA256</c>
      <c>&lt;CompSig&gt;.1</c>
      <c>Dilithium3</c>
      <c>SHA256WithRSAEncryption</c>
      <c>id-Dilithium3-ECDSA-P256-SHA256</c>
      <c>&lt;CompSig&gt;.2</c>
      <c>Dilithium3</c>
      <c>SHA256withECDSA</c>
      <c>id-Dilithium3-ECDSA-brainpoolP256r1-SHA256</c>
      <c>&lt;CompSig&gt;.3</c>
      <c>Dilithium3</c>
      <c>SHA256withECDSA</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>SHA384withECDSA</c>
      <c>id-Dilithium5-ECDSA-brainpoolP384r1-SHA384</c>
      <c>&lt;CompSig&gt;.6</c>
      <c>Dilithium5</c>
      <c>SHA384withECDSA</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>SHA256withECDSA</c>
      <c>id-Falcon512-ECDSA-brainpoolP256r1-SHA256</c>
      <c>&lt;CompSig&gt;.9</c>
      <c>Falcon512</c>
      <c>SHA256withECDSA</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>&lt;SPHINCS&gt;</c>
      <c>SHA256withECDSA</c>
      <c>id-SPHINCSplusSHA256128sSimple-ECDSA-brainpoolP256r1-SHA256</c>
      <c>&lt;CompSig&gt;.12</c>
      <c>&lt;SPHINCS&gt;</c>
      <c>SHA256withECDSA</c>
      <c>id-SPHINCSplusSHA256128sSimple-Ed25519</c>
      <c>&lt;CompSig&gt;.13</c>
      <c>&lt;SPHINCS&gt;</c>
      <c>Ed25519</c>
      <c>id-SPHINCSplusSHA256128sSimple-Ed25519</c>
      <c>&lt;CompSig&gt;.13</c>
      <c>&lt;SPHINCS&gt;</c>
      <c>Ed25519</c>
      <c>id-alg-composite</c>
      <c>1.3.6.1.4.1.18227.2.1</c>
      <c>Any</c>
      <c>Any</c>
      <c>id-alg-composite-sha256</c>
      <c>1.3.6.1.4.1.18227.2.1.2</c>
      <c>Any</c>
      <c>Any</c>
      <c>id-alg-composite-sha512</c>
      <c>1.3.6.1.4.1.18227.2.1.4</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>ECDSA</em>: <xref target="RFC5480"></xref></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>
  <t>id-alg-composite: <xref target="I-D.ounsworth-pq-composite-keys"/></t>
</list></t>

<section anchor="notes-on-id-dilithium3-rsa-pss"><name>Notes on id-Dilithium3-RSA-PSS</name>

<t>Use of RSA-PSS <xref target="RFC8017"></xref> deserves a special explanation.</t>

<t>When the <spanx style="verb">id-Dilithium3-RSA-PSS</spanx> object identifier is used with an <spanx style="verb">AlgorithmIdentifier</spanx>, the <spanx style="verb">AlgorithmIdentifier.parameters</spanx> MUST be of type `CompositeSignatureParams as follows:</t>

<figure><artwork><![CDATA[
SEQUENCE {
    AlgorithmIdentifier {
        id-Dilithium3TBD
    },
    AlgorithmIdentifier {
        id-RSASSA-PSS,
        RSASSA-PSS-params
    }
}
]]></artwork></figure>

<t>EDNOTE: We probably should pick concrete crypto for the <spanx style="verb">RSASSA-PSS-params</spanx>. Once the crypto is fixed, we could omit the parameters entirely and expect implementations to re-constitute the params structures as necessary in order to call into lower-level crypto libraries.</t>

<t>TODO: there must be a way to put all this the ASN.1 Module rather than just specifying it as text?</t>

</section>
<section anchor="sec-generic-composite"><name>Notes on Generic Composite</name>

<t>This draft remains backwards compatible with the previous version of composite signatures.   Explicit Composite keys are a rigid subset of generic composite keys.  In previous versions, the composite signature algorihtm Identifier and the composite key identifier used different Object Identifiers.  The generic composite signature algorithm identifier is:</t>

<figure><sourcecode type="asn.1" name="GenericCompositeSignature-OID"><![CDATA[
id-alg-composite OBJECT IDENTIFIER ::= {
    iso(1)  identified-organization(3) dod(6) internet(1) private(4)
    enterprise(1) opencA(18227) algorithms(2) id-alg-composite(1) }
]]></sourcecode></figure>

<t>As defined in <xref target="I-D.ounsworth-pq-composite-keys"/>, a generic composite key uses the following identifier:</t>

<figure><sourcecode type="asn.1" name="GenericCompositeKey-OID"><![CDATA[
id-composite-key OBJECT IDENTIFIER ::= {
    joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027)
    algorithm(80) composite(4) compositekey(1) }
]]></sourcecode></figure>

<t>See the ASN.1 module in section <xref target="sec-asn1-module"/> for the definitions of Generic Composite algorithms</t>

<section anchor="sec-composite-prehash"><name>Pre-Hashed Generic Composite Signatures</name>

<t>The id-alg-composite-sha256 and id-alg-composite-sha512 object identifiers are used for identifying a pre-hashed generic composite signature that uses SHA-256 or SHA-512. These algorithms allow arbitrary combinations of component signature algorithms to be used in the CompositeSignatureValue and CompositeSignatureParams structures without needing the combination to be pre-registered or standardized.</t>

<t>When the id-alg-composite-sha256 and id-alg-composite-sha512 are used, the signature is calculated over the digest of the message rather than the message itself. This mode can be used to generate signatures with any type of key (i.e., classic, post-quantum, or post-post-quantum, etc...) by signing the SHA256 or SHA512 value calculated over the message.</t>

<t>This identifier MAY be used in sa-CompositeSignature.identifier.</t>

<figure><sourcecode type="asn.1"><![CDATA[
id-alg-composite-sha256 OBJECT IDENTIFIER ::= {
    iso(1)  identified-organization(3) dod(6) internet(1) private(4)
    enterprise(1) openCA(18227) algorithms(2) id-alg-composite(1)
    id-alg-composite-sha256(2) }
]]></sourcecode></figure>
<t>EDNOTE: this is a temporary OID for the purposes of prototyping. We are requesting IANA to assign a permanent OID, see <xref target="sec-iana"/>.</t>

<figure><sourcecode type="asn.1"><![CDATA[
id-alg-composite-sha512 OBJECT IDENTIFIER ::= {
    iso(1)  identified-organization(3) dod(6) internet(1) private(4)
    enterprise(1) openCA(18227) algorithms(2) id-alg-composite(1)
    id-alg-composite-sha512(4) } 
]]></sourcecode></figure>
<t>EDNOTE: this is a temporary OID for the purposes of prototyping. We are requesting IANA to assign a permanent OID, see <xref target="sec-iana"/>.</t>

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

<figure><sourcecode type="asn.1" name="CompositeSignatureParams-asn.1-structures"><![CDATA[
CompositeSignatureParams ::= SEQUENCE SIZE (2..MAX) OF  
     AlgorithmIdentifier{SIGNATURE-ALGORITHM, {SignatureAlgSet}}
]]></sourcecode></figure>

<t>The signature&#39;s CompositeSignatureParams sequence MUST contain the same component algorithms listed in the same order as in the associated CompositePublicKey.</t>

</section>
</section>
</section>
<section anchor="sec-composite-signature-algorithm"><name>Composite Signature Processes</name>

<t>This section specifies the processes for generating and verifying composite signatures.</t>

<t>This process addresses algorithm strength uncertainty by providing the verifier with parallel signatures from all the component signature algorithms; thus forging the composite signature would require forging all of the component signatures.</t>

<section anchor="sec-comp-sig-gen"><name>Composite Signature Generation Process</name>

<t>Generation of a composite signature involves applying each component algorithm&#39;s signature process to the input message according to its specification, and then placing each component signature value into the CompositeSignatureValue structure defined in <xref target="sec-composite-sig-structs"/>.</t>

<t>The following process is used to generate composite signature values.</t>

<figure><artwork name="alg-composite-sig-gen"><![CDATA[
Input:
     K1, K2, .., Kn     Signing private keys. See note below on 
                        composite inputs.

     A1, A2, ... An     Component signature algorithms. See note below on 
                        composite inputs.

     M                  Message to be signed, an octet string

Output:
     S                  The signatures, a CompositeSignatureValue

Signature Generation Process:
   1. Generate the n component signatures independently,
      according to their algorithm specifications.

        for i := 1 to n
            Si := Sign( Ki, Ai, M )

   2. Encode each component signature S1, S2, .., Sn into a BIT STRING
      according to its algorithm specification.

        S ::= Sequence { S1, S2, .., Sn }

   3. Output S
]]></artwork></figure>

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

<t>Since recursive composite public keys are disallowed in <xref target="I-D.ounsworth-pq-composite-keys"/>, no component signature may itself be a composite; ie the signature generation process MUST fail if one of the private keys K1, K2, .., Kn is a composite with the OID id-alg-composite or an explicit composite OID.</t>

<t>A composite signature MUST produce, and include in the output, a signature value for every component key in  and include in the output, a signature value for every component key in the corresponding CompositePublicKey, and they MUST be in the same order; ie in the output, S1 MUST correspond to K1, S2 to K2, etc.</t>

<t>For security when using a generic composite signature algorithm, the list of component signature algorithms A1, A2, .., An, which may be carried in a CompositeSignatureParams object, SHOULD be included in the signed message M to prevent an attacker from substituting a weaker algorithm which is compatible with the same public key. This attack is not unique or new to the composite format.</t>

</section>
<section anchor="sec-comp-sig-verify"><name>Composite Signature Verification Process</name>

<t>Verification of a composite signature involves applying each component algorithm&#39;s verification process according to its specification.</t>

<t>In the absence of an application profile specifying otherwise, compliant applications MUST output &quot;Valid signature&quot; (true) if and only if all component signatures were successfully validated, and &quot;Invalid signature&quot; (false) otherwise.</t>

<t>The following process is used to perform this verification.</t>

<figure><artwork name="alg-sig-verif"><![CDATA[
Input:
     P1, P2, .., Pn     Public verification keys. See note below on 
                        composite inputs.

     M                  Message whose signature is to be verified, 
                        an octet string
     
     S1, S2, .., Sn    Component signature values to be verified.
                       See note below on composite inputs.
     
     A1, A2, ... An     Component signature algorithms. See note 
                        below on composite inputs.

Output:
    Validity (bool)    "Valid signature" (true) if the composite 
                        signature is valid, "Invalid signature" 
                        (false) otherwise.

Signature Verification Procedure::
   1. Check keys, signatures, and algorithms lists for consistency.

      If Error during Desequencing, or the three sequences have
      different numbers of elements, or any of the public keys 
      P1, P2, .., Pn or algorithm identifiers A1, A2, .., An are 
      composite with the OID id-alg-composite or an explicit composite
      OID then output "Invalid signature" and stop.

   2. Check each component signature individually, according to its
       algorithm specification.
       If any fail, then the entire signature validation fails.

     for i := 1 to n
          if not verify( Pi, M, Si, Ai ), then
            output "Invalid signature"

      if all succeeded, then
        output "Valid signature"
]]></artwork></figure>

<t>Note on composite inputs: the method of providing the list of component keys, algorithms and signatures is flexible and beyond the scope of this pseudo-code, for example they may be carried in CompositePublicKey, CompositeSignatureParams, and compositesignaturevalue structures. It is also possible to verify a composite signature where the component public verification keys belong, for example, to separate X.509 certificates or cryptographic modules. Variations in the process to accommodate particular public verification key storage mechanisms are considered to be conformant to this document so long as it produces the same output as the process sketched above.</t>

<t>Since recursive composite public keys are disallowed in <xref target="I-D.ounsworth-pq-composite-keys"/>, no component signature may be composite; ie the signature verification procedure MUST fail if any of the public keys P1, P2, .., Pn or algorithm identifiers A1, A2, .., An are composite with OID id-alg-composite or an explicit composite OID.</t>

<t>Some verification clients may include a policy mechanism for specifying acceptable subsets of algorithms. In these cases, implementer MAY, in the interest of performance of compatibility, modify the above process to skip one or more signature validations as per their local client policy. See <xref target="I-D.pala-klaussner-composite-kofn"/> for a discussion of implementation and associated risks.</t>

<!-- End of Composite Signature Algorithm section -->

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

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


   Composite-Signatures-2023
     { joint-iso-itu-t(2) country(16) us(840) organization(1) entrust(114027) 
       algorithm(80) id-composite-signatures-2023 (TBD) }

DEFINITIONS IMPLICIT TAGS ::= BEGIN

EXPORTS ALL;

IMPORTS
  PUBLIC-KEY, SIGNATURE-ALGORITHM, 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) } 

  sa-rsaSSA-PSS
    FROM PKIX1-PSS-OAEP-Algorithms-2009
       {iso(1) identified-organization(3) dod(6) internet(1) security(5)
       mechanisms(5) pkix(7) id-mod(0) id-mod-pkix1-rsa-pkalgs-02(54)}
        
  pk-Dilithium3-RSA-PSS, id-Dilithium3-RSA-PSS,
  pk-Dilithium3-RSA-PKCS15-SHA256, id-Dilithium3-RSA-PKCS15-SHA256,
  pk-Dilithium3-ECDSA-P256-SHA256, id-Dilithium3-ECDSA-P256-SHA256,
  pk-Dilithium3-ECDSA-brainpoolP256r1, id-Dilithium3-ECDSA-brainpoolP256r1,
  pk-Dilithium3-Ed25519, id-Dilithium3-Ed25519,
  pk-Dilithium5-ECDSA-P384, id-Dilithium5-ECDSA-P384,
  pk-Dilithium5-ECDSA-brainpoolP384r1-SHA384, 
  id-Dilithium5-ECDSA-brainpoolP384r1-SHA384,
  pk-Dilithium5-Ed448, id-Dilithium5-Ed448,
  pk-Falcon512-ECDSA-P256-SHA256, id-Falcon512-ECDSA-P256-SHA256,
  pk-Falcon512-ECDSA-brainpoolP256r1-SHA256, 
  id-Falcon512-ECDSA-brainpoolP256r1-SHA256,
  pk-Falcon512-Ed25519, id-Falcon512-Ed25519,
  pk-SPHINCSplusSHA256128sSimple-ECDSA-P256-SHA256,
  id-SPHINCSplusSHA256128sSimple-ECDSA-P256-SHA256,
  pk-SPHINCSplusSHA256128sSimple-ECDSA-brainpoolP256r1-SHA256,
  id-SPHINCSplusSHA256128sSimple-ECDSA-brainpoolP256r1-SHA256,
  pk-SPHINCSplusSHA256128sSimple-Ed25519,
  id-SPHINCSplusSHA256128sSimple-Ed25519
    FROM CompositeKeys-2023
           {iso(1) identified-organization(3) dod(6) internet(1) security(5)
       mechanisms(5) pkix(7) id-mod(0) id-mod-composite-keys(TBD)};

--
-- Signature Algorithm
--

-- Composite Signature Value is just a sequence of OCTET STRINGS

   CompositeSignaturePair{FirstSignatureValue, SecondSignatureValue} ::= 
     SEQUENCE {
      signaturevalue1 FirstSignatureValue,
      signaturevalue2 SecondSignatureValue }

   -- An Explicit Compsite Signature is a set of Signatures which 
   -- are composed of OCTET STRINGS
   ExplicitCompositeSignatureValue ::= CompositeSignaturePair {
       OCTET STRING,OCTET STRING}
    
 
                                                        
ExplicitSignatureParameters{SIGNATURE-ALGORITHM:FirstSignatureAlg, 
   SIGNATURE-ALGORITHM:SecondSignatureAlg}  ::=     
      SEQUENCE {
          signatureAlgorithm1   AlgorithmIdentifier
                        { SIGNATURE-ALGORITHM, {FirstSignatureAlg}},
                signatureAlgorithm2   AlgorithmIdentifier
                        { SIGNATURE-ALGORITHM, {SecondSignatureAlg}} }                                                           
                                                        

sa-explicitCompositeSignature{OBJECT IDENTIFIER:id, 
   PUBLIC-KEY:publicKeyObject, ExplicitCompositeParams} 
      SIGNATURE-ALGORITHM ::=  {
         IDENTIFIER id
         VALUE ExplicitCompositeSignatureValue
         PARAMS TYPE ExplicitCompositeParams ARE required
         PUBLIC-KEYS {publicKeyObject} }


sa-Dilithium3-RSA-PSS-SHA256 SIGNATURE-ALGORITHM ::= 
   sa-explicitCompositeSignature{id-Dilithium3-RSA-PSS-SHA256,
   pk-Dilithium3-RSA-PSS-SHA256,
   ExplicitSignatureParameters{{sa-Dilithium3TBD},{sa-rsaSSA-PSS}} }

sa-Dilithium3-RSA-PKCS15-SHA256 SIGNATURE-ALGORITHM ::= 
    sa-explicitCompositeSignature{ id-Dilithium3-RSA-PKCS15-SHA256, 
    pk-Dilithium3-RSA-PKCS15-SHA256, 
    ExplicitSignatureParameters{{sa-Dilithium3TBD},{sa-rsaWithSHA256}} }

sa-Dilithium3-ECDSA-P256-SHA256 SIGNATURE-ALGORITHM ::= 
    sa-explicitCompositeSignature{id-Dilithium3-ECDSA-P256-SHA256, 
    pk-Dilithium3-ECDSA-P256-SHA256,
    ExplicitSignatureParameters{{sa-Dilithium3TBD},{sa-ecdsaWithSHA256}} }

sa-Dilithium3-ECDSA-brainpoolP256r1-SHA256 SIGNATURE-ALGORITHM ::= 
    sa-explicitCompositeSignature{id-Dilithium3-ECDSA-brainpoolP256r1-SHA256, 
    pk-Dilithium3-ECDSA-brainpoolP256r1-SHA256, 
    ExplicitSignatureParameters{{sa-Dilithium3TBD},{sa-ecdsaWithSHA256}} }

sa-Dilithium3-Ed25519 SIGNATURE-ALGORITHM ::= 
    sa-explicitCompositeSignature{id-Dilithium3-Ed25519,pk-Dilithium3-Ed25519,
    ExplicitSignatureParameters{{sa-Dilithium3TBD},{sa-Ed25519}} }

sa-Dilithium5-ECDSA-P384-SHA384 SIGNATURE-ALGORITHM ::= 
    sa-explicitCompositeSignature{ id-Dilithium5-ECDSA-P384-SHA384,
    pk-Dilithium5-ECDSA-P384-SHA384,
    ExplicitSignatureParameters{{sa-Dilithium5TBD},{sa-ecdsaWithSHA384}} }

sa-Dilithium5-ECDSA-brainpoolP384r1-SHA384 SIGNATURE-ALGORITHM ::= 
    sa-explicitCompositeSignature{id-Dilithium5-ECDSA-brainpoolP384r1-SHA384, 
    pk-Dilithium5-ECDSA-brainpoolP384r1-SHA384, 
    ExplicitSignatureParameters{{sa-Dilithium5TBD},{sa-ecdsaWithSHA384}} }

sa-Dilithium5-Ed448 SIGNATURE-ALGORITHM ::= 
    sa-explicitCompositeSignature{id-Dilithium5-Ed448,pk-Dilithium5-Ed448,
    ExplicitSignatureParameters{{sa-Dilithium5TBD},{sa-ed448}} }

sa-Falcon512-ECDSA-P256-SHA256 SIGNATURE-ALGORITHM ::= 
    sa-explicitCompositeSignature{id-Falcon512-ECDSA-P256-SHA256,
    pk-Falcon512-ECDSA-P256-SHA256,
    ExplicitSignatureParameters{{sa-Falcon512TBD},{sa-ecdsaWithSHA256}} }

sa-Falcon512-ECDSA-brainpoolP256r1-SHA256 SIGNATURE-ALGORITHM ::= 
    sa-explicitCompositeSignature{id-Falcon512-ECDSA-brainpoolP256r1-SHA256,
    pk-Falcon512-ECDSA-brainpoolP256r1-SHA256,
    ExplicitSignatureParameters{{sa-Falcon512TBD},{sa-ecdsaWithSHA256}} }

sa-Falcon512-Ed25519 SIGNATURE-ALGORITHM ::= 
    sa-explicitCompositeSignature{id-Falcon512-Ed25519,pk-Falcon512-Ed25519,
    ExplicitSignatureParameters{{sa-Falcon512TBD},{sa-Ed25519}} }

sa-SPHINCSplusSHA256128sSimple-ECDSA-P256-SHA256 SIGNATURE-ALGORITHM ::= 
    sa-explicitCompositeSignature{
    id-SPHINCSplusSHA256128sSimple-ECDSA-P256-SHA256,
    pk-SPHINCSplusSHA256128sSimple-ECDSA-P256-SHA256,
    ExplicitSignatureParameters{{sa-SPHINCSTBD},{sa-ecdsaWithSHA256}} }

sa-SPHINCSplusSHA256128sSimple-ECDSA-brainpoolP256r1-SHA256 
   SIGNATURE-ALGORITHM ::= sa-explicitCompositeSignature {
    id-SPHINCSplusSHA256128sSimple-ECDSA-brainpoolP256r1-SHA256,
    pk-SPHINCSplusSHA256128sSimple-ECDSA-brainpoolP256r1-SHA256,
      ExplicitSignatureParameters{{sa-SPHINCSTBD},
          {sa-ecdsaWithSHA256}} }

sa-SPHINCSplusSHA256128sSimple-Ed25519 SIGNATURE-ALGORITHM ::= 
   sa-explicitCompositeSignature{id-SPHINCSplusSHA256128sSimple-Ed25519,
      pk-SPHINCSplusSHA256128sSimple-Ed25519,
         ExplicitSignatureParameters{{sa-SPHINCSTBD},{sa-Ed25519}} }



-- Generic Composite definition

--
-- Object Identifiers
--

id-alg-composite OBJECT IDENTIFIER ::= {
  iso(1)  identified-organization(3) dod(6) internet(1) private(4)
  enterprise(1) opencA(18227) algorithms(2) id-alg-composite(1) }
  
id-alg-composite-sha256 OBJECT IDENTIFIER ::= {
    iso(1)  identified-organization(3) dod(6) internet(1) private(4)
    enterprise(1) openCA(18227) algorithms(2) id-alg-composite(1)
    id-alg-composite-sha256(2) }
      
id-alg-composite-sha512 OBJECT IDENTIFIER ::= {
    iso(1)  identified-organization(3) dod(6) internet(1) private(4)
    enterprise(1) openCA(18227) algorithms(2) id-alg-composite(1)
    id-alg-composite-sha512(4) } 

sa-CompositeSignature SIGNATURE-ALGORITHM ::= {
    IDENTIFIER id-alg-composite
    VALUE CompositeSignatureValue
    PARAMS TYPE CompositeSignatureParams ARE required
    PUBLIC-KEYS { pk-Composite }
 }
 
sa-CompositeSignature-SHA256 SIGNATURE-ALGORITHM ::= {
    IDENTIFIER id-alg-composite-sha256
    VALUE CompositeSignatureValue
    PARAMS TYPE CompositeSignatureParams ARE required
    PUBLIC-KEYS { pk-Composite }
 }
 
sa-CompositeSignature-SHA512 SIGNATURE-ALGORITHM ::= {
    IDENTIFIER id-alg-composite-sha512
    VALUE CompositeSignatureValue
    PARAMS TYPE CompositeSignatureParams ARE required
    PUBLIC-KEYS { pk-Composite }
 }
 
 CompositeSignatureValue ::= SEQUENCE SIZE (2..MAX) OF BIT STRING
 
 CompositeSignatureParams ::= SEQUENCE SIZE (2..MAX) OF  
     AlgorithmIdentifier{SIGNATURE-ALGORITHM, {SignatureAlgSet}}


END
 
<CODE ENDS>

]]></sourcecode></figure>

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

<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><artwork><![CDATA[
id-alg-composite OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) algorithms(6) composite(??) }
]]></artwork></figure>

<t>Plus the ASN.1 Module OID for <spanx style="verb">Composite-Signatures-2023</spanx>.</t>

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

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

<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), then clients performing signatures or verifications should be updated to adhere to appropriate policies.</t>

<t>In the composite model this is less obvious since a single public key, certificate, or signature may contain a mixture of deprecated and non-deprecated algorithms. Moreover, implementers may decide that certain cryptographic algorithms have complementary security properties and are acceptable in combination even though neither algorithm is acceptable by itself.</t>

<t>Specifying a modified verification algorithm to handle these situations is beyond the scope of this draft, but could be desirable as the subject of an application profile document, or to be up to the discretion of implementers.</t>

<figure><artwork><![CDATA[
2. Check policy to see whether A1, A2, ..., An constitutes a valid
   combination of algorithms.

   if not checkPolicy(A1, A2, ..., An), then
     output "Invalid signature"
]]></artwork></figure>

</section>
<section anchor="sec-subset-sig-verif"><name>K-of-N Validation Mode</name>
<t>This document defines a composite signature verification process in <xref target="sec-comp-sig-verify"/> where the verifier verifies all component signatures and fails if any component fails.</t>

<t>The authors recognize that there will be scenarios where the verifier considers a single component algorithm -- or subset of component algorithms -- to provide sufficient security, and therefore for performance, or other practical reasons, wishes to skip the verification of one or more component signatures. For example, it might be the case where the signer (whether it be a CA or an end entity) needs to be able to specify how its signatures are to be interpreted and verified. Another use-case is where one of the composite algorithms&#39; implementation might not be stable yet, possibly causing signature validation or generation issues across different providers or vendors.</t>

<t>A detailed description of a K of N validation mode that address all these use-cases is described in <xref target="I-D.pala-klaussner-composite-kofn"/>.</t>

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

<!-- Start of Appendices -->

</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>

&RFC2119;
&RFC2986;
&RFC4210;
&RFC5280;
&RFC5480;
&RFC5639;
&RFC5652;
&RFC6090;
&RFC7748;
&RFC8174;
&RFC8410;
&RFC8411;
&I-D.draft-ounsworth-pq-composite-keys-04;
&I-D.draft-massimo-lamps-pq-sig-certificates-00;
&I-D.draft-ietf-lamps-dilithium-certificates-01;
&I-D.draft-ietf-lamps-cms-sphincs-plus-01;
<reference anchor="X.690" >
  <front>
    <title>Information technology - ASN.1 encoding Rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
    <author >
      <organization>ITU-T</organization>
    </author>
    <date year="2015" month="November"/>
  </front>
  <seriesInfo name="ISO/IEC" value="8825-1:2015"/>
</reference>


    </references>

    <references title='Informative References'>

&RFC3279;
&RFC7296;
&RFC8446;
&RFC8551;
&RFC8017;
&I-D.draft-ounsworth-pq-composite-kem-00;
&I-D.draft-becker-guthrie-noncomposite-hybrid-auth-00;
&I-D.draft-guthrie-ipsecme-ikev2-hybrid-auth-00;
&I-D.draft-truskovsky-lamps-pq-hybrid-x509-01;
&I-D.draft-pala-klaussner-composite-kofn-00;
<reference anchor="Bindel2017" target="https://link.springer.com/chapter/10.1007/978-3-319-59879-6_22">
  <front>
    <title>Transitioning to a quantum-resistant public key infrastructure</title>
    <author initials="N." surname="Bindel" fullname="Nina Bindel">
      <organization></organization>
    </author>
    <author initials="U." surname="Herath" fullname="Udyani Herath">
      <organization></organization>
    </author>
    <author initials="M." surname="McKague" fullname="Matthew McKague">
      <organization></organization>
    </author>
    <author initials="D." surname="Stebila" fullname="Douglas Stebila">
      <organization></organization>
    </author>
    <date year="2017"/>
  </front>
</reference>


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

<section anchor="appdx-genComposite-examples"><name>Generic Composite Signature Examples</name>

<t>TODO</t>

</section>
<section anchor="appdx-expComposite-examples"><name>Explicit Composite Signature Examples</name>

<t>TODO</t>

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

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

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

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

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

<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 digital signature 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 email <xref target="RFC8551"></xref>, document signing such as in the context of the European eIDAS regulations [eIDAS2014], and publicly trusted code signing [codeSigningBRsv2.8], as well as myriad other standardized and proprietary protocols and applications that leverage CMS <xref target="RFC5652"></xref> signed structures.</t>

<section anchor="composite-k-of-n-or-modes"><name>Composite K-of-N (OR modes)</name>

<t><xref target="sec-comp-sig-gen"/> and <xref target="sec-comp-sig-verify"/> make reference to subset signature generation and verification modes to achieve an OR relation between component signatures, 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 signature algorithm for which it does not posses a compatible implementation but wishes to proceed with the signature verification using the subset of component signatures 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.</t>

<t>It is important to notice that although Composite Crypto 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), upgrading today&#39;s systems to be able to handle composite keys and signatures will also provide the tool for the next generation of migration. In other words, the work to support Composite Crypto will also provide crypto agility options for subsequent crypto-migration in a truly crypto-agile fashion (i.e., entities will always able to process composite signatures independent from the individual cryptographic algorithms that are supported today).</t>

<t>Please refer to <xref target="I-D.pala-klaussner-composite-kofn"/> for more information.</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 identity (name), but containing keys for different cryptographic algorithms. One could imagine a set of parallel PKIs where an existing PKI using legacy algorithms (RSA, ECC) is left operational during the post-quantum migration but is shadowed by one or more parallel PKIs using pure post quantum algorithms or composite algorithms (legacy and post-quantum).</t>

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

<t>For negotiated protocols, the client could choose which public key(s) or certificate(s) to use based on the negotiated algorithms, 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 algorithms defined in <xref target="sec-alg-ids"/> as a way to carry the multiple signature values generated by one of the 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 objects is often already treated as an OR relationship, so including one for each of the signer&#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>

</section>
<section anchor="hybrid-extensions-keys-and-signatures"><name>Hybrid Extensions (Keys and Signatures)</name>
<t>The use of Composite Crypto provides the possibility to process multiple algorithms without changing the logic of applications, but updating the cryptographic libraries: one-time change across the whole system. However, when it is not possible to upgrade the crypto engines/libraries, it is possible to leverage X.509 extensions to encode the additional keys and signatures. When the custom extensions are not marked critical, although this approach provides the most
backward-compatible approach where clients can simply ignore the post-quantum (or extra) keys and signatures, it also requires
all applications to be updated for correctly processing multiple algorithms together.</t>

<t>Please refer to <xref target="I-D.truskovsky-lamps-pq-hybrid-x509"/> for more information.</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>Serge Mister (Entrust),
Scott Fluhrer (Cisco Systems),
Panos Kampanakis (Cisco Systems),
Daniel Van Geest (ISARA),
Tim Hollebeek (Digicert), and
Francois Rousseau.</t>

<t>We are grateful to all, including any contributors who may have
been inadvertently omitted from this list.</t>

<t>This document borrows text from similar documents, including those referenced below. Thanks go to the authors of those
   documents.  &quot;Copying always makes things easier and less error prone&quot; - <xref target="RFC8411"></xref>.</t>

<section anchor="making-contributions"><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-composite-sigs</t>

<!-- End of Contributors section -->

</section>
</section>


  </back>

<!-- ##markdown-source:
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
D/3tg10654cnizCAzlREbWUtKMj2fDC8CGwcv7su4uPnrIu7HrqhB5bFXw4Y
L3wCZitoQfZ37s2MO0ibhijtbnNceLf5eTdhrvFN74FaG7V0nGob9Qda2qjk
2DS3U32o3hYH/dfeVl9XnneT1PxXvF9a3mpOOyOXxuOz1Boax2yF2mjoS352
QwZZ94EMs5YWmvOb9Ewe+XStaWcp6t/y05+U6dXl4XzyO4/qp31SX5Ah9pje
LT0el6Zl5ZYbEOvCiX+MvPJhPsGK+2/xvkb4XxPGwl/wp0aXNQc1FBzh75cE
Pj+6GprifT66cmzOOP9Iac7+oXhXZTr7397/n/9FGEc5F/1MEscvRrZqXzS1
2/joXmNv6rwYZg7WhZcOUCGCKnVPAN2JKebzBNWEtU646LJPHGHzDdriQnDe
zfSzWS9uo133D9ZFnXaP4EP/Onp4vreAwtya4s4OfdoDL7EDuenRCu3h2XtB
01W6s3GtvUU0rNoXjZFxrdP+2IyBP9ZGf3/frTVS737vK3XfQJF7cd/WyiP+
ff66Yx1X2cqaH2tBpYexOiqwhsbhUiPrc3WgV+N1dj3dm9VuqRLrrr4TxxpH
9muuLvrAZrKPq0JaVG22ZVRicDk05YicN936sZUZ3qPoQMrVwZ3OSG6bInaw
meSNmNFRY81Y031g017+6I0adMN996OHxu9pcg1z8wo6bJreA/N7ENpyIw8i
ZHrq86aKlSW4mabZ1hPbv2C2D2Hwpsk2YqfPmqucRo+bbUte/Vee+AZ0+yhT
5IvX/jH0UMnKX2/qClc2m0efOxP1fn0GTeU+vtZubWi7W1u71ocePcuDxvWC
dtpn21J45Cst4iPszE82TP9m9KAaJ19v4mTuNtnFnz0HfNuMfFMRli+bxAPG
94MG/KPmZxp4UMQ8shLM151zuzH8Kd6Hvx0lvoqsrbs0Gr0fnzmLqqD9tJI4
XzAzeuRzvCyf5895mDaqyQfX97Or+LQYkESwjbQSn0CsB7bElzXwaUR0rLbP
pucjdtCDG+iRXrHHUMh/+jOYyttu5Jaq53XbNHHt1aqXRCCn1icUNPgKGZJf
WswArPH/qIm0zAv/cVNXv/Q2nGrrHevq2OTicL0brVHWNffG5ptx4H/Ns3lI
pT04KcUR/6xzQ0b8orlBA//gubUmHT76hpXGNv5eecudzvDsGIbAcRvwGaM2
+AKmzjecw32kIrBUNAsHgFDOti4XpMOvdIGJWlEWdfvL6UhsjXWuBEay4OGz
UzpObOtKdQfw/573nu1sqTbztSp19Tn1cr7sEKj5BMiRYM/cwi6//a0uYtC5
AG1dL+Gks+ltea9qWMz7SrBO0yJUQ3QMVf3nKC3igqOqsNNjrFg/pbAgjBIa
2HgquwiwqHkYxXyDAwW7elfmOZGBXf/CTlPkz9z40nKnbY/jYPUlJ+49x1So
nUpEm4Fue6GK6JSETd9VlTf6KrbVBJSpYC7v/kqKYHTDzwpdgAyLbywpZ4EC
FiOOpMwwbSLPlhjbKDlGiyt3jaqXBWI1ksQUTUgwLCybcGGqgmIIDSkeR0IM
h9MJ/aFYxB/oW+CByF84vJ/R/cqJgDvNcomlR7zYN101fBpHOpWQM+DblogD
wzmRhEPL8rVNc+Ji6mWsKoVT+S7LSnHq1Z/BzCGBJWpmc5GqO8G8q62cVyc6
jQ6DBp24P47Cw8hbL4rQNgNrpi4FUjX243KlA1OL9qBfKnTGd35ONUNQ9XCu
XakiRzmWaUMWjr3HOst1hZ+lTlbCWL1cltVYPSwhxiLNBJ+r8EeKxqWwXqKV
k2xBMZm2Qh3uNIozRDk19cuke3XMhQkQn2JHLBC2Kw17UeIbwsP1JYgnQXYd
nHE6Bnd7ijnKrB44PNOGfN9XNIW+paA5orkxacpL2Xfztu6dCGhTvUF9KNoT
mJBzKbpeh83apzjoXnBukq67D5stm4HusFcEYOy1ugegmMo0zOOsaBqLDmF2
JWM9WQxPtFEYmPp3Dc8U+BDfbneLW7lYXV+jcMKZqc1pUh5V5XaqJG8jXIlF
+UKBZR5OS7oqPJdhQTX07vCGdxvaamdhc+LccNcmulZugI5LEGOzeakvS8C4
XIdGlGyYi23N7LGqhng00DHFdCsgXgu6QxWudEqTvi7bvXGGMumcBc51wYGY
TRGpxafJhwK2Z1roywlQWvDoqhfQEYvahfhVNeqWZ8nXzGNtLRzfWpZdHccP
/BVyZmhjnodT8ISuhcC7REAy5vCyk5ij1j1XGi2Nspz4dKDuIcCahXT97tKm
MJ7gf87cvqiGFjGxKpOiq5kU7i0NcdF0le8D8ckV6NICSyrwhd4Yg4ohth8s
sd5CjHH79DNW1ccSlAhz/pDldIX6RQ4qCwau0z4xKz6neQGGPMmuz3Y4MRd1
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

-->

</rfc>

