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


<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

<!ENTITY RFC2119 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2986 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2986.xml">
<!ENTITY RFC4210 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4210.xml">
<!ENTITY RFC5280 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml">
<!ENTITY RFC5652 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5652.xml">
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8411 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8411.xml">
]>

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

<rfc ipr="trust200902" docName="draft-ounsworth-pq-composite-sigs-06" category="std">
  <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="M." surname="Pala" fullname="Massimiliano Pala">
      <organization>CableLabs</organization>
      <address>
        <email>director@openca.org</email>
      </address>
    </author>

    <date year="2022" month="February" day="08"/>

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

    <abstract>


<t>With the widespread adoption of post-quantum cryptography will come the need for an entity to possess multiple public keys on different cryptographic algorithms. Since the trustworthiness of individual post-quantum algorithms is at question, a multi-key cryptographic operation will need to be performed in such a way that breaking it requires breaking each of the component algorithms individually. This requires defining new structures for holding composite signature data.</t>

<t>This document defines the structures CompositeSignatureValue, and CompositeParams, which are sequences of the respective structure for each component algorithm. This document also defines processes for generating and verifying composite signatures. This document makes no assumptions about what the component algorithms are, provided that their algorithm identifiers and signature generation and verification processes are defined.</t>

<!-- End of Abstract -->



    </abstract>



  </front>

  <middle>


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

<t>During the transition to post-quantum cryptography, there will be uncertainty as to the strength of cryptographic algorithms; we will no longer fully trust traditional cryptography such as RSA, Diffie-Hellman, DSA and their elliptic curve variants, but we will also not fully trust their post-quantum replacements until they have had sufficient scrutiny. 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>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>Backwards compatibility: 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 by building on ~~ reference draft-ounsworth-pq-composite-pubkeys ~~ 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 the Composite-OR mechanism described herein.</t>

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

<!-- End of Introduction section -->

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

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

<t>ALGORITHM:
          An information object class for identifying the type of
            cryptographic operation to be performed. 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>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 key or signature is a 
          non-composite key or signature.</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>

</section>
</section>
<section anchor="sec-composite-structs" title="Composite Identifiers and Structures">

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

<t>This section defines the following structures:</t>

<t><list style="symbols">
  <t>The id-alg-composite is an AlgorithmIdentifier identifying a composite signature object.  <vspace blankLines='1'/>
The sa-CompositeSignature AlgorithmIdentifier and the corresponding CompositeParams identify the algorithm(s) used in a composite signature.</t>
  <t>The CompositeSignatureValue, carries a sequence of signatures that are generated by a CompositePrivateKey, and can be verified with the corresponding CompositePublicKey.</t>
</list></t>

<t>EDNOTE 2: the choice to define composite algorithm parameters as a sequence inside the existing fields avoids the exponential proliferation of OIDs that are needed for each combination of signature algorithms in other schemes for achieving multi-key certificates. This scheme also naturally extends from 2-keypair to n-keypair keys and certificates.</t>

<t>EDNOTE 2a: We have heard community feedback that the ASN.1 structures presented here are too flexible in that allow arbitrary combinations of an arbitrary number of signature algorithms. The feedback is that this is too much of a &quot;footgun&quot; for implementors and sysadmins. We are working on an alternative formulation using ASN.1 information object classes that allow for compiling explicit pairs of algorithmIDs. We would love community feedback on which approach is preferred. See slide 30 of this presentation: https://datatracker.ietf.org/meeting/interim-2021-lamps-01/materials/slides-interim-2021-lamps-01-sessa-position-presentation-by-mike-ounsworth-00.pdf</t>

<section anchor="sec-alg-identifier" title="Algorithm Identifier">

<t>The following object identifier is used for identifying a composite signature.  Additional encoding information is provided below for each of these objects.</t>

<figure><artwork type="asn.1"><![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) }
]]></artwork></figure>

<t>EDNOTE 3: 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>

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

<t>A Composite signature MUST be associated with a Composite public key as defined in ~~ reference draft-ounsworth-pq-composite-pubkey ~~.</t>

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

<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 id-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 id-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" title="Composite Signature">

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

<figure><artwork type="asn.1"><![CDATA[
sa-CompositeSignature SIGNATURE-ALGORITHM ::= {
    IDENTIFIER id-alg-composite
    VALUE CompositeSignatureValue
    PARAMS TYPE CompositeParams ARE required
    PUBLIC-KEYS { pk-Composite }
    SMIME-CAPS { IDENTIFIED BY id-alg-composite } }
}
]]></artwork></figure>

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

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

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

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

<figure><artwork type="asn.1" name="composite-sig-asn.1"><![CDATA[
CompositeSignatureValue ::= SEQUENCE SIZE (2..MAX) OF BIT STRING
]]></artwork></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 CompositeParams object.</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-encoding-rules" title="Encoding Rules">
<!-- EDNOTE 7: Examples of how other specifications specify how a data structure is converted to a bit string can be found in RFC 2313, section 10.1.4, 3279 section 2.3.5, and RFC 4055, section 3.2. -->

<t>Many protocol specifications will require that 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-composite-signature-algorithm" title="Composite Signature Processes">

<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 breaking the composite signature would require breaking all of the component signatures.</t>

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

<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     Private keys for the n component signature
                        algorithms, a CompositePrivateKey
     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, 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>Since recursive composite public keys are disallowed in ~~ Reference draft-ounsworth-pq-composite-pubkeys sec-composite-pub-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.</t>

<t>A composite signature MUST produce and include in the output a signature value for every component key in the corresponding CompositePrivateKey. For this mode, please see Composite-OR in section <xref target="sec-comp-or-sig-gen"/>.</t>

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

<t>EDNOTE: This section was written with the intention of keeping the primary Composite OID reserved for the simple and strict mode; if you want to do either a simple OR, or a custom policy then we have given a different OID. We are still debating whether this is useful to specify at issuing time, or whether this is adding needless complexity to the draft.</t>

<t>If the algorithm ID of the public key associated with this signature is id-composite-or-key then the signer MAY use only a subset of the component keys and therefore produce fewer signatures than the number of component keys.</t>

<t>Composite-OR signature generation uses the same structures and algorithms as Composite, with the difference that the signature generation process may emit a null instead of a signature value in step 1 for one or more component algorithms. A Composite-OR signature MUST NOT be entirely null; it must contain at least one valid signature.</t>

<t>The design intent of this mode is to support migration scenarios where an end entity has been issued keys on algorithms that either itself or the peer with which it is communicating do not (yet) support. This design allows for both the mode where the signer omits signatures that it knows its peer cannot process in order to save bandwidth and performance, and the mode where it includes all component signatures and allows the verifier to choose how many to verify. The latter is RECOMMENDED for signatures that need both sort-term backwards compatibility as well as long-term security.</t>

<t>EDNOTE: Do we want to allow a Composite-OR with only a single signature to produce non-composite signatureAlgorithm and signatureValua as per <xref target="RFC5280"></xref>? Advantages: bandwidth savings of an extra OID and some sequences with one element. Disadvantages: ambiguous whether a signature is traditional or composite until you look at the corresponding public key.</t>

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

<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:
     P    Signer's composite public key
     M    Message whose signature is to be verified, an octet string
     S    Composite Signature to be verified
     A    Composite Algorithm identifier

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

Signature Verification Procedure::
   1. Parse P, S, A into the component public keys, signatures,
      and algorithm identifiers

      P1, P2, .., Pn := Desequence( P )
      S1, S2, .., Sn := Desequence( S )
      A1, A2, .., An := Desequence( A )

    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 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 ), then
            output "Invalid signature"

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

<t>Since recursive composite public keys are disallowed in ~~ Reference draft-ounsworth-pq-composite-keys sec-composite-pub-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 the OID id-alg-composite.</t>

</section>
<section anchor="sec-comp-or-sig-verify" title="Composite-OR Signature Verification">

<t>EDNOTE: This section was written with the intention of keeping the primary Composite OID reserved for the simple and strict mode; if you want to do either a simple OR, or a custom policy then we have given a different OID. We are still debating whether this is useful to specify at issuing time, or whether this is adding needless complexity to the draft.</t>

<t>When the public key associated with the signature being verified has algorithm id-composite-or-key, then an alternate verification processes MAY be used, at the discretion of the implementor. In this section we provide some examples of alternate verification processes.</t>

<t>If the signature is a traditional (non-composite) algorithm and value or a composite signature with a single component, then it MAY be considered valid if it verifies under one of the component keys.</t>

<t>If the signature is composite, then the implementor MAY implement policy for which combinations are acceptable.</t>

<t>EDNOTE: Does this mean Composite-OR end entity certificates need to be issued by a PKI that is marked as Composite-OR all the way to the top so that verifiers that do not support all the algorithms don&#39;t fail? Need to think more about the security implications of allowing a Composite-or in an end entity cert implicitely turning all Composite algIDs into Composite-or algIDs in its cert chain.</t>

<t>EDNOTE: Do we need to specify the semantics of verifying an &quot;n of m&quot; subset signature? I suspect that specifying this in general will be a rat&#39;s nest of edge cases, so I propose to &quot;leave this to the implementor&quot;.</t>

<section anchor="composite-or-legacy-mode" title="Composite-OR Legacy Mode">

<t>The Composite-OR Legacy Mode is provided to facilitate migration by allowing existing PKI entities (including root CAs, intermediate CAs, and end entities) to have their existing keys re-certified inside a Composite-OR structure along with Post-Quantum keys, and for signatures made by that key prior to the migration to remain valid. Note that Composite-OR Legacy Mode is only provided for signature verification, and not for signature generation; legacy signatures SHOULD NOT be produced from a Composite key.</t>

<t>EDNOTE: to further solidify this, we could add a clause that Legacy Mode signatures are to fail if the signature was produced after notBefore date of the Composite-OR certificate?</t>

<t>In Composite-OR Legacy Mode, a legacy signature algorithm and legacy signature value MAY be validated against a Composite-OR public key. The legacy signature algorithm is to be interpreted by the verifier as a sa-CompositeSignature with CompositeParams in the following way:</t>

<figure><artwork type="asn.1"><![CDATA[
CompositeParams {legacyAlgorithmIdentifier, null, .., null}
]]></artwork></figure>

<t>with the correct number of nulls to match the Composite-OR public key that the signature is being verified against. For the purposes of a signature validation under Composite-OR Legacy Mode, a null AlgorithmIdentifier is considered to be a match for the corresponding algorithm in the Composite-OR public key.</t>

<t>The legacy signature value is to be interpreted by the verifier as a sa-CompositeSignature with CompositeParams in the following way:</t>

<figure><artwork type="asn.1"><![CDATA[
CompositeSignatureValue  {legacySignatureValue, null, .., null}
]]></artwork></figure>

<t>with the correct number of nulls to match the Composite-OR public key that the signature is being verified against. The verification algorithm in section <xref target="sec-comp-or-sig-verify"/> applies.</t>

<t>Security consideration: when implementing Composite-OR Legacy Mode, it is important to catch the edge case of {null, null, .., null} for both AlgorithmIdentifier and SignatureValue and return Invalid Signature.</t>

<t>It is RECOMMENDED that Composite-OR Legacy Mode be implemented as an optional mode in the verifier that can be enabled or disabled by runtime configuration or policy.</t>

<t>EDNOTE: the signing public key is often identified in the signed document by issuer+serialNumber or by an SKI containing a hash of the public key value. Might need X.509 extensions identifying the SKI of the legacy cert it&#39;s replacing?</t>

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

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

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

<t>~~~ 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="cryptographic-protocols" title="Cryptographic protocols">

<t>This section talks about how protocols like (D)TLS and IKEv2 are affected by this specifications. It will not attempt to solve all these problems, but it will explain the rationale, how things will work and what open problems need to be solved. Obvious issues that need to be discussed.</t>

<t><list style="symbols">
  <t>How does the protocol declare support for composite signatures?  TLS has hooks for declaring support for specific signature algorithms, however it would need to be extended, because the client would need to declare support for both the composite infrastructure, as well as for the various component signature algorithms.</t>
  <t>How does the protocol use the multiple keys.  The obvious way would be to have the server sign using its composite public key; is this sufficient.</t>
  <t>Overhead; including certificate size, signature processing time, and size of the signature.</t>
  <t>How to deal with crypto protocols that use public key encryption algorithms; this document only lists how to work with signature algorithms.  Encoding composite public keys is straightforward; encoding composite ciphertexts is less so - we decided to put that off to another draft.</t>
</list></t>

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

</section>
</section>
<section anchor="sec-iana" title="IANA Considerations">
<t>The ASN.1 module OID is TBD.  The id-alg-composite OID is to be assigned by IANA.  The authors suggest that IANA assign an OID on the id-pkix arc:</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>

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

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

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

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

<t>In the composite model this is less obvious since 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>

<t>While intentionally not specified in this document, implementors should put careful thought into implementing a meaningfull policy mechinism within the context of their signature verification engines, for example only algorithms that provide similar security levels should be combined together.</t>

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

</section>
</section>
<section anchor="appendices" title="Appendices">

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

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

Composite-Signatures-2019
  { TBD }

DEFINITIONS IMPLICIT TAGS ::= BEGIN

EXPORTS ALL;

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

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

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

--
-- Object Identifiers
--

id-alg-composite OBJECT IDENTIFIER ::= { TBD }

--
-- Public Key
--

pk-Composite PUBLIC-KEY ::= {
    IDENTIFIER id-alg-composite
    KEY CompositePublicKey
    PARAMS ARE absent
    PRIVATE-KEY CompositePrivateKey
}

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

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

--
-- Signature Algorithm
--

sa-CompositeSignature SIGNATURE-ALGORITHM ::= {
    IDENTIFIER id-alg-composite
    VALUE CompositeSignatureValue
    PARAMS TYPE CompositeParams ARE required
    PUBLIC-KEYS { pk-Composite }
    SMIME-CAPS { IDENTIFIED BY id-alg-composite } }

CompositeParams ::= SEQUENCE SIZE (2..MAX) OF AlgorithmIdentifier

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

END

<CODE ENDS>

]]></artwork></figure>

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

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

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

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

<t>John Gray (Entrust),
Serge Mister (Entrust),
Scott Fluhrer (Cisco Systems),
Panos Kampanakis (Cisco Systems),
Daniel Van Geest (ISARA),
Tim Hollebeek (Digicert), and
Francois Rousseau.</t>

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

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

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

<t>Additional contributions to this draft are weclome. 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>


  </middle>

  <back>

    <references title='Normative References'>

&RFC2119;
&RFC2986;
&RFC4210;
&RFC5280;
&RFC5652;
&RFC8174;
&RFC8411;
<reference anchor="X.690" >
  <front>
    <title>Information technology - ASN.1 encoding Rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
    <author >
      <organization>ITU-T</organization>
    </author>
    <date year="2015" month="November"/>
  </front>
  <seriesInfo name="ISO/IEC" value="8825-1:2015"/>
</reference>


    </references>




  </back>

<!-- ##markdown-source:
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
vJ1euoLe4VHYfDU8GqHZZKijEhwFNICri2KCbmaj/+iUNzADAqlq/WQz2wxo
MBwYb+7RUZnIvFf3BpBTuvD4FvzEKLRVjHgS2hhP7AIZ0wvWRZuVvMPoAGZ7
cB8353Naf/pucn9sV6Y0CqHPlmrgtprVJDSA3L04s6nqh1WWuNGB51W7tgm7
eswrWud7bzNhyyz2W0rXi4qzWTuYF6I10MhjY9fN6xPkzd5T+pi+rFt6dGMQ
d2D6IvcST1E4Kao+4rU0XFtG+VD6hNy6DBh/RTcaUh60pNsTLftXURif/6+Z
72xTySVjZFAHQCGTO+sC+jW6RCl8awPFEYCBDgctgMNARmnMvmRn4xNXvWNr
HSzL0NL1stu6KnCNkiBIGwzAIbnaVQ6ejRqcicd010UgH1bsRvefdc8Oa9TI
sQBiUGcIaNMsh8NuCH+3EyaL1xtSPQYTfs4RN2TiA2uu7b1u2n5UEZ0SfFCZ
gCqzQgJzqjQMo732TjUgTrxt1c8XEjqtCQ7O1YLvcbNSp0pP8zCLMLqhry++
g7U8B/kC+1iBC5H7q6p8b3KziPiVIA7GYNkqy+5YNPDH1BMTfO4A11r1S2fG
ai0CDVFKsGNuYsfg2UJF1rNR9tasxui2jfvCheoEOl3m0juftTuonImJ7Rt0
G96j5cqPwNDt09/Twe0zJB8yiyIM7/ABFir0pQWFctmftK3kFAxpCeW/5PYk
JE1/uR/t6sqy8ktROfdh9yEyeJBVC/jcRmC5JOCPlaQLrBs+NAGcwiIAYb5P
JeAqIjyEQqDbW++keynq90GR7439X4ZZIWMOoFVakSCqhpj2bAdCBwQpWhSA
XxRTL6sejUCp6M0Ku1s+FvQJBZlBxPX5WpXIBVk2pY0UZcslqdmU9TdHn3eu
76osh6ZRgU3OpzU554wLbGoOOivB/CsTm5Uw4ub1maWj3ZZxHmG9JmNNNBBe
uJb9iC8cRnq5vVXGHoX24rqtU5rHqm1YY3OnP4I4jGxT6Z/TqP7r+tRdFLJ7
wqlXf1mbgScCt9P9NohRG/zeb6f76pVvTq9hogXcjfvU/EXnjXGkZWZV5PgM
G4cijkDA5GMfMQ7a5kH7VPF1SmvWmrQDVuzVr2GyNrIJIurtN3IOOOMZs58k
QxeMr0rEMi6/0W7Q9tbDq0n7J8NjWnr+3Xh46DwoJ5o4FFoV/rEUsvdV+FBN
rnyoF3g2V/fZHSmWabMBHR2YxGdyiLPcSoYSlv6wXwYkTCb62jyx1h/pKWA5
rqMG0xrho0BoXGS5Qnsn6PjBiDrOzMxuHSzufNl7SywLbc5FkfmSb6soOsaB
8QyuCq2WXkATMMg+YLkygi0rb1eg0GxOLgxUBZ8uXDk3FlxUAWuJgGYvbY9z
TlqGGhTZMgHslJYZyNvfZrbKzkTZRlX3h6FsY+slcgoLawRz2o3tJAObjvq+
95cfVdeQcawW02Ibn72r5cRCpNieEF9I4BKSGZVjuzxhldrl3C6akAUcr6Ab
i8hFR2kS1Zvpa8q8SvZHuBCzfLcxcS3r/0i6nyTQ93Spqs/l0q08lKyxjVy7
Nwv26rfQmBXBGxeJgH4ob0o0UnDypBYfkZSdgp/o6ncLJpSemq66DHqBkXlA
0VnlrvfFt0FN3uJVWb1a1yxXHDbKUH2CEv+QgMwrJkiAsBN/EC4BWFBLEfAT
oY4Ks0JZvUcONzXoeIPNLKBaWUKzsrwgZRkG2Tp/d3p1NhHzm/H1zfwfwvpn
7/qb/vHR8AWg9BOqV+wFOZu8mV5O8dLKuZhezM6np9MbcTN+y20k5IyD//3D
7ArmFOPz85cg9S7ot054W0Cv7RoDIp0311cXQbCpukGmj397A9ymPrXEnrwY
Hovf/3By9AKON/zJlol8+rMUq68xCRTsHuUKSh5ESfeo+oafVK2J4Y6Pjrsn
zw+5hWbOUsB33OO46sB46+lwYm83opP+1U+EA4Z9d+MSnWVoz3KVqrG/n9C1
hDHiwsczcH7lrWLK+zBsnmhNf/Shv8jiLV6mU5ru82dHhyI3Mja6Oxw+PXn2
AvcZmfBE+Hv/RRfemDUY5N0hnJwNQdOGltp+7m4/DLsnsMZn8RJvW4d/wS8k
4RxcS4gvvtiac3zBkzF28UobmqR2H0ZF/L/iug4cXUXPHe2E93TglRxU4MrX
bto7J/v1D6vmvc8Bn/v5fuHihVbS7bTM/gvz7JCNhVpLpJHA93/x/pP/gptL
/vLrNTqTyzOnHuBHVA6ktb+iP0qgkgSoAf8cx4ztuF2/oF6MPJ1dY0V7lGSm
pAutEqoD4WILa0SBE/XoxWp6kz95evL8+RN3n2gKRAR2l7uRbhxhR0WCKQ0q
CW1eVg1ubY6Xb+HCkfuYi1tSvruP/jyAzTVTGFfc5hmYYVjI8HFDAUJyFPEv
TuGqHKGgv4ehyX6heBk6vtVWOM1CX2vDgUPqp0FDH9zmoEa+ng/bqIz8kYdV
RvEzumSbWjGoIMDeMsd7r+6UBAMjcYUpi22hXI1sVOT4J3sE/oEi+uTD1XSG
IVSMjFBwk2M02MiztXdCb8rclLpq2AkueP5ttkrFW/pDVRO+dP6w15krhNgF
Xk+T155HWVGIN0m5yvHFKZBBJuZbGLY28Hom08yId2A/gW9/p83uiDNQWeAj
fQDT+a1Cx7w7nQOHwpsbvRbfAcjUQqk70T3Ttxq9kkOK0XTe5DL993/LMNuU
YWBPlnh/BNfh0d9bsKV2EvNdVSyI75UKiAtRgM4PVSJz31FKd+QX1C1MHT6F
q1IgUGGMZue29EWW59Rqg9YljXUGoRtiwm3wTa/+TjV7ZR4SoEzvjLjNnHfg
whaEJ/gGhY6fcSDEwWm2YR8oeZBbY/9Oio2jKmlcGo9IUlF9NlisqToQfepx
wb8z9RP3hVzwZQI17ul0gnv/6nxVY2++I1KBCFirgZhVTaOUorB3R4Jrta27
VkD8tTAkRXltBFeGMiP4Q02W9k4tv8NenjTrdquqRYN/Uq6RAAuQHxrW/wkf
koCvy24AAA==

-->

</rfc>
