<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-lamps-pq-composite-sigs-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="Composite ML-DSA">Composite ML-DSA For use in X.509 Public Key Infrastructure and CMS</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-pq-composite-sigs-03"/>
    <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>OpenCA Labs</organization>
      <address>
        <postal>
          <city>New York City, New York</city>
          <country>United States of America</country>
        </postal>
        <email>director@openca.org</email>
      </address>
    </author>
    <author initials="J." surname="Klaussner" fullname="Jan Klaussner">
      <organization>Bundesdruckerei GmbH</organization>
      <address>
        <postal>
          <street>Kommandantenstr. 18</street>
          <city>Berlin</city>
          <code>10969</code>
          <country>Germany</country>
        </postal>
        <email>jan.klaussner@bdr.de</email>
      </address>
    </author>
    <author initials="S." surname="Fluhrer" fullname="Scott Fluhrer">
      <organization>Cisco Systems</organization>
      <address>
        <email>sfluhrer@cisco.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="21"/>
    <area>Security</area>
    <workgroup>LAMPS</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 157?>

<t>This document defines combinations of ML-DSA <xref target="FIPS.204"/> in hybrid with traditional algorithms RSA-PKCS#1v1.5, RSA-PSS, ECDSA, Ed25519, and Ed448. These combinations are tailored to meet security best practices and regulatory requirements. Composite ML-DSA is applicable in any application that uses X.509, PKIX, and CMS data structures and protocols that accept ML-DSA, but where the operator wants extra protection against breaks or catastrophic bugs in ML-DSA.</t>
      <!-- End of Abstract -->



    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://lamps-wg.github.io/draft-composite-sigs/draft-ietf-lamps-pq-composite-sigs.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-lamps-pq-composite-sigs/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        LAMPS Working Group mailing list (<eref target="mailto:spams@ietf.org"/>),
        which is archived at <eref target="https://datatracker.ietf.org/wg/lamps/about/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/spams/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/lamps-wg/draft-composite-sigs"/>.</t>
    </note>
  </front>
  <middle>
    <?line 164?>

<section anchor="changes-in-03">
      <name>Changes in -03</name>
      <t>Interop-affecting changes:</t>
      <ul spacing="normal">
        <li>
          <t>Compacted CompositeSignaturePrivateKey to SEQUENCE SIZE (2) OF OCTET STRING instead of OneAsymmetricKey to remove redundancy</t>
        </li>
        <li>
          <t>Added support for the ML-DSA context String, and use the Composite Domain as the context for the underlying ML-DSA component algorithm.</t>
        </li>
        <li>
          <t>Added Pre-Hash and Pure modes and changed the Message format to align with FIPS-204.  This breaks backwards compatibility with all previous versions.</t>
        </li>
        <li>
          <t>Updated the OID table for new Pre-Hash OIDs and added them to the IANA section.</t>
        </li>
        <li>
          <t>Updated Use in CMS section to reflect content is hashed and pure Composite ML-DSA should be used.</t>
        </li>
      </ul>
      <t>Editorial changes:</t>
      <ul spacing="normal">
        <li>
          <t>Added the ASN.1 encodings for the component public keys and signature algorithm identifiers</t>
        </li>
        <li>
          <t>ASN.1 Module changes:
          </t>
          <ul spacing="normal">
            <li>
              <t>Renamed the module from Composite-Signatures-2023 -&gt; Composite-MLDSA-2024</t>
            </li>
            <li>
              <t>Simplified the ASN.1 module to make it more compiler-friendly (thanks Carl!) -- should not affect wire encodings.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Updated Security Considerations about Non-separability, EUF-CMA and key reuse.</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-intro">
      <name>Introduction</name>
      <t>The advent of quantum computing poses a significant threat to current cryptographic systems. Traditional cryptographic algorithms such as RSA, Diffie-Hellman, DSA, and their elliptic curve variants are vulnerable to quantum attacks. During the transition to post-quantum cryptography (PQC), there is considerable uncertainty regarding the robustness of both existing and new cryptographic algorithms. While we can no longer fully trust traditional cryptography, we also cannot immediately place complete trust in post-quantum replacements until they have undergone extensive scrutiny and real-world testing to uncover and rectify potential implementation flaws.</t>
      <t>Unlike previous migrations between cryptographic algorithms, the decision of when to migrate and which algorithms to adopt is far from straightforward. Even after the migration period, it may be advantageous for an entity's cryptographic identity to incorporate multiple public-key algorithms to enhance security.</t>
      <t>Cautious implementers may opt to combine cryptographic algorithms in such a way that an attacker would need to break all of them simultaneously to compromise the protected data. These mechanisms are referred to as Post-Quantum/Traditional (PQ/T) Hybrids <xref target="I-D.ietf-pquip-pqt-hybrid-terminology"/>.</t>
      <t>Certain jurisdictions are already recommending or mandating that PQC lattice schemes be used exclusively within a PQ/T hybrid framework. The use of Composite scheme provides a straightforward implementation of hybrid solutions compatible with (and advocated by) some governments and cybersecurity agencies <xref target="BSI2021"/>.</t>
      <t>Composite ML-DSA is applicable in any application that would otherwise use ML-DSA, but wants the protection against breaks or catastrophic bugs in ML-DSA.</t>
      <section anchor="sec-terminology">
        <name>Conventions and Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" 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.
These words may also appear in this document in
lower case as plain English words, absent their normative meanings.
<?line -8?>
        </t>
        <t>This document is consistent with the terminology defined in <xref target="I-D.ietf-pquip-pqt-hybrid-terminology"/>. In addition, the following terminology is used throughout this document:</t>
        <t><strong>ALGORITHM</strong>:
          The usage of the term "algorithm" within this
          document generally refers to any function which
          has a registered Object Identifier (OID) for
          use within an ASN.1 AlgorithmIdentifier. This
          loosely, but not precisely, aligns with the
          definitions of "cryptographic algorithm" and
          "cryptographic scheme" given in <xref target="I-D.ietf-pquip-pqt-hybrid-terminology"/>.</t>
        <t><strong>BER</strong>:
          Basic Encoding Rules (BER) as defined in <xref target="X.690"/>.</t>
        <t><strong>CLIENT</strong>:
          Any software that is making use of a cryptographic key.
          This includes a signer, verifier, encrypter, decrypter.
          This is not meant to imply any sort of client-server
          relationship between the communicating parties.</t>
        <t><strong>DER</strong>:
          Distinguished Encoding Rules as defined in <xref target="X.690"/>.</t>
        <t><strong>PKI</strong>:
          Public Key Infrastructure, as defined in <xref target="RFC5280"/>.</t>
        <t><strong>PUBLIC / PRIVATE KEY</strong>:
          The public and private portion of an asymmetric cryptographic
          key, making no assumptions about which algorithm.</t>
        <t><strong>SIGNATURE</strong>:
          A digital cryptographic signature, making no assumptions
            about which algorithm.</t>
      </section>
      <section anchor="composite-design-philosophy">
        <name>Composite Design Philosophy</name>
        <t><xref target="I-D.ietf-pquip-pqt-hybrid-terminology"/> defines composites as:</t>
        <ul empty="true">
          <li>
            <t><em>Composite Cryptographic Element</em>:  A cryptographic element that
     incorporates multiple component cryptographic elements of the same
     type in a multi-algorithm scheme.</t>
          </li>
        </ul>
        <t>Composite keys, as defined here, follow this definition and should be regarded as a single key that performs a single cryptographic operation such as key generation, signing, verifying, encapsulating, or decapsulating -- using its internal sequence of component keys as if they form a single key. This generally means that the complexity of combining algorithms can and should be handled by the cryptographic library or cryptographic module, and the single composite public key, private key, ciphertext and signature can be carried in existing fields in protocols such as PKCS#10 <xref target="RFC2986"/>, CMP <xref target="RFC4210"/>, X.509 <xref target="RFC5280"/>, CMS <xref target="RFC5652"/>, and the Trust Anchor Format <xref target="RFC5914"/>. In this way, composites achieve "protocol backwards-compatibility" in that they will drop cleanly into any protocol that accepts an analogous single-algorithm cryptographic scheme without requiring any modification of the protocol to handle multiple algorithms.</t>
      </section>
    </section>
    <section anchor="overview-of-the-composite-ml-dsa-signature-scheme">
      <name>Overview of the Composite ML-DSA Signature Scheme</name>
      <t>Composite schemes are defined as cryptographic primitives that consist of three algorithms:</t>
      <ul spacing="normal">
        <li>
          <t><tt>KeyGen() -&gt; (pk, sk)</tt>: A probabilistic key generation algorithm,
which generates a public key pk and a secret key sk.</t>
        </li>
        <li>
          <t><tt>Sign(sk, Message) -&gt; (signature)</tt>: A signing algorithm which takes
as input a secret key sk and a Message, and outputs a signature</t>
        </li>
        <li>
          <t><tt>Verify(pk, Message, signature) -&gt; true or false</tt>: A verification algorithm
which takes as input a public key, a Message, and a signature and outputs true
if the signature verifies correctly.  Thus it proves the Message was signed
with the secret key associated with the public key and verifies the integrity
of the Message.  If the signature and public key cannot verify the Message,
it returns false.</t>
        </li>
      </ul>
      <t>A composite signature allows the security properties of the two underlying algorithms to be combined via standard signature operations <tt>Sign()</tt> and <tt>Verify()</tt>.</t>
      <t>This specification uses the Post-Quantum signature scheme ML-DSA as specified in <xref target="FIPS.204"/> and <xref target="I-D.ietf-lamps-dilithium-certificates"/>. For Traditional signature schemes, this document uses the RSA PKCS#1v1.5 and RSA-PSS algorithms defined in <xref target="RFC8017"/>, the Elliptic Curve Digital Signature Algorithm ECDSA scheme defined in section 6 of <xref target="FIPS.186-5"/>, and Ed25519 / Ed448 which are defined in <xref target="RFC8410"/>. A simple "signature combiner"function which prepends a domain separator value specific to the composite algorithm is used to bind the two component signatures to the composite algorithm and achieve weak non-separablity.</t>
      <section anchor="pure-vs-pre-hashed-modes">
        <name>Pure vs Pre-hashed modes</name>
        <t>In <xref target="FIPS.204"/> NIST defined ML-DSA to have both pure and pre-hashed signing modes, referred to as "ML-DSA" and "HashML-DSA" respectively. Following this, this document defines "Composite-ML-DSA" and "HashComposite-ML-DSA" which mirror the external functions defined in <xref target="FIPS.204"/>.</t>
      </section>
    </section>
    <section anchor="sec-sigs">
      <name>Composite ML-DSA Functions</name>
      <section anchor="key-generation">
        <name>Key Generation</name>
        <t>To generate a new keypair for Composite schemes, the <tt>KeyGen() -&gt; (pk, sk)</tt> function is used. The KeyGen() function calls the two key generation functions of the component algorithms for the Composite keypair in no particular order. Multi-process or multi-threaded applications might choose to execute the key generation functions in parallel for better key generation performance.</t>
        <t>The following process is used to generate composite keypair values:</t>
        <figure anchor="alg-composite-keygen">
          <name>Composite KeyGen(pk, sk)</name>
          <artwork><![CDATA[
KeyGen() -> (pk, sk)

Explicit inputs:

  None

Implicit inputs:

  ML-DSA     A placeholder for the specific ML-DSA algorithm and
             parameter set to use, for example, could be "ML-DSA-65".

  Trad       A placeholder for the specific traditional algorithm and
             parameter set to use, for example "RSASA-PSS"
             or "Ed25519".

Output:

  (pk, sk)   The composite keypair.

Key Generation Process:

  1. Generate component keys

      (mldsaPK, mldsaSK) = ML-DSA.KeyGen()
      (tradPK, tradSK)   = Trad.KeyGen()

  2. Check for component key gen failure

      if NOT (mldsaPK, mldsaSK) or NOT (tradPK, tradSK):
        output "Key generation error"

  3. Encode the component keys into composite structures

      pk = CompositeSignaturePublicKey(mldsaPK, tradPK)
      sk = CompositeSignaturePrivateKey(mldsaSK, tradSK)

  4. Output the composite keys

      return (pk, sk)

]]></artwork>
        </figure>
        <t>The structures CompositeSignaturePublicKey and CompositeSignaturePrivateKey are described in <xref target="sec-composite-pub-keys"/> and <xref target="sec-priv-key"/> respectively and are used here as placeholders since implementations MAY use their own internal key representations in cases where interoperability is not required.</t>
        <t>In order to ensure fresh keys, the key generation functions MUST be executed for both component algorithms. Compliant parties MUST NOT use or import component keys that are used in other contexts, combinations, or by themselves as keys for standalone algorithm use. For more details on the security considerations around key reuse, see section <xref target="sec-cons-key-reuse"/>.</t>
        <t>Note that in step 2 above, both component key generation processes are invoked, and no indication is given about which one failed. This SHOULD be done in a timing-invariant way to prevent side-channel attackers from learning which component algorithm failed.</t>
      </section>
      <section anchor="sec-comp-sig-gen">
        <name>Pure Signature Mode</name>
        <t>This mode mirrors <tt>HashML-DSA</tt> defined in Sections 5.2 and 5.3 of <xref target="FIPS.204"/>.</t>
        <t>In the pure mode the Domain separator value is concatenated with the length of the context in bytes, the context, and the message to be signed.  After that, the signature process for each component algorithm is invoked and the values are then placed in the CompositeSignatureValue structure defined in <xref target="sec-composite-sig-structs"/>.</t>
        <t>A composite signature's value MUST include two signature components and MUST be in the same order as the components from the corresponding signing key.</t>
        <section anchor="composite-ml-dsasign">
          <name>Composite-ML-DSA.Sign</name>
          <t>This mode mirrors <tt>ML-DSA.Sign(sk, M, ctx)</tt> defined in Algorithm 2 in Section 5.2 of <xref target="FIPS.204"/>.</t>
          <figure>
            <name>Composite-ML-DSA.Sign(sk, M, ctx)</name>
            <artwork><![CDATA[
Composite-ML-DSA.Sign (sk, M, ctx) -> (signature)

Explicit inputs:

  sk    Composite private key consisting of signing private keys for
        each component.

  M     The Message to be signed, an octet string.

  ctx   The Message context string, which defaults to the empty string.


Implicit inputs:

  ML-DSA   A placeholder for the specific ML-DSA algorithm and
           parameter set to use, for example, could be "ML-DSA-65".

  Trad     A placeholder for the specific ML-DSA algorithm and
           parameter set to use, for example "RSASA-PSS with id-sha256"
           or "Ed25519".

  Domain   Domain separator value for binding the signature to the
           Composite OID. See section on Domain Separators below.

Output:

  signature   The composite signature, a CompositeSignatureValue.

Signature Generation Process:

  1. If |ctx| > 255:
      return error

  2. Compute the Message M'.

      M' = Domain || len(ctx) || ctx || M

  3. Separate the private key into component keys.

      (mldsaSK, tradSK) = sk

  4. Generate the 2 component signatures independently, by calculating
     the signature over M' according to their algorithm specifications.

      mldsaSig = ML-DSA.Sign( mldsaSK, M', ctx=Domain )
      tradSig = Trad.Sign( tradSK, M' )

  5. If either ML-DSA.Sign() or Trad.Sign() return an error, then this
     process must return an error.

      if NOT mldsaSig or NOT tradSig:
        output "Signature generation error"

   6. Encode each component signature into a CompositeSignatureValue.

      signature := CompositeSignatureValue(mldsaSig, tradSig)

  7. Output signature

      return signature
]]></artwork>
          </figure>
          <t>It is possible to use component private 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 and error handling as the process sketched above.</t>
          <t>Note that in step 5 above, both component signature processes are invoked, and no indication is given about which one failed. This SHOULD be done in a timing-invariant way to prevent side-channel attackers from learning which component algorithm failed.</t>
        </section>
        <section anchor="sec-comp-sig-verify">
          <name>Composite-ML-DSA.Verify</name>
          <t>This mode mirrors <tt>ML-DSA.Verify(pk, M, signature, ctx)</tt> defined in Algorithm 3 in Section 5.3 of <xref target="FIPS.204"/>.</t>
          <t>Compliant applications MUST output "Valid signature" (true) if and only if all component signatures were successfully validated, and "Invalid signature" (false) otherwise.</t>
          <figure anchor="alg-composite-verify">
            <name>Composite-ML-DSA.Verify(pk, Message, signature, Context)</name>
            <artwork><![CDATA[
Composite-ML-DSA.Verify(pk, M, signature, ctx)

Explicit inputs:

  pk          Composite public key conisting of verification public keys
              for each component.

  M           Message whose signature is to be verified,
              an octet string.

  signature   CompositeSignatureValue containing the component
              signature values (mldsaSig and tradSig) to be verified.

  ctx         The Message context string, which defaults to the empty
              string.

Implicit inputs:

  ML-DSA   A placeholder for the specific ML-DSA algorithm and
           parameter set to use, for example, could be "ML-DSA-65".

  Trad     A placeholder for the specific ML-DSA algorithm and
           parameter set to use, for example "RSASA-PSS with id-sha256"
           or "Ed25519".

  Domain   Domain separator value for binding the signature to the
           Composite OID. See section on Domain Separators below.


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

Signature Verification Process:

  1. If |ctx| > 255
      return error

  2. Separate the keys and signatures

        (pk1, pk2) = pk
        (s1, s2)   = signature

    If Error during Desequencing, or if any of the component
    keys or signature values are not of the correct key type or
    length for the given component algorithm then output
    "Invalid signature" and stop.

  3. Compute the Message M'.

        M' = Domain || len(ctx) || ctx || M

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

        if not ML-DSA.Verify( pk1, M', s1, ctx=Domain) then
          output "Invalid signature"

        if not Trad.Verify( pk2, M', s2) then
          output "Invalid signature"

        if all succeeded, then
          output "Valid signature"
]]></artwork>
          </figure>
          <t>Note that in step 4 above, the function fails early if the first component fails to verify. Since no private keys are involved in a signature verification, there are no timing attacks to consider, so this is ok.</t>
        </section>
      </section>
      <section anchor="sec-comp-sig-gen-prehash">
        <name>PreHash-Signature Mode</name>
        <t>This mode mirrors <tt>HashML-DSA</tt> defined in Section 5.4 of <xref target="FIPS.204"/>.</t>
        <t>In the pre-hash mode the Domain separator <xref target="sec-domsep-values"/> is concatenated with the length of the context in bytes, the context, an additional DER encoded value that represents the OID of the Hash function and finally the hash of the message to be signed.  After that, the signature process for each component algorithm is invoked and the values are then placed in the CompositeSignatureValue structure defined in <xref target="sec-composite-sig-structs"/>.</t>
        <t>A composite signature's value MUST include two signature components and MUST be in the same order as the components from the corresponding signing key.</t>
        <section anchor="sec-hash-comp-sig-sign">
          <name>HashComposite-ML-DSA-Sign signature mode</name>
          <t>This mode mirrors <tt>HashML-DSA.Sign(sk, M, ctx, PH)</tt> defined in Section 5.4.1 of <xref target="FIPS.204"/>.</t>
          <t>In the pre-hash mode the Domain separator <xref target="sec-domsep-values"/> is concatenated with the length of the context in bytes, the context, an additional DER encoded value that indicates which Hash function was used for the pre-hash and finally the pre-hashed message <tt>PH(M)</tt>.</t>
          <figure anchor="alg-hash-composite-sign">
            <name>HashComposite-ML-DSA.Sign(sk, M, ctx, PH)</name>
            <artwork><![CDATA[
HashComposite-ML-DSA.Sign (sk, M, ctx, PH) -> (signature)

Explicit inputs:

  sk    Composite private key consisting of signing private keys for
        each component.

  M     The Message to be signed, an octet string.

  ctx   The Message context string, which defaults to the empty string

  PH    The Message Digest Algorithm for pre-hashing.  See
        section on pre-hashing the message below.

Implicit inputs:

  ML-DSA   A placeholder for the specific ML-DSA algorithm and
           parameter set to use, for example, could be "ML-DSA-65".

  Trad     A placeholder for the specific ML-DSA algorithm and
           parameter set to use, for example "RSASA-PSS with id-sha256"
           or "Ed25519".

 Domain    Domain separator value for binding the signature to the
           Composite OID. See section on Domain Separators below.

 HashOID   The DER Encoding of the Object Identifier of the
           PreHash algorithm (PH) which is passed into the function.

Output:
  signature   The composite signature, a CompositeSignatureValue.

Signature Generation Process:

  1. If |ctx| > 255:
      return error

  2. Compute the Message format M'.

        M' :=  Domain || len(ctx) || ctx || HashOID || PH(M)

  3. Separate the private key into component keys.

       (mldsaSK, tradSK) = sk

  4. Generate the 2 component signatures independently, by calculating
     the signature over M' according to their algorithm specifications.

       mldsaSig = ML-DSA.Sign( mldsaSK, M', ctx=Domain )
       tradSig = Trad.Sign( tradSK, M' )

  5. If either ML-DSA.Sign() or Trad.Sign() return an error, then this
     process must return an error.

      if NOT mldsaSig or NOT tradSig:
        output "Signature generation error"

  6. Encode each component signature into a CompositeSignatureValue.

      signature := CompositeSignatureValue(mldsaSig, tradSig)

  7. Output signature

      return signature
]]></artwork>
          </figure>
          <t>It is possible to use component private 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 and error handling as the process sketched above.</t>
          <t>Note that in step 5 above, both component signature processes are invoked, and no indication is given about which one failed. This SHOULD be done in a timing-invariant way to prevent side-channel attackers from learning which component algorithm failed.</t>
        </section>
        <section anchor="sec-hash-comp-sig-verify">
          <name>HashComposite-ML-DSA-Verify</name>
          <t>This mode mirrors <tt>HashML-DSA.Verify(pk, M, signature, ctx, PH)</tt> defined in Section 5.4.1 of <xref target="FIPS.204"/>.</t>
          <t>Compliant applications MUST output "Valid signature" (true) if and only if all component signatures were successfully validated, and "Invalid signature" (false) otherwise.</t>
          <figure anchor="alg-hash-composite-verify">
            <name>HashComposite-ML-DSA.Verify(pk, M, signature, ctx, PH)</name>
            <artwork><![CDATA[
HashComposite-ML-DSA.Verify(pk, M, signature, ctx, PH)

Explicit inputs:

  pk          Composite public key consisting of verification public
              keys for each component.

  M           Message whose signature is to be verified, an octet
              string.

  signature   CompositeSignatureValue containing the component
              signature values (mldsaSig and tradSig) to be verified.

  ctx         The Message context string, which defaults to the empty
              string.

  PH          The Message Digest Algorithm for pre-hashing. See
              section on pre-hashing the message below.

Implicit inputs:

  ML-DSA    A placeholder for the specific ML-DSA algorithm and
            parameter set to use, for example, could be "ML-DSA-65".

  Trad      A placeholder for the specific ML-DSA algorithm and
            parameter set to use, for example "RSASA-PSS with id-sha256"
            or "Ed25519".

  Domain    Domain separator value for binding the signature to the
            Composite OID. See section on Domain Separators below.

  HashOID   The DER Encoding of the Object Identifier of the
            PreHash algorithm (PH) which is passed into the function.

Output:

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

Signature Verification Process:

  1. If |ctx| > 255
       return error

  2. Separate the keys and signatures

     (pk1, pk2) = pk
      (s1, s2) = signature

   If Error during Desequencing, or if any of the component
   keys or signature values are not of the correct key type or
   length for the given component algorithm then output
   "Invalid signature" and stop.

  3. Compute a Hash of the Message.

      M' = Domain || len(ctx) || ctx || HashOID || PH(M)

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

      if not ML-DSA.Verify( pk1, M', s1, ctx=Domain ) then
          output "Invalid signature"

      if not Trad.Verify( pk2, M', s2 ) then
          output "Invalid signature"

      if all succeeded, then
         output "Valid signature"
]]></artwork>
          </figure>
          <t>Note that in step 4 above, the function fails early if the first component fails to verify. Since no private keys are involved in a signature verification, there are no timing attacks to consider, so this is ok.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-composite-structs">
      <name>Composite Key Structures</name>
      <t>In order to form composite public keys and signature values, we define ASN.1-based composite encodings such that these structures can be used as a drop-in replacement for existing public key and signature fields such as those found in PKCS#10 <xref target="RFC2986"/>, CMP <xref target="RFC4210"/>, X.509 <xref target="RFC5280"/>, CMS <xref target="RFC5652"/>.</t>
      <section anchor="sec-composite-pub-keys">
        <name>CompositeSignaturePublicKey</name>
        <t>The wire encoding of a Composite ML-DSA public key is:</t>
        <sourcecode type="ASN.1" name="CompositeSignaturePublicKey-asn.1-structures"><![CDATA[
CompositeSignaturePublicKey ::= SEQUENCE SIZE (2) OF BIT STRING
]]></sourcecode>
        <t>Since RSA and ECDSA component public keys are themselves in a DER encoding, the following ASN.1 structures show the internal structure of the various public key types used in this specification:</t>
        <sourcecode type="ASN.1"><![CDATA[
RsaCompositeSignaturePublicKey ::= SEQUENCE {
        firstPublicKey BIT STRING (ENCODED BY id-raw-key),
        secondPublicKey BIT STRING (CONTAINING RSAPublicKey)
      } 

EcCompositeSignaturePublicKey ::= SEQUENCE {
        firstPublicKey BIT STRING (ENCODED BY id-raw-key),
        secondPublicKey BIT STRING (CONTAINING ECPoint)
      } 

EdCompositeSignaturePublicKey ::= SEQUENCE {
        firstPublicKey BIT STRING (ENCODED BY id-raw-key),
        secondPublicKey BIT STRING (ENCODED BY id-raw-key)
      }
]]></sourcecode>
        <t><tt>id-raw-key</tt> is defined by this document. It signifies that the public key has no ASN.1 wrapping and the raw bits are placed here according to the encoding of the underlying algorithm specification. In some situations and protocols, the key might be wrapped in ASN.1 or
may have some other additional decoration or encoding. If so, such wrapping MUST be removed prior to encoding the key itself as a BIT STRING.</t>
        <t>For use with this document, ML-DSA keys MUST be be the raw BIT STRING representation as specified in <xref target="I-D.ietf-lamps-dilithium-certificates"/> and Edwards Curve keys MUST be the raw BIT STRING representation as specified in <xref target="RFC8410"/>.</t>
        <t>Some applications may need to reconstruct the <tt>SubjectPublicKeyInfo</tt> objects corresponding to each component public key. <xref target="tab-sig-algs"/> or <xref target="tab-hash-sig-algs"/> in <xref target="sec-alg-ids"/> provides the necessary mapping between composite and their component algorithms for doing this reconstruction. This also motivates the design choice of <tt>SEQUENCE OF BIT STRING</tt> instead of <tt>SEQUENCE OF OCTET STRING</tt>; using <tt>BIT STRING</tt> allows for easier transcription between CompositeSignaturePublicKey and SubjectPublicKeyInfo.</t>
        <t>When the CompositeSignaturePublicKey must be provided in octet string or bit string format, the data structure is encoded as specified in <xref target="sec-encoding-rules"/>.</t>
        <t>Component keys of a CompositeSignaturePublicKey MUST NOT be used in any other type of key or as a standalone key. For more details on the security considerations around key reuse, see section <xref target="sec-cons-key-reuse"/>.</t>
        <t>The following ASN.1 Information Object Class is defined to allow for compact definitions of each composite algorithm, leading to a smaller overall ASN.1 module.</t>
        <sourcecode type="ASN.1"><![CDATA[
pk-CompositeSignature {OBJECT IDENTIFIER:id, PublicKeyType}
    PUBLIC-KEY ::= {
      IDENTIFIER id
      KEY PublicKeyType
      PARAMS ARE absent
      CERT-KEY-USAGE { digitalSignature, nonRepudiation, keyCertSign, cRLSign}
    }
]]></sourcecode>
        <t>As an example, the public key type <tt>id-MLDSA44-ECDSA-P256</tt> is defined as:</t>
        <artwork><![CDATA[
id-MLDSA44-ECDSA-P256 PUBLIC-KEY ::=
  pk-CompositeSignature{
    id-MLDSA44-ECDSA-P256,
    EcCompositeSignaturePublicKey }
]]></artwork>
        <t>The full set of key types defined by this specification can be found in the ASN.1 Module in <xref target="sec-asn1-module"/>.</t>
      </section>
      <section anchor="sec-priv-key">
        <name>CompositeSignaturePrivateKey</name>
        <t>When a Composite ML-DSA private key is to be exported from a cryptographic module, it uses an analogous definition to the public keys:</t>
        <sourcecode type="ASN.1" name="CompositeSignaturePrivateKey-asn.1-structures"><![CDATA[
CompositeSignaturePrivateKey ::= SEQUENCE SIZE (2) OF OCTET STRING
]]></sourcecode>
        <t>Each element of the <tt>CompositeSignaturePrivateKey</tt> Sequence is an <tt>OCTET STRING</tt> according to the encoding of the underlying algorithm specification and will decode into the respective private key structures in an analogous way to the public key structures defined in <xref target="sec-composite-pub-keys"/>. This document does not provide helper classes for private keys.  The PrivateKey for each component algorithm MUST be in the same order as defined in <xref target="sec-composite-pub-keys"/>.</t>
        <t>Use cases that require an interoperable encoding for composite private keys will often need to place a <tt>CompositeSignaturePrivateKey</tt> inside a <tt>OneAsymmetricKey</tt> structure defined in <xref target="RFC5958"/>, such as when private keys are carried in PKCS #12 <xref target="RFC7292"/>, CMP <xref target="RFC4210"/> or CRMF <xref target="RFC4211"/>. The definition of <tt>OneAsymmetricKey</tt> is copied here for convenience:</t>
        <sourcecode type="ASN.1" name="RFC5958-OneAsymmetricKey-asn.1-structure"><![CDATA[
 OneAsymmetricKey ::= SEQUENCE {
       version                   Version,
       privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,
       privateKey                PrivateKey,
       attributes            [0] Attributes OPTIONAL,
       ...,
       [[2: publicKey        [1] PublicKey OPTIONAL ]],
       ...
     }
  ...
  PrivateKey ::= OCTET STRING
                        -- Content varies based on type of key.  The
                        -- algorithm identifier dictates the format of
                        -- the key.
]]></sourcecode>
        <t>When a <tt>CompositeSignaturePrivateKey</tt> is conveyed inside a OneAsymmetricKey structure (version 1 of which is also known as PrivateKeyInfo) <xref target="RFC5958"/>, the privateKeyAlgorithm field SHALL be set to the corresponding composite algorithm identifier defined according to <xref target="sec-alg-ids"/> and its parameters field MUST be absent. The privateKey field SHALL contain the <tt>CompositeSignaturePrivateKey</tt>, and the <tt>publicKey</tt> field remains OPTIONAL.  If the <tt>publicKey</tt> field is present, it MUST be a <tt>CompositeSignaturePublicKey</tt>.</t>
        <t>Some applications may need to reconstruct the <tt>OneAsymmetricKey</tt> objects corresponding to each component private key. <xref target="sec-alg-ids"/> provides the necessary mapping between composite and their component algorithms for doing this reconstruction.</t>
        <t>Component keys of a CompositeSignaturePrivateKey MUST NOT be used in any other type of key or as a standalone key.  For more details on the security considerations around key reuse, see section <xref target="sec-cons-key-reuse"/>.</t>
      </section>
      <section anchor="sec-encoding-rules">
        <name>Encoding Rules</name>
        <!-- EDNOTE 7: Examples of how other specifications specify how a data structure is converted to a bit string can be found in RFC 2313, section 10.1.4, 3279 section 2.3.5, and RFC 4055, section 3.2. -->

<t>Many protocol specifications will require that the composite public key and composite private key data structures be represented by an octet string or bit string.</t>
        <t>When an octet string is required, the DER encoding of the composite data structure SHALL be used directly.</t>
        <sourcecode type="ASN.1"><![CDATA[
CompositeSignaturePublicKeyOs ::= OCTET STRING
                (CONTAINING CompositeSignaturePublicKey ENCODED BY der)
]]></sourcecode>
        <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>
        <sourcecode type="ASN.1"><![CDATA[
CompositeSignaturePublicKeyBs ::= BIT STRING
                (CONTAINING CompositeSignaturePublicKey ENCODED BY der)
]]></sourcecode>
        <t>In the interests of simplicity and avoiding compatibility issues, implementations that parse these structures MAY accept both BER and DER.</t>
      </section>
      <section anchor="key-usage-bits">
        <name>Key Usage Bits</name>
        <t>When any of the Composite ML-DSA <tt>AlgorithmIdentifier</tt> appears in the <tt>SubjectPublicKeyInfo</tt> field of an X.509 certificate <xref target="RFC5280"/>, the key usage certificate extension MUST only contain only signing-type key usages.</t>
        <t>The normal keyUsage rules for signing-type keys from <xref target="RFC5280"/> apply, and are reproduced here for completeness.</t>
        <t>For Certification Authority (CA) certificates that carry a composite public key, any combination of the following values MAY be present and any other values MUST NOT be present:</t>
        <artwork><![CDATA[
digitalSignature;
nonRepudiation;
keyCertSign; and
cRLSign.
]]></artwork>
        <t>For End Entity certificates, any combination of the following values MAY be present and any other values MUST NOT be present:</t>
        <artwork><![CDATA[
digitalSignature; and
nonRepudiation;
]]></artwork>
        <t>Composite ML-DSA keys MUST NOT be used in a "dual usage" mode because even if the
traditional component key supports both signing and encryption,
the post-quantum algorithms do not and therefore the overall composite algorithm does not.</t>
      </section>
    </section>
    <section anchor="composite-signature-structures">
      <name>Composite Signature Structures</name>
      <section anchor="sec-composite-sig-structs">
        <name>sa-CompositeSignature</name>
        <t>The ASN.1 algorithm object for a composite signature is:</t>
        <sourcecode type="asn.1"><![CDATA[
sa-CompositeSignature{OBJECT IDENTIFIER:id,
   PUBLIC-KEY:publicKeyType }
      SIGNATURE-ALGORITHM ::=  {
         IDENTIFIER id
         VALUE CompositeSignatureValue
         PARAMS ARE absent
         PUBLIC-KEYS {publicKeyType}
      }
]]></sourcecode>
      </section>
      <section anchor="sec-compositeSignatureValue">
        <name>CompositeSignatureValue</name>
        <t>The output of a Composite ML-DSA algorithm is the DER encoding of the following structure:</t>
        <t>The <tt>CompositeSignatureValue</tt> is the DER encoing of a SEQUENCE of the signature values from the
underlying component algorithms.  It is represented in ASN.1 as follows:</t>
        <sourcecode type="asn.1" name="composite-sig-asn.1"><![CDATA[
CompositeSignatureValue ::= SEQUENCE SIZE (2) OF BIT STRING
]]></sourcecode>
        <t>The order of the component signature values is the same as the order defined in <xref target="sec-composite-pub-keys"/>.</t>
      </section>
    </section>
    <section anchor="sec-alg-ids">
      <name>Algorithm Identifiers</name>
      <t>This table summarizes the list of Composite ML-DSA algorithms and lists the OID and the two component algorithms. Domain separator values are defined below in <xref target="sec-domsep-values"/>.</t>
      <t>EDNOTE: these are prototyping OIDs to be replaced by IANA.</t>
      <t>&lt;CompSig&gt;.1 is equal to 2.16.840.1.114027.80.8.1.1</t>
      <section anchor="composite-ml-dsa-algorithm-identifiers">
        <name>Composite-ML-DSA Algorithm Identifiers</name>
        <t>Pure Composite-ML-DSA Signature public key types:</t>
        <table anchor="tab-sig-algs">
          <name>Pure ML-DSA Composite Signature Algorithms</name>
          <thead>
            <tr>
              <th align="left">Composite Signature AlgorithmID</th>
              <th align="left">OID</th>
              <th align="left">First AlgorithmID</th>
              <th align="left">Second AlgorithmID</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">id-MLDSA44-RSA2048-PSS</td>
              <td align="left">&lt;CompSig&gt;.21</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">id-RSASA-PSS with id-sha256</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-RSA2048-PKCS15</td>
              <td align="left">&lt;CompSig&gt;.22</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">sha256WithRSAEncryption</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-Ed25519</td>
              <td align="left">&lt;CompSig&gt;.23</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">id-Ed25519</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-ECDSA-P256</td>
              <td align="left">&lt;CompSig&gt;.24</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">ecdsa-with-SHA256 with secp256r1</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA3072-PSS</td>
              <td align="left">&lt;CompSig&gt;.26</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">id-RSASA-PSS with id-sha256</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA3072-PKCS15</td>
              <td align="left">&lt;CompSig&gt;.27</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">sha256WithRSAEncryption</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA4096-PSS</td>
              <td align="left">&lt;CompSig&gt;.34</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">id-RSASA-PSS with id-sha384</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA4096-PKCS15</td>
              <td align="left">&lt;CompSig&gt;.35</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">sha384WithRSAEncryption</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-ECDSA-P384</td>
              <td align="left">&lt;CompSig&gt;.28</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">ecdsa-with-SHA384 with secp384r1</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-ECDSA-brainpoolP256r1</td>
              <td align="left">&lt;CompSig&gt;.29</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">ecdsa-with-SHA256 with brainpoolP256r1</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-Ed25519</td>
              <td align="left">&lt;CompSig&gt;.30</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">id-Ed25519</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-ECDSA-P384</td>
              <td align="left">&lt;CompSig&gt;.31</td>
              <td align="left">id-ML-DSA-87</td>
              <td align="left">ecdsa-with-SHA384 with secp384r1</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-ECDSA-brainpoolP384r1</td>
              <td align="left">&lt;CompSig&gt;.32</td>
              <td align="left">id-ML-DSA-87</td>
              <td align="left">ecdsa-with-SHA384 with brainpoolP384r1</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-Ed448</td>
              <td align="left">&lt;CompSig&gt;.33</td>
              <td align="left">id-ML-DSA-87</td>
              <td align="left">id-Ed448</td>
            </tr>
          </tbody>
        </table>
        <t>See the ASN.1 module in section <xref target="sec-asn1-module"/> for the explicit definitions of the above Composite ML-DSA algorithms.</t>
        <t>Full specifications for the referenced algorithms can be found in <xref target="appdx_components"/>.</t>
      </section>
      <section anchor="hashcomposite-ml-dsa-algorithm-identifiers">
        <name>HashComposite-ML-DSA Algorithm Identifiers</name>
        <t>HashComposite-ML-DSA Signature public key types:</t>
        <table anchor="tab-hash-sig-algs">
          <name>Hash ML-DSA Composite Signature Algorithms</name>
          <thead>
            <tr>
              <th align="left">Composite Signature AlgorithmID</th>
              <th align="left">OID</th>
              <th align="left">First AlgorithmID</th>
              <th align="left">Second AlgorithmID</th>
              <th align="left">Pre-Hash</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">id-HashMLDSA44-RSA2048-PSS-SHA256</td>
              <td align="left">&lt;CompSig&gt;.40</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">id-RSASA-PSS with id-sha256</td>
              <td align="left">id-sha256</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA44-RSA2048-PKCS15-SHA256</td>
              <td align="left">&lt;CompSig&gt;.41</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">sha256WithRSAEncryption</td>
              <td align="left">id-sha256</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA44-Ed25519-SHA512</td>
              <td align="left">&lt;CompSig&gt;.42</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">id-Ed25519</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA44-ECDSA-P256-SHA256</td>
              <td align="left">&lt;CompSig&gt;.43</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">ecdsa-with-SHA256 with secp256r1</td>
              <td align="left">id-sha256</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA3072-PSS-SHA512</td>
              <td align="left">&lt;CompSig&gt;.44</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">id-RSASA-PSS with id-sha256</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA3072-PKCS15-SHA512</td>
              <td align="left">&lt;CompSig&gt;.45</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">sha256WithRSAEncryption</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA4096-PSS-SHA512</td>
              <td align="left">&lt;CompSig&gt;.46</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">id-RSASA-PSS with id-sha384</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA4096-PKCS15-SHA512</td>
              <td align="left">&lt;CompSig&gt;.47</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">sha384WithRSAEncryption</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-ECDSA-P384-SHA512</td>
              <td align="left">&lt;CompSig&gt;.48</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">ecdsa-with-SHA384 with secp384r1</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512</td>
              <td align="left">&lt;CompSig&gt;.49</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">ecdsa-with-SHA256 with brainpoolP256r1</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-Ed25519-SHA512</td>
              <td align="left">&lt;CompSig&gt;.50</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">id-Ed25519</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA87-ECDSA-P384-SHA512</td>
              <td align="left">&lt;CompSig&gt;.51</td>
              <td align="left">id-ML-DSA-87</td>
              <td align="left">ecdsa-with-SHA384 with secp384r1</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512</td>
              <td align="left">&lt;CompSig&gt;.52</td>
              <td align="left">id-ML-DSA-87</td>
              <td align="left">ecdsa-with-SHA384 with brainpoolP384r1</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA87-Ed448-SHA512</td>
              <td align="left">&lt;CompSig&gt;.53</td>
              <td align="left">id-ML-DSA-87</td>
              <td align="left">id-Ed448</td>
              <td align="left">id-sha512</td>
            </tr>
          </tbody>
        </table>
        <t>See the ASN.1 module in <xref target="sec-asn1-module"/> for the explicit definitions of the above Composite ML-DSA algorithms.</t>
        <t>The Pre-Hash algorithm is used as the PH algorithm in and the DER Encoded OID value of this Hash is used as HashOID for the Message format in step 2 of <tt>HashComposite-ML-DSA.Sign</tt> in section <xref target="sec-hash-comp-sig-sign"/> and <tt>HashComposite-ML-DSA.Verify</tt> in <xref target="sec-hash-comp-sig-verify"/>.</t>
        <t>Full specifications for the referenced algorithms can be found in <xref target="appdx_components"/>.</t>
      </section>
      <section anchor="sec-domsep-values">
        <name>Domain Separators</name>
        <t>As mentioned above, the OID input value is used as a domain separator for the Composite Signature Generation and verification process and is the DER encoding of the OID. The following table shows the HEX encoding for each Signature AlgorithmID.</t>
        <table anchor="tab-sig-alg-oids">
          <name>Pure ML-DSA Composite Signature Domain Separators</name>
          <thead>
            <tr>
              <th align="left">Composite Signature AlgorithmID</th>
              <th align="left">Domain Separator (in Hex encoding)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">id-MLDSA44-RSA2048-PSS</td>
              <td align="left">060B6086480186FA6B50080115</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-RSA2048-PKCS15</td>
              <td align="left">060B6086480186FA6B50080116</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-Ed25519</td>
              <td align="left">060B6086480186FA6B50080117</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-ECDSA-P256</td>
              <td align="left">060B6086480186FA6B50080118</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA3072-PSS</td>
              <td align="left">060B6086480186FA6B5008011A</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA3072-PKCS15</td>
              <td align="left">060B6086480186FA6B5008011B</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA4096-PSS</td>
              <td align="left">060B6086480186FA6B50080122</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA4096-PKCS15</td>
              <td align="left">060B6086480186FA6B50080123</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-ECDSA-P384</td>
              <td align="left">060B6086480186FA6B5008011C</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-ECDSA-brainpoolP256r1</td>
              <td align="left">060B6086480186FA6B5008011D</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-Ed25519</td>
              <td align="left">060B6086480186FA6B5008011E</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-ECDSA-P384</td>
              <td align="left">060B6086480186FA6B5008011F</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-ECDSA-brainpoolP384r1</td>
              <td align="left">060B6086480186FA6B50080120</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-Ed448</td>
              <td align="left">060B6086480186FA6B50080121</td>
            </tr>
          </tbody>
        </table>
        <table anchor="tab-hash-sig-alg-oids">
          <name>Hash ML-DSA Composite Signature Domain Separators</name>
          <thead>
            <tr>
              <th align="left">Composite Signature AlgorithmID</th>
              <th align="left">Domain Separator (in Hex encoding)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">id-HashMLDSA44-RSA2048-PSS-SHA256</td>
              <td align="left">060B6086480186FA6B50080128</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA44-RSA2048-PKCS15-SHA256</td>
              <td align="left">060B6086480186FA6B50080129</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA44-Ed25519-SHA512</td>
              <td align="left">060B6086480186FA6B5008012A</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA44-ECDSA-P256-SHA256</td>
              <td align="left">060B6086480186FA6B5008012B</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA3072-PSS-SHA512</td>
              <td align="left">060B6086480186FA6B5008012C</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA3072-PKCS15-SHA512</td>
              <td align="left">060B6086480186FA6B5008012D</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA4096-PSS-SHA512</td>
              <td align="left">060B6086480186FA6B5008012E</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA4096-PKCS15-SHA512</td>
              <td align="left">060B6086480186FA6B5008012F</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-ECDSA-P384-SHA512</td>
              <td align="left">060B6086480186FA6B50080130</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512</td>
              <td align="left">060B6086480186FA6B50080131</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-Ed25519-SHA512</td>
              <td align="left">060B6086480186FA6B50080132</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA87-ECDSA-P384-SHA512</td>
              <td align="left">060B6086480186FA6B50080133</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512</td>
              <td align="left">060B6086480186FA6B50080134</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA87-Ed448-SHA512</td>
              <td align="left">060B6086480186FA6B50080135</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="rationale-for-choices">
        <name>Rationale for choices</name>
        <ul spacing="normal">
          <li>
            <t>Pair equivalent levels.</t>
          </li>
          <li>
            <t>NIST-P-384 is CNSA approved [CNSA2.0] for all classification levels.</t>
          </li>
          <li>
            <t>521 bit curve not widely used.</t>
          </li>
        </ul>
        <t>SHA2 is used throughout in order to facilitate implementations that do not have easy access to SHA3 outside of the ML-DSA function.</t>
        <t>At the higher security levels of pre-hashed Composite ML-DSA, for example <tt>id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512</tt>, the 384-bit elliptic curve component is used with SHA2-384 is its pre-hash (ie the pre-hash that is considered to be internal to the ECDSA component), yet SHA2-512 is used as the pre-hash for the overall composite because in this case the pre-hash must not weaken the ML-DSA-87 component against a collision attack.</t>
      </section>
      <section anchor="rsa-pss-parameters">
        <name>RSA-PSS Parameters</name>
        <t>Use of RSA-PSS <xref target="RFC8017"/> requires extra parameters to be specified, which differ for each security level.</t>
        <section anchor="rsa2048-pss">
          <name>RSA2048-PSS</name>
          <t>The RSA component keys MUST be generated at the 2048-bit security level in order to compliment ML-DSA-44</t>
          <t>As with the other composite signature algorithms, when <tt>id-MLDSA44-RSA2048-PSS</tt> and <tt>id-HashMLDSA44-RSA2048-PSS-SHA256</tt> is used in an AlgorithmIdentifier, the parameters MUST be absent. <tt>id-MLDSA44-RSA2048-PSS</tt> and <tt>id-HashMLDSA44-RSA2048-PSS-SHA256</tt> SHALL instantiate RSA-PSS with the following parameters:</t>
          <table anchor="rsa-pss-params2048">
            <name>RSA-PSS 2048 Parameters</name>
            <thead>
              <tr>
                <th align="left">RSA-PSS Parameter</th>
                <th align="left">Value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Mask Generation Function</td>
                <td align="left">mgf1</td>
              </tr>
              <tr>
                <td align="left">Mask Generation params</td>
                <td align="left">SHA-256</td>
              </tr>
              <tr>
                <td align="left">Message Digest Algorithm</td>
                <td align="left">SHA-256</td>
              </tr>
              <tr>
                <td align="left">Salt Length in bits</td>
                <td align="left">256</td>
              </tr>
            </tbody>
          </table>
          <t>where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>Mask Generation Function (mgf1)</tt> is defined in <xref target="RFC8017"/></t>
            </li>
            <li>
              <t><tt>SHA-256</tt> is defined in <xref target="RFC6234"/>.</t>
            </li>
          </ul>
        </section>
        <section anchor="rsa3072-pss">
          <name>RSA3072-PSS</name>
          <t>The RSA component keys MUST be generated at the 3072-bit security level in order to compliment ML-DSA-65.</t>
          <t>As with the other composite signature algorithms, when <tt>id-MLDSA65-RSA3072-PSS</tt> or <tt>id-HashMLDSA65-RSA3072-PSS-SHA512</tt>  is used in an AlgorithmIdentifier, the parameters MUST be absent. <tt>id-MLDSA65-RSA3072-PSS</tt> or <tt>id-HashMLDSA65-RSA3072-PSS-SHA512</tt> SHALL instantiate RSA-PSS with the following parameters:</t>
          <table anchor="rsa-pss-params3072">
            <name>RSA-PSS 3072 Parameters</name>
            <thead>
              <tr>
                <th align="left">RSA-PSS Parameter</th>
                <th align="left">Value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Mask Generation Function</td>
                <td align="left">mgf1</td>
              </tr>
              <tr>
                <td align="left">Mask Generation params</td>
                <td align="left">SHA-256</td>
              </tr>
              <tr>
                <td align="left">Message Digest Algorithm</td>
                <td align="left">SHA-256</td>
              </tr>
              <tr>
                <td align="left">Salt Length in bits</td>
                <td align="left">256</td>
              </tr>
            </tbody>
          </table>
          <t>where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>Mask Generation Function (mgf1)</tt> is defined in <xref target="RFC8017"/></t>
            </li>
            <li>
              <t><tt>SHA-256</tt> is defined in <xref target="RFC6234"/>.</t>
            </li>
          </ul>
        </section>
        <section anchor="rsa4096-pss">
          <name>RSA4096-PSS</name>
          <t>The RSA component keys MUST be generated at the 4096-bit security level in order to match with ML-DSA-65.</t>
          <t>As with the other composite signature algorithms, when <tt>id-MLDSA65-RSA4096-PSS</tt> or <tt>id-HashMLDSA65-RSA4096-PSS-SHA384</tt>  is used in an AlgorithmIdentifier, the parameters MUST be absent. <tt>id-MLDSA65-RSA4096-PSS</tt> or <tt>id-HashMLDSA65-RSA4096-PSS-SHA384</tt> SHALL instantiate RSA-PSS with the following parameters:</t>
          <table anchor="rsa-pss-params4096">
            <name>RSA-PSS 4096 Parameters</name>
            <thead>
              <tr>
                <th align="left">RSA-PSS Parameter</th>
                <th align="left">Value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Mask Generation Function</td>
                <td align="left">mgf1</td>
              </tr>
              <tr>
                <td align="left">Mask Generation params</td>
                <td align="left">SHA-384</td>
              </tr>
              <tr>
                <td align="left">Message Digest Algorithm</td>
                <td align="left">SHA-384</td>
              </tr>
              <tr>
                <td align="left">Salt Length in bits</td>
                <td align="left">384</td>
              </tr>
            </tbody>
          </table>
          <t>where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>Mask Generation Function (mgf1)</tt> is defined in <xref target="RFC8017"/></t>
            </li>
            <li>
              <t><tt>SHA-384</tt> is defined in <xref target="RFC6234"/>.</t>
            </li>
          </ul>
          <!-- End of Composite Signature Algorithm section -->

</section>
      </section>
    </section>
    <section anchor="use-in-cms">
      <name>Use in CMS</name>
      <t>[EDNOTE: The convention in LAMPS is to specify algorithms and their CMS conventions in separate documents. Here we have presented them in the same document, but this section has been written so that it can easily be moved to a standalone document.]</t>
      <t>Composite Signature algorithms MAY be employed for one or more recipients in the CMS signed-data content type <xref target="RFC5652"/>.</t>
      <t>All recommendations for using Composite ML-DSA in CMS are fully aligned with the use of ML-DSA in CMS <xref target="I-D.salter-lamps-cms-ml-dsa"/>.
[EDNOTE: at time of writing, this draft is not aligned with <xref target="I-D.salter-lamps-cms-ml-dsa"/> because it uses SHAKE for the digest algorithm. We believe that it should use SHA2, and we are sorting this out between authors. See: https://mailarchive.ietf.org/arch/msg/spasm/yM8kS1kCoizWCMjS8pdcV3IFaDg/]</t>
      <section anchor="underlying-components">
        <name>Underlying Components</name>
        <t>A compliant implementation MUST support the following algorithms for the SignerInfo <tt>digestAlgorithm</tt> field when the corresponding Composite ML-DSA algorithm is listed in the SignerInfo <tt>signatureAlgorithm</tt> field.  Implementations MAY also support other algorithms for the SignerInfo <tt>digestAlgorithm</tt> and SHOULD use algorithms of equivalent strength or greater.</t>
        <table anchor="tab-cms-shas">
          <name>Recommended Composite Signature Digest Algorithms</name>
          <thead>
            <tr>
              <th align="left">Composite Signature AlgorithmID</th>
              <th align="left">digestAlgorithm</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">id-MLDSA44-RSA2048-PSS</td>
              <td align="left">SHA256</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-RSA2048-PKCS15</td>
              <td align="left">SHA256</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-Ed25519</td>
              <td align="left">SHA512</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-ECDSA-P256</td>
              <td align="left">SHA256</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA3072-PSS</td>
              <td align="left">SHA512</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA3072-PKCS15</td>
              <td align="left">SHA512</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA4096-PSS</td>
              <td align="left">SHA512</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA4096-PKCS15</td>
              <td align="left">SHA512</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-ECDSA-P384</td>
              <td align="left">SHA512</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-ECDSA-brainpoolP256r1</td>
              <td align="left">SHA512</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-Ed25519</td>
              <td align="left">SHA512</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-ECDSA-P384</td>
              <td align="left">SHA512</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-ECDSA-brainpoolP384r1</td>
              <td align="left">SHA512</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-Ed448</td>
              <td align="left">SHA512</td>
            </tr>
          </tbody>
        </table>
        <t>where:</t>
        <ul spacing="normal">
          <li>
            <t>SHA2 instantiations are defined in [FIPS180].</t>
          </li>
        </ul>
        <t>Note:  The Hash ML-DSA Composite identifiers are not included in this list because the message content is already digested before being passed to the Composite-ML-DSA.Sign() function.</t>
      </section>
      <section anchor="signeddata-conventions">
        <name>SignedData Conventions</name>
        <t>As specified in CMS <xref target="RFC5652"/>, the digital signature is produced from the message digest and the signer's private key. The signature is computed over different values depending on whether signed attributes are absent or present.</t>
        <t>When signed attributes are absent, the composite signature is computed over the message digest of the content. When signed attributes are present, a hash is computed over the content using the hash function specified in <xref target="tab-cms-shas"/>, and then a message-digest attribute is constructed to contain the resulting hash value, and then the result of DER encoding the set of signed attributes, which MUST include a content-type attribute and a message-digest attribute, and then the composite signature is computed over the DER-encoded output. In summary:</t>
        <artwork><![CDATA[
IF (signed attributes are absent)
   THEN Composite-ML-DSA.Sign(Hash(content))
ELSE message-digest attribute = Hash(content);
   Composite-ML-DSA.Sign(DER(SignedAttributes))
]]></artwork>
        <t>When using Composite Signatures, the fields in the SignerInfo are used as follows:</t>
        <t>digestAlgorithm:
    Per Section 5.3 of <xref target="RFC5652"/>, the digestAlgorithm contains the one-way hash function used by the CMS signer.
    To ensure collision resistance, the identified message digest algorithm SHOULD produce a hash
    value of a size that is at least twice the collision strength of the internal commitment hash used by ML-DSA
    component algorithm of the Composite Signature.</t>
        <t>signatureAlgorithm:
    The signatureAlgorithm MUST contain one of the the Composite Signature algorithm identifiers as specified in <xref target="tab-cms-shas"/></t>
        <t>signature:
    The signature field contains the signature value resulting from the composite signing operation of the specified signatureAlgorithm.</t>
      </section>
      <section anchor="certificate-conventions">
        <name>Certificate Conventions</name>
        <t>The conventions specified in this section augment RFC 5280 <xref target="RFC5280"/>.</t>
        <t>The willingness to accept a composite Signature Algorithm MAY be signaled by the use of the SMIMECapabilities Attribute as specified in Section 2.5.2. of <xref target="RFC8551"/> or the SMIMECapabilities certificate extension as specified in [RFC4262].</t>
        <t>The intended application for the public key MAY be indicated in the key usage certificate extension as specified in Section 4.2.1.3 of <xref target="RFC5280"/>. If the keyUsage extension is present in a certificate that conveys a composite Signature public key, then the key usage extension MUST contain only the following value:</t>
        <artwork><![CDATA[
digitalSignature
nonRepudiation
keyCertSign
cRLSign
]]></artwork>
        <t>The keyEncipherment and dataEncipherment values MUST NOT be present. That is, a public key intended to be employed only with a composite signature algorithm MUST NOT also be employed for data encryption. This requirement does not carry any particular security consideration; only the convention that signature keys be identified with 'digitalSignature','nonRepudiation','keyCertSign' or 'cRLSign' key usages.</t>
      </section>
      <section anchor="smimecapabilities-attribute-conventions">
        <name>SMIMECapabilities Attribute Conventions</name>
        <t>Section 2.5.2 of <xref target="RFC8551"/> defines the SMIMECapabilities attribute to announce a partial list of algorithms that an S/MIME implementation can support. When constructing a CMS signed-data content type <xref target="RFC5652"/>, a compliant implementation MAY include the SMIMECapabilities attribute.</t>
        <t>The SMIMECapability SEQUENCE representing a composite signature Algorithm MUST include the appropriate object identifier as per <xref target="tab-cms-shas"/> in the capabilityID field.</t>
      </section>
    </section>
    <section anchor="sec-asn1-module">
      <name>ASN.1 Module</name>
      <sourcecode type="asn.1"><![CDATA[
<CODE STARTS>

Composite-MLDSA-2024
  { iso(1) identified-organization(3) dod(6) internet(1)
        security(5) mechanisms(5) pkix(7) id-mod(0)
        id-mod-composite-mldsa(TBDMOD) }


DEFINITIONS IMPLICIT TAGS ::= BEGIN

EXPORTS ALL;

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

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

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

;

--
-- Object Identifiers
--

-- Defined in ITU-T X.690
der OBJECT IDENTIFIER ::=
  {joint-iso-itu-t asn1(1) ber-derived(2) distinguished-encoding(1)}


-- Just for testing, to be assigned by IANA
id-raw-key OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) raw(999) 1 }


--
-- Signature Algorithm
--


--
-- Composite Signature basic structures
--

CompositeSignaturePublicKey ::= SEQUENCE SIZE (2) OF BIT STRING

CompositeSignaturePublicKeyOs ::= OCTET STRING (CONTAINING
                                CompositeSignaturePublicKey ENCODED BY der)

CompositeSignaturePublicKeyBs ::= BIT STRING (CONTAINING
                                CompositeSignaturePublicKey ENCODED BY der)

CompositeSignaturePrivateKey ::= SEQUENCE SIZE (2) OF OCTET STRING

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

RsaCompositeSignaturePublicKey ::= SEQUENCE {
        firstPublicKey BIT STRING (ENCODED BY id-raw-key),
        secondPublicKey BIT STRING (CONTAINING RSAPublicKey)
      }   

EcCompositeSignaturePublicKey ::= SEQUENCE {
        firstPublicKey BIT STRING (ENCODED BY id-raw-key),
        secondPublicKey BIT STRING (CONTAINING ECPoint)
      }

EdCompositeSignaturePublicKey ::= SEQUENCE {
        firstPublicKey BIT STRING (ENCODED BY id-raw-key),
        secondPublicKey BIT STRING (ENCODED BY id-raw-key)
      }

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


--
-- Information Object Classes
--

pk-CompositeSignature {OBJECT IDENTIFIER:id, PublicKeyType}
    PUBLIC-KEY ::= {
      IDENTIFIER id
      KEY PublicKeyType
      PARAMS ARE absent
      CERT-KEY-USAGE { digitalSignature, nonRepudiation, keyCertSign, cRLSign}
    }

sa-CompositeSignature{OBJECT IDENTIFIER:id,
   PUBLIC-KEY:publicKeyType }
      SIGNATURE-ALGORITHM ::=  {
         IDENTIFIER id
         VALUE CompositeSignatureValue
         PARAMS ARE absent
         PUBLIC-KEYS {publicKeyType}
      }

-- PURE Version of OIDS

-- TODO: OID to be replaced by IANA
id-MLDSA44-RSA2048-PSS OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 21 }

pk-MLDSA44-RSA2048-PSS PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA44-RSA2048-PSS,
  RsaCompositeSignaturePublicKey}

sa-MLDSA44-RSA2048-PSS SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA44-RSA2048-PSS,
       pk-MLDSA44-RSA2048-PSS }

-- TODO: OID to be replaced by IANA
id-MLDSA44-RSA2048-PKCS15 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 22 }

pk-MLDSA44-RSA2048-PKCS15 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA44-RSA2048-PKCS15,
  RsaCompositeSignaturePublicKey}

sa-MLDSA44-RSA2048-PKCS15 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA44-RSA2048-PKCS15,
       pk-MLDSA44-RSA2048-PKCS15 }


-- TODO: OID to be replaced by IANA
id-MLDSA44-Ed25519 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 23 }

pk-MLDSA44-Ed25519 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA44-Ed25519,
  EdCompositeSignaturePublicKey}

sa-MLDSA44-Ed25519 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA44-Ed25519,
       pk-MLDSA44-Ed25519 }


-- TODO: OID to be replaced by IANA
id-MLDSA44-ECDSA-P256 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 24 }

pk-MLDSA44-ECDSA-P256 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA44-ECDSA-P256,
  EcCompositeSignaturePublicKey}

sa-MLDSA44-ECDSA-P256 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA44-ECDSA-P256,
       pk-MLDSA44-ECDSA-P256 }


-- TODO: OID to be replaced by IANA
id-MLDSA65-RSA3072-PSS OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 26 }

pk-MLDSA65-RSA3072-PSS PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-RSA3072-PSS,
  RsaCompositeSignaturePublicKey}

sa-MLDSA65-RSA3072-PSS SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-RSA3072-PSS,
       pk-MLDSA65-RSA3072-PSS }


-- TODO: OID to be replaced by IANA
id-MLDSA65-RSA3072-PKCS15 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 27 }

pk-MLDSA65-RSA3072-PKCS15 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-RSA3072-PKCS15,
  RsaCompositeSignaturePublicKey}

sa-MLDSA65-RSA3072-PKCS15 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-RSA3072-PKCS15,
       pk-MLDSA65-RSA3072-PKCS15 }

-- TODO: OID to be replaced by IANA
id-MLDSA65-RSA4096-PSS OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 34 }

pk-MLDSA65-RSA4096-PSS PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-RSA4096-PSS,
  RsaCompositeSignaturePublicKey}

sa-MLDSA65-RSA4096-PSS SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-RSA4096-PSS,
       pk-MLDSA65-RSA4096-PSS }


-- TODO: OID to be replaced by IANA
id-MLDSA65-RSA4096-PKCS15 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 35 }

pk-MLDSA65-RSA4096-PKCS15 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-RSA4096-PKCS15,
  RsaCompositeSignaturePublicKey}

sa-MLDSA65-RSA4096-PKCS15 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-RSA4096-SHA512,
       pk-MLDSA65-RSA4096-SHA512 }

-- TODO: OID to be replaced by IANA
id-MLDSA65-ECDSA-P384 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 28 }

pk-MLDSA65-ECDSA-P384 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-ECDSA-P384,
  EcCompositeSignaturePublicKey}

sa-MLDSA65-ECDSA-P256 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-ECDSA-P384,
       pk-MLDSA65-ECDSA-P384 }


-- TODO: OID to be replaced by IANA
id-MLDSA65-ECDSA-brainpoolP256r1 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 29 }

pk-MLDSA65-ECDSA-brainpoolP256r1 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-ECDSA-brainpoolP256r1,
  EcCompositeSignaturePublicKey}

sa-MLDSA65-ECDSA-brainpoolP256r1 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-ECDSA-brainpoolP256r1,
       pk-MLDSA65-ECDSA-brainpoolP256r1 }


-- TODO: OID to be replaced by IANA
id-MLDSA65-Ed25519 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 30 }

pk-MLDSA65-Ed25519 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-Ed25519,
  EdCompositeSignaturePublicKey}

sa-MLDSA65-Ed25519 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-Ed25519,
       pk-MLDSA65-Ed25519 }


-- TODO: OID to be replaced by IANA
id-MLDSA87-ECDSA-P384 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 31 }

pk-MLDSA87-ECDSA-P384 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA87-ECDSA-P384,
  EcCompositeSignaturePublicKey}

sa-MLDSA87-ECDSA-P384 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA87-ECDSA-P384,
       pk-MLDSA87-ECDSA-P384 }


-- TODO: OID to be replaced by IANA
id-MLDSA87-ECDSA-brainpoolP384r1 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 32 }

pk-MLDSA87-ECDSA-brainpoolP384r1 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA87-ECDSA-brainpoolP384r1,
  EcCompositeSignaturePublicKey}

sa-MLDSA87-ECDSA-brainpoolP384r1 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA87-ECDSA-brainpoolP384r1,
       pk-MLDSA87-ECDSA-brainpoolP384r1 }


-- TODO: OID to be replaced by IANA
id-MLDSA87-Ed448 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 33 }

pk-MLDSA87-Ed448 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA87-Ed448,
  EdCompositeSignaturePublicKey}

sa-MLDSA87-Ed448 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA87-Ed448,
       pk-MLDSA87-Ed448 }


-- PreHash Version of the OIDs

-- TODO: OID to be replaced by IANA
id-HashMLDSA44-RSA2048-PSS-SHA256 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 40 }

pk-HashMLDSA44-RSA2048-PSS-SHA256 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA44-RSA2048-PSS-SHA256,
  RsaCompositeSignaturePublicKey}

sa-HashMLDSA44-RSA2048-PSS-SHA256 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA44-RSA2048-PSS-SHA256,
       pk-HashMLDSA44-RSA2048-PSS-SHA256 }

-- TODO: OID to be replaced by IANA
id-HashMLDSA44-RSA2048-PKCS15-SHA256 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 41 }

pk-HashMLDSA44-RSA2048-PKCS15-SHA256 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA44-RSA2048-PKCS15-SHA256,
  RsaCompositeSignaturePublicKey}

sa-HashMLDSA44-RSA2048-PKCS15-SHA256 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA44-RSA2048-PKCS15-SHA256,
       pk-HashMLDSA44-RSA2048-PKCS15-SHA256 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA44-Ed25519-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 42 }

pk-HashMLDSA44-Ed25519-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA44-Ed25519-SHA512,
  EdCompositeSignaturePublicKey}

sa-HashMLDSA44-Ed25519-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA44-Ed25519-SHA512,
       pk-HashMLDSA44-Ed25519-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA44-ECDSA-P256-SHA256 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 43 }

pk-HashMLDSA44-ECDSA-P256-SHA256 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA44-ECDSA-P256-SHA256,
  EcCompositeSignaturePublicKey}

sa-HashMLDSA44-ECDSA-P256-SHA256 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA44-ECDSA-P256-SHA256,
       pk-HashMLDSA44-ECDSA-P256-SHA256 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA65-RSA3072-PSS-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 44 }

pk-HashMLDSA65-RSA3072-PSS-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-RSA3072-PSS-SHA512,
  RsaCompositeSignaturePublicKey}

sa-HashMLDSA65-RSA3072-PSS-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-RSA3072-PSS-SHA512,
       pk-HashMLDSA65-RSA3072-PSS-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA65-RSA3072-PKCS15-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 45 }

pk-HashMLDSA65-RSA3072-PKCS15-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-RSA3072-PKCS15-SHA512,
  RsaCompositeSignaturePublicKey}

sa-HashMLDSA65-RSA3072-PKCS15-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-RSA3072-PKCS15-SHA512,
       pk-HashMLDSA65-RSA3072-PKCS15-SHA512 }

-- TODO: OID to be replaced by IANA
id-HashMLDSA65-RSA4096-PSS-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 46 }

pk-HashMLDSA65-RSA4096-PSS-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-RSA4096-PSS-SHA512,
  RsaCompositeSignaturePublicKey}

sa-HashMLDSA65-RSA4096-PSS-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-RSA4096-PSS-SHA512,
       pk-HashMLDSA65-RSA4096-PSS-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA65-RSA4096-PKCS15-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 47 }

pk-HashMLDSA65-RSA4096-PKCS15-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-RSA4096-PKCS15-SHA512,
  RsaCompositeSignaturePublicKey}

sa-HashMLDSA65-RSA4096-PKCS15-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-RSA4096-PKCS15-SHA512,
       pk-HashMLDSA65-RSA4096-PKCS15-SHA512 }

-- TODO: OID to be replaced by IANA
id-HashMLDSA65-ECDSA-P384-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 48 }

pk-HashMLDSA65-ECDSA-P384-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-ECDSA-P384-SHA512,
  EcCompositeSignaturePublicKey}

sa-HashMLDSA65-ECDSA-P256-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-ECDSA-P384-SHA512,
       pk-HashMLDSA65-ECDSA-P384-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 49 }

pk-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512,
  EcCompositeSignaturePublicKey}

sa-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512,
       pk-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA65-Ed25519-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 50 }

pk-HashMLDSA65-Ed25519-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-Ed25519-SHA512,
  EdCompositeSignaturePublicKey}

sa-HashMLDSA65-Ed25519-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-Ed25519-SHA512,
       pk-HashMLDSA65-Ed25519-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA87-ECDSA-P384-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 51 }

pk-HashMLDSA87-ECDSA-P384-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA87-ECDSA-P384-SHA512,
  EcCompositeSignaturePublicKey}

sa-HashMLDSA87-ECDSA-P384-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA87-ECDSA-P384-SHA512,
       pk-HashMLDSA87-ECDSA-P384-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 52 }

pk-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512,
  EcCompositeSignaturePublicKey}

sa-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512,
       pk-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA87-Ed448-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 53 }

pk-HashMLDSA87-Ed448-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA87-Ed448-SHA512,
  EdCompositeSignaturePublicKey}

sa-HashMLDSA87-Ed448-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA87-Ed448-SHA512,
       pk-HashMLDSA87-Ed448-SHA512 }

SignatureAlgorithmSet SIGNATURE-ALGORITHM ::= {
  sa-MLDSA44-RSA2048-PSS |
  sa-MLDSA44-RSA2048-PKCS15 |
  sa-MLDSA44-Ed25519 |
  sa-MLDSA44-ECDSA-P256 |
  sa-MLDSA65-RSA3072-PSS |
  sa-MLDSA65-RSA3072-PKCS15 |
  sa-MLDSA65-RSA4096-PSS |
  sa-MLDSA65-RSA4096-PKCS15 |
  sa-MLDSA65-ECDSA-P256 |
  sa-MLDSA65-ECDSA-brainpoolP256r1 |
  sa-MLDSA65-Ed25519 |
  sa-MLDSA87-ECDSA-P384 |
  sa-MLDSA87-ECDSA-brainpoolP384r1 |
  sa-MLDSA87-Ed448,
  ... }


--
-- Expand the S/MIME capabilities set used by CMS [RFC5911]
--

-- TODO: this doesn't compile, error:
-- "The referenced object in the 'ValueFromObject' 
-- syntax with the field '&smimeCaps' is invalid or does not exist."
-- We need help from an SMIME expert

SMimeCaps SMIME-CAPS ::= {
  sa-MLDSA44-RSA2048-PSS.&smimeCaps |
  sa-MLDSA44-RSA2048-PKCS15.&smimeCaps |
  sa-MLDSA44-Ed25519.&smimeCaps |
  sa-MLDSA44-ECDSA-P256.&smimeCaps |
  sa-MLDSA65-RSA3072-PSS.&smimeCaps |
  sa-MLDSA65-RSA3072-PKCS15.&smimeCaps |
  sa-MLDSA65-RSA4096-PSS.&smimeCaps |
  sa-MLDSA65-RSA4096-PKCS15.&smimeCaps |
  sa-MLDSA65-ECDSA-P256.&smimeCaps |
  sa-MLDSA65-ECDSA-brainpoolP256r1.&smimeCaps |
  sa-MLDSA65-Ed25519.&smimeCaps |
  sa-MLDSA87-ECDSA-P384.&smimeCaps |
  sa-MLDSA87-ECDSA-brainpoolP384r1.&smimeCaps |
  sa-MLDSA87-Ed448.&smimeCaps,
  ... }

END

<CODE ENDS>

]]></sourcecode>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t>IANA is requested to allocate a value from the "SMI Security for PKIX Module Identifier" registry <xref target="RFC7299"/> for the included ASN.1 module, and allocate values from "SMI Security for PKIX Algorithms" to identify the fourteen Algorithms defined within.</t>
      <section anchor="object-identifier-allocations">
        <name>Object Identifier Allocations</name>
        <t>EDNOTE to IANA: OIDs will need to be replaced in both the ASN.1 module and in <xref target="tab-sig-algs"/> and <xref target="tab-hash-sig-algs"/>.</t>
        <section anchor="module-registration-smi-security-for-pkix-module-identifier">
          <name>Module Registration - SMI Security for PKIX Module Identifier</name>
          <ul spacing="normal">
            <li>
              <t>Decimal: IANA Assigned - <strong>Replace TBDMOD</strong></t>
            </li>
            <li>
              <t>Description: Composite-Signatures-2023 - id-mod-composite-signatures</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
          </ul>
        </section>
        <section anchor="object-identifier-registrations-smi-security-for-pkix-algorithms">
          <name>Object Identifier Registrations - SMI Security for PKIX Algorithms</name>
          <ul spacing="normal">
            <li>
              <t>id-raw-key</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description: Designates a public key BIT STRING with no ASN.1 structure.</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLDSA44-RSA2048-PSS-SHA256</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-MLDSA44-RSA2048-PSS-SHA256</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLDSA44-RSA2048-PKCS15-SHA256</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-MLDSA44-RSA2048-PKCS15-SHA256</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLDSA44-Ed25519</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-MLDSA44-Ed25519</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLDSA44-ECDSA-P256-SHA256</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-MLDSA44-ECDSA-P256-SHA256</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLDSA65-RSA3072-PSS-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-MLDSA65-RSA3072-PSS-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLDSA65-RSA3072-PKCS15-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-MLDSA65-RSA3072-PKCS15-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLDSA65-RSA4096-PSS-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-MLDSA65-RSA4096-PSS-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLDSA65-RSA4096-PKCS15-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-MLDSA65-RSA4096-PKCS15-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLDSA65-ECDSA-P384-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-MLDSA65-ECDSA-P384-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLDSA65-ECDSA-brainpoolP256r1-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-MLDSA65-ECDSA-brainpoolP256r1-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLDSA65-Ed25519</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-MLDSA65-Ed25519</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLDSA87-ECDSA-P384-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-MLDSA87-ECDSA-P384-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLDSA87-ECDSA-brainpoolP384r1-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-MLDSA87-ECDSA-brainpoolP384r1-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-MLDSA87-Ed448</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-MLDSA87-Ed448</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-HashMLDSA44-RSA2048-PSS-SHA256</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-HashMLDSA44-RSA2048-PSS-SHA256</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-HashMLDSA44-RSA2048-PKCS15-SHA256</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-HashMLDSA44-RSA2048-PKCS15-SHA256</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-HashMLDSA44-Ed25519-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-HashMLDSA44-Ed25519-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-HashMLDSA44-ECDSA-P256-SHA256</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-HashMLDSA44-ECDSA-P256-SHA256</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-HashMLDSA65-RSA3072-PSS-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-HashMLDSA65-RSA3072-PSS-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-HashMLDSA65-RSA3072-PKCS15-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-HashMLDSA65-RSA3072-PKCS15-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-HashMLDSA65-RSA4096-PSS-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-HashMLDSA65-RSA4096-PSS-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-HashMLDSA65-RSA4096-PKCS15-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-HashMLDSA65-RSA4096-PKCS15-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-HashMLDSA65-ECDSA-P384-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-HashMLDSA65-ECDSA-P384-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-HashMLDSA65-Ed25519-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-HashMLDSA65-Ed25519-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-HashMLDSA87-ECDSA-P384-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-HashMLDSA87-ECDSA-P384-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
            <li>
              <t>id-HashMLDSA87-Ed448-SHA512</t>
            </li>
            <li>
              <t>Decimal: IANA Assigned</t>
            </li>
            <li>
              <t>Description:  id-HashMLDSA87-Ed448-SHA512</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
          </ul>
          <!-- End of IANA Considerations section -->

</section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="sec-cons-non-separability">
        <name>Non-separability and EUF-CMA</name>
        <t>The signature combiner defined in this document is Weakly Non-Separable (WNS), as defined in <xref target="I-D.ietf-pquip-hybrid-signature-spectrums"/>,  since the forged message <tt>M’</tt> will include the composite domain separator as evidence. The prohibition on key reuse between composite and single-algorithm contexts discussed in <xref target="sec-cons-key-reuse"/> further strengthens the non-separability in practice, but does not achieve Strong Non-Separability (SNS) since policy mechanisms such as this are outside the definition of SNS.</t>
        <t>Unforgeability properties are somewhat more nuanced. The classic EUF-CMA game is in reference to a pair of algorithms <tt>( Sign(), Verify() )</tt> where the attacker has access to a signing oracle using the <tt>Sign()</tt> and must produce a signature-message pair <tt>(s, m)</tt> that is accepted by the verifier using <tt>Verify()</tt> and where <tt>m</tt> was never signed by the oracle. The pair <tt>( CompositeML-DSA.Sign(), CompositeML-DSA.Verify() )</tt> is EUF-CMA secure so long as at least one component algorithm is EUF-CMA secure. There is a stronger notion of Strong Existential Unforgeability (SUF) in which an attacker is required to produce a new signature to an already-signed message. CompositeML-DSA only achieves SUF security if both components are SUF secure, which is not a useful property; the argument is that if the first component algorithm is not SUF secure then by definition it admits at least one <tt>(s1*, m)</tt> pair where <tt>s1*</tt> was not produced by the honest signer and it then can be combined with an honestly-signed <tt>(s2, m)</tt> signature over the same message <tt>m</tt> to create <tt>( (s1*, s2), m)</tt> which violates SUF for the composite algorithm.</t>
        <t>In addition to the classic EUF-CMA game, we should also consider a “cross-protocol” version of the EUF-CMA game that is relevant to hybrids. Specifically, we want to consider a modified version of the EUF-CMA game where the attacker has access to either a signing oracle over the two component algorithms in isolation, Trad.Sign() and ML-DSA.Sign(), and attempts to fraudulently present them as a composite, or where the attacker has access to a composite oracle for signing and then attempts to split the signature back into components and present them to either ML-DSA.Verify() or Trad.Verify(). The latter version bears a resemblance to a stripping attack, which parallel signatures are subject to, but is slightly different in that the cross-protocol EUF-CMA game also considers modification message definition as signed differs from the message the verifier accepts. In contrast stripping attacks consider only removing one component signature and attempting verification under the remaining and the same original message.</t>
        <t>In the case of CompositeML-DSA, a specific message forgery exists for a cross-protocol EUF-CMA attack, namely introduced by the prefix construction addition to M. This applies to use of individual component signing oracles with fraudulent presentation of the signature to a composite verification oracle, and use of a composite signing oracle with fraudulent splitting of the signature for presentation to component verification oracle(s) of either ML-DSA.Verify() or Trad.Verify(). In the first case, an attacker with access to signing oracles for the two component algorithms can sign <tt>M’</tt> and then trivially assemble a composite. In the second case, the message <tt>M’</tt> (containing the composite domain separator) can be presented as having been signed by a standalone component algorithm. However, use of the context string for domain separation enables Weak Non-Separability and auditable checks on hybrid use, which is deemed a reasonable trade-off. Moreover and very importantly, the cross-protocol EUF-CMA attack in either direction is foiled if implementors strictly follow the prohibition on key reuse presented in <xref target="sec-cons-key-reuse"/> since then there cannot exist simultaneously composite and non-composite signers and verifiers for the same keys. Consequently, following the specification and verification of the policy mechanism, such as a composite X.509 certificate which defines the bound keys, is essential when using keys intended for use with a CompositeML-DSA signing algorithm.</t>
      </section>
      <section anchor="sec-cons-key-reuse">
        <name>Key Reuse</name>
        <t>When using single-algorithm cryptography, the best practice is to always generate fresh key material for each purpose, for example when renewing a certificate, or obtaining both a TLS and S/MIME certificate for the same device, however in practice key reuse in such scenarios is not always catastrophic to security and therefore often tolerated, despite cross-protocol attacks having been shown. (citation needed here)</t>
        <t>Within the broader context of PQ / Traditional hybrids, we need to consider new attack surfaces that arise due to the hybrid constructions and did not exist in single-algorithm contexts. One of these is key reuse where the component keys within a hybrid are also used by themselves within a single-algorithm context. For example, it might be tempting for an operator to take an already-deployed RSA key pair and combine it with an ML-DSA key pair to form a hybrid key pair for use in a hybrid algorithm. Within a hybrid signature context this leads to a class of attacks referred to as "stripping attacks" discussed in <xref target="sec-cons-non-separability"/> and may also open up risks from further cross-protocol attacks. Despite the weak non-separability property offered by the composite signature combiner, it is still RECOMMENDED to avoid key reuse as key reuse in single-algorithm use cases could introduce EUF-CMA vulnerabilities.</t>
        <t>In addition, there is a further implication to key reuse regarding certificate revocation. Upon receiving a new certificate enrollment request, many certification authorities will check if the requested public key has been previously revoked due to key compromise. Often a CA will perform this check by using the public key hash. Therefore, even if both components of a composite have been previously revoked, the CA may only check the hash of the combined composite key and not find the revocations. Therefore, it is RECOMMENDED to avoid key reuse and always generate fresh component keys for a new composite. It is also RECOMMENDED that CAs performing revocation checks on a composite key should also check both component keys independently.</t>
      </section>
      <section anchor="policy-for-deprecated-and-acceptable-algorithms">
        <name>Policy for Deprecated and Acceptable Algorithms</name>
        <t>Traditionally, a public key, certificate, or signature contains a single cryptographic algorithm. If and when an algorithm becomes deprecated (for example, RSA-512, or SHA1), 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 implementers may decide that certain cryptographic algorithms have complementary security properties and are acceptable in combination even though one or both algorithms are deprecated for individual use. As such, a single composite public key or certificate may contain a mixture of deprecated and non-deprecated algorithms.</t>
        <t>Since composite algorithms are registered independently of their component algorithms, their deprecation can be handled independently from that of their component algorithms. For example a cryptographic policy might continue to allow <tt>id-MLDSA65-ECDSA-P256-SHA512</tt> even after ECDSA-P256 is deprecated.</t>
        <t>When considering stripping attacks, one need consider the case where an attacker has fully compromised one of the component algorithms to the point that they can produce forged signatures that appear valid under one of the component public keys, and thus fool a victim verifier into accepting a forged signature. The protection against this attack relies on the victim verifier trusting the pair of public keys as a single composite key, and not trusting the individual component keys by themselves.</t>
        <t>Specifically, in order to achieve this non-separability property, this specification makes two assumptions about how the verifier will establish trust in a composite public key:</t>
        <ol spacing="normal" type="1"><li>
            <t>This specification assumes that all of the component keys within a composite key are freshly generated for the composite; ie a given public key MUST NOT appear as a component within a composite key and also within single-algorithm constructions.</t>
          </li>
          <li>
            <t>This specification assumes that composite public keys will be bound in a structure that contains a signature over the public key (for example, an X.509 Certificate <xref target="RFC5280"/>), which is chained back to a trust anchor, and where that signature algorithm is at least as strong as the composite public key that it is protecting.</t>
          </li>
        </ol>
        <t>There are mechanisms within Internet PKI where trusted public keys do not appear within signed structures -- such as the Trust Anchor format defined in <xref target="RFC5914"/>. In such cases, it is the responsibility of implementers to ensure that trusted composite keys are distributed in a way that is tamper-resistant and does not allow the component keys to be trusted independently.</t>
        <!-- End of Security Considerations section -->

<!-- Start of Appendices -->

</section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC2986" target="https://www.rfc-editor.org/info/rfc2986" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2986.xml">
          <front>
            <title>PKCS #10: Certification Request Syntax Specification Version 1.7</title>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <date month="November" year="2000"/>
            <abstract>
              <t>This memo represents a republication of PKCS #10 v1.7 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process. The body of this document, except for the security considerations section, is taken directly from the PKCS #9 v2.0 or the PKCS #10 v1.7 document. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2986"/>
          <seriesInfo name="DOI" value="10.17487/RFC2986"/>
        </reference>
        <reference anchor="RFC4210" target="https://www.rfc-editor.org/info/rfc4210" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4210.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate Management Protocol (CMP)</title>
            <author fullname="C. Adams" initials="C." surname="Adams"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="T. Kause" initials="T." surname="Kause"/>
            <author fullname="T. Mononen" initials="T." surname="Mononen"/>
            <date month="September" year="2005"/>
            <abstract>
              <t>This document describes the Internet X.509 Public Key Infrastructure (PKI) Certificate Management Protocol (CMP). Protocol messages are defined for X.509v3 certificate creation and management. CMP provides on-line interactions between PKI components, including an exchange between a Certification Authority (CA) and a client system. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4210"/>
          <seriesInfo name="DOI" value="10.17487/RFC4210"/>
        </reference>
        <reference anchor="RFC4211" target="https://www.rfc-editor.org/info/rfc4211" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4211.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF)</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="September" year="2005"/>
            <abstract>
              <t>This document describes the Certificate Request Message Format (CRMF) syntax and semantics. This syntax is used to convey a request for a certificate to a Certification Authority (CA), possibly via a Registration Authority (RA), for the purposes of X.509 certificate production. The request will typically include a public key and the associated registration information. This document does not define a certificate request protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4211"/>
          <seriesInfo name="DOI" value="10.17487/RFC4211"/>
        </reference>
        <reference anchor="RFC5280" target="https://www.rfc-editor.org/info/rfc5280" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC5480" target="https://www.rfc-editor.org/info/rfc5480" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5480.xml">
          <front>
            <title>Elliptic Curve Cryptography Subject Public Key Information</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <author fullname="D. Brown" initials="D." surname="Brown"/>
            <author fullname="K. Yiu" initials="K." surname="Yiu"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="T. Polk" initials="T." surname="Polk"/>
            <date month="March" year="2009"/>
            <abstract>
              <t>This document specifies the syntax and semantics for the Subject Public Key Information field in certificates that support Elliptic Curve Cryptography. This document updates Sections 2.3.5 and 5, and the ASN.1 module of "Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 3279. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5480"/>
          <seriesInfo name="DOI" value="10.17487/RFC5480"/>
        </reference>
        <reference anchor="RFC5639" target="https://www.rfc-editor.org/info/rfc5639" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5639.xml">
          <front>
            <title>Elliptic Curve Cryptography (ECC) Brainpool Standard Curves and Curve Generation</title>
            <author fullname="M. Lochter" initials="M." surname="Lochter"/>
            <author fullname="J. Merkle" initials="J." surname="Merkle"/>
            <date month="March" year="2010"/>
            <abstract>
              <t>This memo proposes several elliptic curve domain parameters over finite prime fields for use in cryptographic applications. The domain parameters are consistent with the relevant international standards, and can be used in X.509 certificates and certificate revocation lists (CRLs), for Internet Key Exchange (IKE), Transport Layer Security (TLS), XML signatures, and all applications or protocols based on the cryptographic message syntax (CMS). This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5639"/>
          <seriesInfo name="DOI" value="10.17487/RFC5639"/>
        </reference>
        <reference anchor="RFC5652" target="https://www.rfc-editor.org/info/rfc5652" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5652.xml">
          <front>
            <title>Cryptographic Message Syntax (CMS)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="September" year="2009"/>
            <abstract>
              <t>This document describes the Cryptographic Message Syntax (CMS). This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="70"/>
          <seriesInfo name="RFC" value="5652"/>
          <seriesInfo name="DOI" value="10.17487/RFC5652"/>
        </reference>
        <reference anchor="RFC5758" target="https://www.rfc-editor.org/info/rfc5758" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5758.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure: Additional Algorithms and Identifiers for DSA and ECDSA</title>
            <author fullname="Q. Dang" initials="Q." surname="Dang"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="K. Moriarty" initials="K." surname="Moriarty"/>
            <author fullname="D. Brown" initials="D." surname="Brown"/>
            <author fullname="T. Polk" initials="T." surname="Polk"/>
            <date month="January" year="2010"/>
            <abstract>
              <t>This document updates RFC 3279 to specify algorithm identifiers and ASN.1 encoding rules for the Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA) digital signatures when using SHA-224, SHA-256, SHA-384, or SHA-512 as the hashing algorithm. This specification applies to the Internet X.509 Public Key infrastructure (PKI) when digital signatures are used to sign certificates and certificate revocation lists (CRLs). This document also identifies all four SHA2 hash algorithms for use in the Internet X.509 PKI. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5758"/>
          <seriesInfo name="DOI" value="10.17487/RFC5758"/>
        </reference>
        <reference anchor="RFC5958" target="https://www.rfc-editor.org/info/rfc5958" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5958.xml">
          <front>
            <title>Asymmetric Key Packages</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document defines the syntax for private-key information and a content type for it. Private-key information includes a private key for a specified public-key algorithm and a set of attributes. The Cryptographic Message Syntax (CMS), as defined in RFC 5652, can be used to digitally sign, digest, authenticate, or encrypt the asymmetric key format content type. This document obsoletes RFC 5208. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5958"/>
          <seriesInfo name="DOI" value="10.17487/RFC5958"/>
        </reference>
        <reference anchor="RFC6090" target="https://www.rfc-editor.org/info/rfc6090" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6090.xml">
          <front>
            <title>Fundamental Elliptic Curve Cryptography Algorithms</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <author fullname="K. Igoe" initials="K." surname="Igoe"/>
            <author fullname="M. Salter" initials="M." surname="Salter"/>
            <date month="February" year="2011"/>
            <abstract>
              <t>This note describes the fundamental algorithms of Elliptic Curve Cryptography (ECC) as they were defined in some seminal references from 1994 and earlier. These descriptions may be useful for implementing the fundamental algorithms without using any of the specialized methods that were developed in following years. Only elliptic curves defined over fields of characteristic greater than three are in scope; these curves are those used in Suite B. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6090"/>
          <seriesInfo name="DOI" value="10.17487/RFC6090"/>
        </reference>
        <reference anchor="RFC6234" target="https://www.rfc-editor.org/info/rfc6234" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6234.xml">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
        <reference anchor="RFC7748" target="https://www.rfc-editor.org/info/rfc7748" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7748.xml">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2016"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="RFC8032" target="https://www.rfc-editor.org/info/rfc8032" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8032.xml">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8410" target="https://www.rfc-editor.org/info/rfc8410" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8410.xml">
          <front>
            <title>Algorithm Identifiers for Ed25519, Ed448, X25519, and X448 for Use in the Internet X.509 Public Key Infrastructure</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies algorithm identifiers and ASN.1 encoding formats for elliptic curve constructs using the curve25519 and curve448 curves. The signature algorithms covered are Ed25519 and Ed448. The key agreement algorithms covered are X25519 and X448. The encoding for public key, private key, and Edwards-curve Digital Signature Algorithm (EdDSA) structures is provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8410"/>
          <seriesInfo name="DOI" value="10.17487/RFC8410"/>
        </reference>
        <reference anchor="RFC8411" target="https://www.rfc-editor.org/info/rfc8411" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8411.xml">
          <front>
            <title>IANA Registration for the Cryptographic Algorithm Object Identifier Range</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="R. Andrews" initials="R." surname="Andrews"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>When the Curdle Security Working Group was chartered, a range of object identifiers was donated by DigiCert, Inc. for the purpose of registering the Edwards Elliptic Curve key agreement and signature algorithms. This donated set of OIDs allowed for shorter values than would be possible using the existing S/MIME or PKIX arcs. This document describes the donated range and the identifiers that were assigned from that range, transfers control of that range to IANA, and establishes IANA allocation policies for any future assignments within that range.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8411"/>
          <seriesInfo name="DOI" value="10.17487/RFC8411"/>
        </reference>
        <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>
        <reference anchor="FIPS.186-5" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2023" month="February"/>
          </front>
        </reference>
        <reference anchor="FIPS.204" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.204.pdf">
          <front>
            <title>Module-Lattice-Based Digital Signature Standard</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2024" month="August"/>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC3279" target="https://www.rfc-editor.org/info/rfc3279" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3279.xml">
          <front>
            <title>Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="L. Bassham" initials="L." surname="Bassham"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="April" year="2002"/>
            <abstract>
              <t>This document specifies algorithm identifiers and ASN.1 encoding formats for digital signatures and subject public keys used in the Internet X.509 Public Key Infrastructure (PKI). Digital signatures are used to sign certificates and certificate revocation list (CRLs). Certificates include the public key of the named subject. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3279"/>
          <seriesInfo name="DOI" value="10.17487/RFC3279"/>
        </reference>
        <reference anchor="RFC5914" target="https://www.rfc-editor.org/info/rfc5914" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5914.xml">
          <front>
            <title>Trust Anchor Format</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="S. Ashmore" initials="S." surname="Ashmore"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>This document describes a structure for representing trust anchor information. A trust anchor is an authoritative entity represented by a public key and associated data. The public key is used to verify digital signatures, and the associated data is used to constrain the types of information or actions for which the trust anchor is authoritative. The structures defined in this document are intended to satisfy the format-related requirements defined in Trust Anchor Management Requirements. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5914"/>
          <seriesInfo name="DOI" value="10.17487/RFC5914"/>
        </reference>
        <reference anchor="RFC7292" target="https://www.rfc-editor.org/info/rfc7292" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7292.xml">
          <front>
            <title>PKCS #12: Personal Information Exchange Syntax v1.1</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="S. Parkinson" initials="S." surname="Parkinson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <author fullname="M. Scott" initials="M." surname="Scott"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>PKCS #12 v1.1 describes a transfer syntax for personal identity information, including private keys, certificates, miscellaneous secrets, and extensions. Machines, applications, browsers, Internet kiosks, and so on, that support this standard will allow a user to import, export, and exercise a single set of personal identity information. This standard supports direct transfer of personal information under several privacy and integrity modes.</t>
              <t>This document represents a republication of PKCS #12 v1.1 from RSA Laboratories' Public Key Cryptography Standard (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7292"/>
          <seriesInfo name="DOI" value="10.17487/RFC7292"/>
        </reference>
        <reference anchor="RFC7296" target="https://www.rfc-editor.org/info/rfc7296" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7296.xml">
          <front>
            <title>Internet Key Exchange Protocol Version 2 (IKEv2)</title>
            <author fullname="C. Kaufman" initials="C." surname="Kaufman"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="Y. Nir" initials="Y." surname="Nir"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
            <date month="October" year="2014"/>
            <abstract>
              <t>This document describes version 2 of the Internet Key Exchange (IKE) protocol. IKE is a component of IPsec used for performing mutual authentication and establishing and maintaining Security Associations (SAs). This document obsoletes RFC 5996, and includes all of the errata for it. It advances IKEv2 to be an Internet Standard.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="79"/>
          <seriesInfo name="RFC" value="7296"/>
          <seriesInfo name="DOI" value="10.17487/RFC7296"/>
        </reference>
        <reference anchor="RFC7299" target="https://www.rfc-editor.org/info/rfc7299" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7299.xml">
          <front>
            <title>Object Identifier Registry for the PKIX Working Group</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>When the Public-Key Infrastructure using X.509 (PKIX) Working Group was chartered, an object identifier arc was allocated by IANA for use by that working group. This document describes the object identifiers that were assigned in that arc, returns control of that arc to IANA, and establishes IANA allocation policies for any future assignments within that arc.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7299"/>
          <seriesInfo name="DOI" value="10.17487/RFC7299"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8551" target="https://www.rfc-editor.org/info/rfc8551" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8551.xml">
          <front>
            <title>Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 Message Specification</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="B. Ramsdell" initials="B." surname="Ramsdell"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="April" year="2019"/>
            <abstract>
              <t>This document defines Secure/Multipurpose Internet Mail Extensions (S/MIME) version 4.0. S/MIME provides a consistent way to send and receive secure MIME data. Digital signatures provide authentication, message integrity, and non-repudiation with proof of origin. Encryption provides data confidentiality. Compression can be used to reduce data size. This document obsoletes RFC 5751.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8551"/>
          <seriesInfo name="DOI" value="10.17487/RFC8551"/>
        </reference>
        <reference anchor="RFC8017" target="https://www.rfc-editor.org/info/rfc8017" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8017.xml">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
        <reference anchor="I-D.ietf-pquip-hybrid-signature-spectrums" target="https://datatracker.ietf.org/doc/html/draft-ietf-pquip-hybrid-signature-spectrums-00" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-pquip-hybrid-signature-spectrums-00.xml">
          <front>
            <title>Hybrid signature spectrums</title>
            <author fullname="Nina Bindel" initials="N." surname="Bindel">
              <organization>SandboxAQ</organization>
            </author>
            <author fullname="Britta Hale" initials="B." surname="Hale">
              <organization>Naval Postgraduate School</organization>
            </author>
            <author fullname="Deirdre Connolly" initials="D." surname="Connolly">
              <organization>SandboxAQ</organization>
            </author>
            <author fullname="Florence D" initials="F." surname="D">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <date day="24" month="May" year="2024"/>
            <abstract>
              <t>This document describes classification of design goals and security considerations for hybrid digital signature schemes, including proof composability, non-separability of the component signatures given a hybrid signature, backwards/forwards compatiblity, hybrid generality, and simultaneous verification. Discussion of this work is encouraged to happen on the IETF PQUIP mailing list pqc@ietf.org or on the GitHub repository which contains the draft: https://github.com/dconnolly/draft-ietf-pquip-hybrid- signature-spectrums</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-pquip-hybrid-signature-spectrums-00"/>
        </reference>
        <reference anchor="I-D.pala-klaussner-composite-kofn" target="https://datatracker.ietf.org/doc/html/draft-pala-klaussner-composite-kofn-00" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-pala-klaussner-composite-kofn-00.xml">
          <front>
            <title>K-threshold Composite Signatures for the Internet PKI</title>
            <author fullname="Massimiliano Pala" initials="M." surname="Pala">
              <organization>CableLabs Inc.</organization>
            </author>
            <author fullname="Jan Klaußner" initials="J." surname="Klaußner">
              <organization>D-Trust GmbH</organization>
            </author>
            <date day="15" month="November" year="2022"/>
            <abstract>
              <t>With the need to evolve the cryptography used in today applications, devices, and networks, there might be many scenarios where the use of a single-key certificate is not sufficient. For example, there might be the need for migrating between two existing algorithms (e.g., from classic to post-quantum) or there might be the need to test the capabilities of devices via test drivers and/or non-standard algorithms. Differently from the situation where algorithms are not yet (or no more) trusted to be used by themselves, this document addresses the use of multiple keys and signatures that can be individually trusted to implement a generic 1-threshold and K-threshold signature validation procedures. This document provides the definition of a new type of multi- algorithm public key and relies on the definition of CompositePrivateKey, and CompositeSignature which are sequences of the respective structure for each component algorithm as defined in [I-D.ounsworth-pq-composite-sigs] and [I-D.ounsworth-pq-composite-sigs].</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-pala-klaussner-composite-kofn-00"/>
        </reference>
        <reference anchor="I-D.ietf-pquip-pqt-hybrid-terminology" target="https://datatracker.ietf.org/doc/html/draft-ietf-pquip-pqt-hybrid-terminology-04" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-pquip-pqt-hybrid-terminology-04.xml">
          <front>
            <title>Terminology for Post-Quantum Traditional Hybrid Schemes</title>
            <author fullname="Florence D" initials="F." surname="D">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <author fullname="Michael P" initials="M." surname="P">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <author fullname="Britta Hale" initials="B." surname="Hale">
              <organization>Naval Postgraduate School</organization>
            </author>
            <date day="10" month="September" year="2024"/>
            <abstract>
              <t>One aspect of the transition to post-quantum algorithms in cryptographic protocols is the development of hybrid schemes that incorporate both post-quantum and traditional asymmetric algorithms. This document defines terminology for such schemes. It is intended to be used as a reference and, hopefully, to ensure consistency and clarity across different protocols, standards, and organisations.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-pquip-pqt-hybrid-terminology-04"/>
        </reference>
        <reference anchor="I-D.ietf-lamps-dilithium-certificates" target="https://datatracker.ietf.org/doc/html/draft-ietf-lamps-dilithium-certificates-04" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-lamps-dilithium-certificates-04.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure: Algorithm Identifiers for ML-DSA</title>
            <author fullname="Jake Massimo" initials="J." surname="Massimo">
              <organization>AWS</organization>
            </author>
            <author fullname="Panos Kampanakis" initials="P." surname="Kampanakis">
              <organization>AWS</organization>
            </author>
            <author fullname="Sean Turner" initials="S." surname="Turner">
              <organization>sn3rd</organization>
            </author>
            <author fullname="Bas Westerbaan" initials="B." surname="Westerbaan">
              <organization>Cloudflare</organization>
            </author>
            <date day="22" month="July" year="2024"/>
            <abstract>
              <t>Digital signatures are used within X.509 certificates, Certificate Revocation Lists (CRLs), and to sign messages. This document describes the conventions for using the Module-Lattice-Based Digital Signature Algorithm (ML-DSA) in Internet X.509 certificates and certificate revocation lists. The conventions for the associated signatures, subject public keys, and private key are also described.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-dilithium-certificates-04"/>
        </reference>
        <reference anchor="I-D.salter-lamps-cms-ml-dsa" target="https://datatracker.ietf.org/doc/html/draft-salter-lamps-cms-ml-dsa-00" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-salter-lamps-cms-ml-dsa-00.xml">
          <front>
            <title>Use of the ML-DSA Signature Algorithm in the Cryptographic Message Syntax (CMS)</title>
            <author fullname="Ben S" initials="B." surname="S">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <author fullname="Adam R" initials="A." surname="R">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <author fullname="Daniel Van Geest" initials="D." surname="Van Geest">
              <organization>CryptoNext Security</organization>
            </author>
            <date day="14" month="October" year="2024"/>
            <abstract>
              <t>The Module-Lattice-Based Digital Signature Algorithm (ML-DSA), as defined in FIPS 204, is a post-quantum digital signature scheme that aims to be secure against an adversary in posession of a Cryptographically Relevant Quantum Computer (CRQC). This document specifies the conventions for using the ML-DSA signature algorithm with the Cryptographic Message Syntax (CMS). In addition, the algorithm identifier and public key syntax are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-salter-lamps-cms-ml-dsa-00"/>
        </reference>
        <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/>
            </author>
            <author initials="U." surname="Herath" fullname="Udyani Herath">
              <organization/>
            </author>
            <author initials="M." surname="McKague" fullname="Matthew McKague">
              <organization/>
            </author>
            <author initials="D." surname="Stebila" fullname="Douglas Stebila">
              <organization/>
            </author>
            <date year="2017"/>
          </front>
        </reference>
        <reference anchor="BSI2021" target="https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/Brochure/quantum-safe-cryptography.pdf">
          <front>
            <title>Quantum-safe cryptography - fundamentals, current developments and recommendations</title>
            <author>
              <organization>Federal Office for Information Security (BSI)</organization>
            </author>
            <date year="2021" month="October"/>
          </front>
        </reference>
        <reference anchor="ANSSI2024" target="https://cyber.gouv.fr/sites/default/files/document/Quantum_Key_Distribution_Position_Paper.pdf">
          <front>
            <title>Position Paper on Quantum Key Distribution</title>
            <author>
              <organization>French Cybersecurity Agency (ANSSI)</organization>
            </author>
            <author>
              <organization>Federal Office for Information Security (BSI)</organization>
            </author>
            <author>
              <organization>Netherlands National Communications Security Agency (NLNCSA)</organization>
            </author>
            <author>
              <organization>Swedish National Communications Security Authority, Swedish Armed Forces</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 1929?>

<section anchor="appdx-samples">
      <name>Samples</name>
      <section anchor="appdx-expComposite-examples">
        <name>Explicit Composite Signature Examples</name>
        <t>TODO - Need Samples</t>
      </section>
    </section>
    <section anchor="appdx_components">
      <name>Component Algorithm Reference</name>
      <t>This section provides references to the full specification of the algorithms used in the composite constructions.</t>
      <table anchor="tab-component-sig-algs">
        <name>Component Signature Algorithms used in Composite Constructions</name>
        <thead>
          <tr>
            <th align="left">Component Signature Algorithm ID</th>
            <th align="left">OID</th>
            <th align="left">Specification</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">id-ML-DSA-44</td>
            <td align="left">2.16.840.1.101.3.4.3.17</td>
            <td align="left">
              <xref target="FIPS.204"/></td>
          </tr>
          <tr>
            <td align="left">id-ML-DSA-65</td>
            <td align="left">2.16.840.1.101.3.4.3.18</td>
            <td align="left">
              <xref target="FIPS.204"/></td>
          </tr>
          <tr>
            <td align="left">id-ML-DSA-87</td>
            <td align="left">2.16.840.1.101.3.4.3.19</td>
            <td align="left">
              <xref target="FIPS.204"/></td>
          </tr>
          <tr>
            <td align="left">id-Ed25519</td>
            <td align="left">1.3.101.112</td>
            <td align="left">
              <xref target="RFC8410"/></td>
          </tr>
          <tr>
            <td align="left">id-Ed448</td>
            <td align="left">1.3.101.113</td>
            <td align="left">
              <xref target="RFC8410"/></td>
          </tr>
          <tr>
            <td align="left">ecdsa-with-SHA256</td>
            <td align="left">1.2.840.10045.4.3.2</td>
            <td align="left">
              <xref target="RFC5758"/></td>
          </tr>
          <tr>
            <td align="left">ecdsa-with-SHA512</td>
            <td align="left">1.2.840.10045.4.3.4</td>
            <td align="left">
              <xref target="RFC5758"/></td>
          </tr>
          <tr>
            <td align="left">sha256WithRSAEncryption</td>
            <td align="left">1.2.840.113549.1.1.11</td>
            <td align="left">
              <xref target="RFC8017"/></td>
          </tr>
          <tr>
            <td align="left">sha512WithRSAEncryption</td>
            <td align="left">1.2.840.113549.1.1.13</td>
            <td align="left">
              <xref target="RFC8017"/></td>
          </tr>
          <tr>
            <td align="left">id-RSASA-PSS</td>
            <td align="left">1.2.840.113549.1.1.10</td>
            <td align="left">
              <xref target="RFC8017"/></td>
          </tr>
        </tbody>
      </table>
      <table anchor="tab-component-curve-algs">
        <name>Elliptic Curves used in Composite Constructions</name>
        <thead>
          <tr>
            <th align="left">Elliptic CurveID</th>
            <th align="left">OID</th>
            <th align="left">Specification</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">secp256r1</td>
            <td align="left">1.2.840.10045.3.1.7</td>
            <td align="left">
              <xref target="RFC6090"/></td>
          </tr>
          <tr>
            <td align="left">secp384r1</td>
            <td align="left">1.3.132.0.34</td>
            <td align="left">
              <xref target="RFC6090"/></td>
          </tr>
          <tr>
            <td align="left">brainpoolP256r1</td>
            <td align="left">1.3.36.3.3.2.8.1.1.7</td>
            <td align="left">
              <xref target="RFC5639"/></td>
          </tr>
          <tr>
            <td align="left">brainpoolP384r1</td>
            <td align="left">1.3.36.3.3.2.8.1.1.11</td>
            <td align="left">
              <xref target="RFC5639"/></td>
          </tr>
        </tbody>
      </table>
      <table anchor="tab-component-hash">
        <name>Hash algorithms used in Composite Constructions</name>
        <thead>
          <tr>
            <th align="left">HashID</th>
            <th align="left">OID</th>
            <th align="left">Specification</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">id-sha256</td>
            <td align="left">2.16.840.1.101.3.4.2.1</td>
            <td align="left">
              <xref target="RFC6234"/></td>
          </tr>
          <tr>
            <td align="left">id-sha512</td>
            <td align="left">2.16.840.1..101.3.4.2.3</td>
            <td align="left">
              <xref target="RFC6234"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="component-algorithmidentifiers-for-public-keys-and-signatures">
      <name>Component AlgorithmIdentifiers for Public Keys and Signatures</name>
      <t>To ease implementing Composite Signatures this section specifies the Algorithms Identifiers for each component algorithm. They are provided as ASN.1 value notation and copy and paste DER encoding to avoid any ambiguity. Developers may use this information to reconstruct non hybrid public keys and signatures from each component that can be fed to crypto APIs to create or verify a single component signature.</t>
      <t>For newer Algorithms like Ed25519 or ML-DSA the AlgorithmIdentifiers are the same for Public Key and Signature. Older Algorithms have different AlgorithmIdentifiers for keys and signatures and are specified separately here for each component.</t>
      <t><strong>ML-DSA-44 -- AlgorithmIdentifier of Public Key and Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ML-DSA-44   -- (1 3 6 1 4 1 2 267 12 4 4)
   }

DER:
  30 0D 06 0B 2B 06 01 04 01 02 82 0B 0C 04 04
]]></artwork>
      <t><strong>ML-DSA-65 -- AlgorithmIdentifier of Public Key and Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ML-DSA-65   -- (1 3 6 1 4 1 2 267 12 6 5)
   }

DER:
  30 0D 06 0B 2B 06 01 04 01 02 82 0B 0C 06 05
]]></artwork>
      <t><strong>ML-DSA-87 -- AlgorithmIdentifier of Public Key and Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ML-DSA-87   -- (1 3 6 1 4 1 2 267 12 8 7)
   }

DER:
  30 0D 06 0B 2B 06 01 04 01 02 82 0B 0C 08 07
]]></artwork>
      <t><strong>RSA PSS 2048 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-RSASSA-PSS   -- (1.2.840.113549.1.1.10)
    }

DER:
  30 0B 06 09 2A 86 48 86 F7 0D 01 01 0A
]]></artwork>
      <t><strong>RSA PSS 2048 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signatureAlgorithm AlgorithmIdentifier ::= {
    algorithm id-RSASSA-PSS,   -- (1.2.840.113549.1.1.10)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm id-sha256,   -- (2.16.840.1.101.3.4.2.1)
        parameters NULL
        },
      AlgorithmIdentifier ::= {
        algorithm id-mgf1,       -- (1.2.840.113549.1.1.8)
        parameters AlgorithmIdentifier ::= {
          algorithm id-sha256,   -- (2.16.840.1.101.3.4.2.1)
          parameters NULL
          }
        },
      saltLength 32
      }
    }

DER:
  30 41 06 09 2A 86 48 86 F7 0D 01 01 0A 30 34 A0 0F 30 0D 06 09 60 86
  48 01 65 03 04 02 01 05 00 A1 1C 30 1A 06 09 2A 86 48 86 F7 0D 01 01
  08 30 0D 06 09 60 86 48 01 65 03 04 02 01 05 00 A2 03 02 01 20
]]></artwork>
      <t><strong>RSA PSS 3072 &amp; 4096 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-RSASSA-PSS   -- (1.2.840.113549.1.1.10)
    }

DER:
  30 0B 06 09 2A 86 48 86 F7 0D 01 01 0A
]]></artwork>
      <t><strong>RSA PSS 3072 &amp; 4096 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signatureAlgorithm AlgorithmIdentifier ::= {
    algorithm id-RSASSA-PSS,   -- (1.2.840.113549.1.1.10)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm id-sha512,   -- (2.16.840.1.101.3.4.2.3)
        parameters NULL
        },
      AlgorithmIdentifier ::= {
        algorithm id-mgf1,       -- (1.2.840.113549.1.1.8)
        parameters AlgorithmIdentifier ::= {
          algorithm id-sha512,   -- (2.16.840.1.101.3.4.2.3)
          parameters NULL
          }
        },
      saltLength 64
      }
    }

DER:
  30 41 06 09 2A 86 48 86 F7 0D 01 01 0A 30 34 A0 0F 30 0D 06 09 60 86
  48 01 65 03 04 02 03 05 00 A1 1C 30 1A 06 09 2A 86 48 86 F7 0D 01 01
  08 30 0D 06 09 60 86 48 01 65 03 04 02 03 05 00 A2 03 02 01 40
]]></artwork>
      <t><strong>RSA PKCS 1.5 2048 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm rsaEncryption,   -- (1.2.840.113549.1.1.1)
    parameters NULL
    }

DER:
  30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00
]]></artwork>
      <t><strong>RSA PKCS 1.5 2048 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signatureAlgorithm AlgorithmIdentifier ::= {
    algorithm sha256WithRSAEncryption,   -- (1.2.840.113549.1.1.11)
    parameters NULL
    }

DER:
  30 0D 06 09 2A 86 48 86 F7 0D 01 01 0D 05 00
]]></artwork>
      <t><strong>RSA PKCS 1.5 3072 &amp; 4096 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm rsaEncryption,   -- (1.2.840.113549.1.1.1)
    parameters NULL
    }

DER:
  30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00
]]></artwork>
      <t><strong>RSA PKCS 1.5 3072 &amp; 4096 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signatureAlgorithm AlgorithmIdentifier ::= {
    algorithm sha512WithRSAEncryption,   -- (1.2.840.113549.1.1.13)
    parameters NULL
    }

DER:
  30 0D 06 09 2A 86 48 86 F7 0D 01 01 0D 05 00
]]></artwork>
      <t><strong>ECDSA NIST 256 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ecPublicKey   -- (1.2.840.10045.2.1)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm secp256r1   -- (1.2.840.10045.3.1.7)
        }
      }
    }

DER:
  30 13 06 07 2A 86 48 CE 3D 02 01 06 08 2A 86 48 CE 3D 03 01 07
]]></artwork>
      <t><strong>ECDSA NIST 256 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signature AlgorithmIdentifier ::= {
    algorithm ecdsa-with-SHA256   -- (1.2.840.10045.4.3.2)
    }

DER:
  30 0A 06 08 2A 86 48 CE 3D 04 03 02
]]></artwork>
      <t><strong>ECDSA NIST-384 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ecPublicKey   -- (1.2.840.10045.2.1)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm secp384r1   -- (1.3.132.0.34)
        }
      }
    }

DER:
  30 10 06 07 2A 86 48 CE 3D 02 01 06 05 2B 81 04 00 22
]]></artwork>
      <t><strong>ECDSA NIST-384 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signature AlgorithmIdentifier ::= {
    algorithm ecdsa-with-SHA384   -- (1.2.840.10045.4.3.3)
    }

DER:
  30 0A 06 08 2A 86 48 CE 3D 04 03 03
]]></artwork>
      <t><strong>ECDSA Brainpool-256 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ecPublicKey   -- (1.2.840.10045.2.1)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm brainpoolP256r1   -- (1.3.36.3.3.2.8.1.1.7)
        }
      }
    }

DER:
  30 14 06 07 2A 86 48 CE 3D 02 01 06 09 2B 24 03 03 02 08 01 01 07
]]></artwork>
      <t><strong>ECDSA Brainpool-256 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signature AlgorithmIdentifier ::= {
    algorithm ecdsa-with-SHA256   -- (1.2.840.10045.4.3.2)
    }

DER:
  30 0A 06 08 2A 86 48 CE 3D 04 03 02
]]></artwork>
      <t><strong>ECDSA Brainpool-384 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ecPublicKey   -- (1.2.840.10045.2.1)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm brainpoolP384r1   -- (1.3.36.3.3.2.8.1.1.11)
        }
      }
    }

DER:
  30 14 06 07 2A 86 48 CE 3D 02 01 06 09 2B 24 03 03 02 08 01 01 0B
]]></artwork>
      <t><strong>ECDSA Brainpool-384 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signature AlgorithmIdentifier ::= {
    algorithm ecdsa-with-SHA384   -- (1.2.840.10045.4.3.3)
    }

DER:
  30 0A 06 08 2A 86 48 CE 3D 04 03 03
]]></artwork>
      <t><strong>Ed25519 -- AlgorithmIdentifier of Public Key and Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-Ed25519   -- (1.3.101.112)
    }

DER:
  30 05 06 03 2B 65 70
]]></artwork>
      <t><strong>Ed448 -- AlgorithmIdentifier of Public Key and Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-Ed448   -- (1.3.101.113)
    }

DER:
  30 05 06 03 2B 65 71
]]></artwork>
    </section>
    <section anchor="sec-imp-considers">
      <name>Implementation Considerations</name>
      <section anchor="sec-fips">
        <name>FIPS certification</name>
        <t>One of the primary design goals of this specification is for the overall composite algorithm to be able to be considered FIPS-approved even when one of the component algorithms is not.</t>
        <t>Implementors seeking FIPS certification of a composite Signature algorithm where only one of the component algorithms has been FIPS-validated or FIPS-approved should credit the FIPS-validated component algorithm with full security strength, the non-FIPS-validated component algorithm with zero security, and the overall composite should be considered at least as strong and thus FIPS-approved.</t>
        <t>The authors wish to note that this gives composite algorithms great future utility both for future cryptographic migrations as well as bridging across jurisdictions, for example defining composite algorithms which combine FIPS cryptography with cryptography from a different national standards body.</t>
      </section>
      <section anchor="sec-backwards-compat">
        <name>Backwards Compatibility</name>
        <t>The term "backwards compatibility" 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.  This draft explicitly does not provide backwards compatibility, only upgraded systems will understand the OIDs defined in this document.</t>
        <t>If backwards compatibility is required, then additional mechanisms will be needed.  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"/> and IKEv2 <xref target="RFC7296"/>, to non-negotiated asynchronous protocols such as S/MIME signed email <xref target="RFC8551"/>, 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"/> signed structures.  Composite simplifies the protocol design work because it can be implemented as a signature algorithm that fits into existing systems.</t>
        <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>
          <!-- 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 few years in pursuit of this document:</t>
      <t>Daniel Van Geest (CryptoNext),
Dr. Britta Hale (Naval Postgraduade School),
Tim Hollebeek (Digicert),
Panos Kampanakis (Cisco Systems),
Richard Kisley (IBM),
Serge Mister (Entrust),
Piotr Popis,
François Rousseau,
Falko Strenzke,
Felipe Ventura (Entrust),
Alexander Ralien (Siemens),
José Ignacio Escribano,
Jan Oupický,
陳志華 (Abel C. H. Chen, Chunghwa Telecom),
林邦曄 (Austin Lin, Chunghwa Telecom) and
Mojtaba Bisheh-Niasar</t>
      <t>We especially want to recognize the contributions of Dr. Britta Hale who has helped immensely with strengthening the signature combiner construction, and with analyzing the scheme with respect to EUF-CMA and Non-Separability properties.</t>
      <t>We are grateful to all who have given feedback over the years, formally or informally, on mailing lists or in person, 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.  "Copying always makes things easier and less error prone" - <xref target="RFC8411"/>.</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/lamps-wg/draft-composite-sigs</t>
        <!-- End of Contributors section -->

</section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+29224jSZYg+M6vsFYCnVKCpETqEpKyq6YVkiJDFSGFWlRk
Vm1OoOQkTaSXnO4sd6cUqsxoNAbzPg/7MBjsBfu0i33ah31eLLD9Jw3sYOcv
9lzs6heKopSVkVUV6K4U3d3Mjtk5dm527JxWq9XIwzyS++IwmUyTLMylOH3b
OuodiFdJKmaZFGEsftve3tgT57N+FA7EG3kvTuLrNMjydDbIZ6kUQTwUh6e9
RtDvp/K23FdjmAziYAKjDNPgOm+FMr9uRcFkmrWmf2wN9NetLBxlrY3NRiOc
pvsCus/y7sbG3ka3EaQy2Bc9OZilYX7fuBvti7cHp+e9xs3dPkCTyzSWeesI
e28MgnxfZPmw0biV8UzuN4QYpclsqpsIkd9PAZbvkvQmjEfiG3wJTydBGEHD
aTDJ/hEhbCfpCB4H6WC8L8Z5Ps3219eHQR7kaTC4kWlbf7R+N1qn2awH/WSW
r+OAYT6e9fcFTxLe88T9qcJ3UZDLLLfd6+/b3EE7TCpbrj+8ju1xPokajUEy
hDnuixl8uduYhvsC/n0hBkFMyA3SNLgXq+G1CKJI3MtsTQDax0E2FmOZSlyr
ZLCPL+DPLEnzVF5n+9TFUF4HsyjP4Av9/n7Cr/FnI5jl4yTF1W81cNAwhjen
bfFuFmd30NOYnjJZnIY3svAC1nVfHMdEBOJtOIF5DemFJjL1jp4BKUoJy9jd
3tgQvSQCgszFRRIMxb/9y38vejMkxc7GBn07AALaF+/yPLgLmuJdnAdpmPCb
ZAZ9wsvDIA6GgXo2BPjedN+IzW+26YlkOpkAyO1Eg/yPkqFpAxL8Gf+mDQQW
3DuT/U0yju2zz32efwBo2yOAtn6KgNTzIApcfAZZBlOJwiBO7Dua6rupjA8P
xNugnzlgnsk78TvYj+IQfjbNTx/c9zEujujluGlEci0OJjINB4EL7jBM5SBP
0n9MYJxBoPawj483UTDLslimLlJgQ/jPCdqXs3gosyEwOtjwMhTfTPqvvdUJ
4vaNbvaP/WHaHkoPU2+SyQSwFACLiuFZW3R2nfXubOzt7DnL8FKmURj7s/5G
ptDDvT+LXlu8imbj1JtDb5Dkufec5nAYZoNE9O6zXE4yF/jsmj/9xwF+QXht
NOIEhsvDW+KbF68Ou53Onv5zb3dH/bnV7WzYPzvqz+3urn66vWX/3NncM39u
d/WfL7Z39Z975s8d4Pb6z+7mlvrzxYst/cHuxqbuYbfzQn+wu2XAgT8JnN+2
d7gr/Kdk3ArILZ5eEotcDsZxEiWje9ESB72zdkcAxRC7FBezSOIqT+UgvAYK
owZAcC+DDCTgsfeZWH15fLHWxM2UxPBtVHp/CO9JRh6FWQ7PZ2E2BjoufnYE
n60ogEHMALxnya2c9GUquhudbfXGslX+Ryg+uXzfulSPMtgTMgthpvajk967
9ZPjw32xu9vdbnX2VX+vTs577c7uTmubP9XLdBSC+IGJ9MJRHJCEhz0HRJwO
AcpeT0HJML6S/XQWpPdiswlgdjcbZSAJxJUzWkXo9QQ2QpjPgFXBiuqOM1qg
S4uT1bOT3qUaCVjXSDpSMr6NprN+1o5hPduj5HYd/8An6zijdWzZtnNrT4fX
erLdjS1/qqfJEFa/9TbI83AgW4BgiXiqm78784PZCHl2hye+9VlNHOZJ0wZV
SpO82dGb3RdmP+51zB7r7nXtnzv2zz2zsbb0093t7Y7Zj50X+OdJ66jtKCXT
P87CaWt830/DIaojvIytDDYUCJEJaHm0N7+wzYwo9VWZGzlpbXT8EaYgUFqG
67ofJ9ex6rkSnukfcw0TaIyTkFe8xTRRaMFq1RBkWD4OZ5PWQKY58wKZlVpk
QQQdqjYDmN4kag2zQMHyMgQhEnXVSlnau0yDGOAG4kAuAGpUIP44A0kBo6Ww
gzOgkFxMWeu+Aa079LRun0JWjAYZxjftbJpCl6CiwtqsD8bBFKBb72y0QTd4
sb73Yre12drs7LW293Zf7LV2ft/trlRQb8uwDxI5Z201EfOYpc5ZGAf+m0LD
923xWqaB0utsw/fD+yAO/XeFpqBZnA7eBKOZLLQ9hf06BiXBf1tofdSGXSb7
oVI/bOujZDaKgsx7y3sakYQY653Alu746PonhZssuJZikN5P8wT0oukY5cc1
6AnQNShZUdYUYKWk8DeoyLcySqb4nLc56CagD0j4FrGeVW/yu7u7dj8L233o
E9SJ9d4YrJ/hUTLI1o+SuzgCdS9bPz5bByDX2Sbj3tZfpslgDJSx/kcH0pYL
qWKFJUwrTvVKDgEZkXh3DYQuBTAO4UpMbX6BxOudeELgHahcLKe6HXh8cNaj
BSzw2vOEqR00wil8DH+oJSWbEoVjGvZn+EX1wgzuYQxge7Pb9nW6jjseDCG2
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
ctQTSa7Y/P8BfgCQeZ2IAQA=

-->

</rfc>
