From def0215fd57974228429f80704145e4946806279 Mon Sep 17 00:00:00 2001 From: ID Bot Date: Fri, 18 Oct 2024 15:23:46 +0000 Subject: [PATCH] Script updating gh-pages from 1f62c67. [ci skip] --- .../draft-ietf-lamps-pq-composite-sigs.html | 5167 +++++++++++++++++ .../draft-ietf-lamps-pq-composite-sigs.txt | 3301 +++++++++++ 6-CompactPrivateKey/index.html | 45 + index.html | 8 + 4 files changed, 8521 insertions(+) create mode 100644 6-CompactPrivateKey/draft-ietf-lamps-pq-composite-sigs.html create mode 100644 6-CompactPrivateKey/draft-ietf-lamps-pq-composite-sigs.txt create mode 100644 6-CompactPrivateKey/index.html diff --git a/6-CompactPrivateKey/draft-ietf-lamps-pq-composite-sigs.html b/6-CompactPrivateKey/draft-ietf-lamps-pq-composite-sigs.html new file mode 100644 index 0000000..b2c4230 --- /dev/null +++ b/6-CompactPrivateKey/draft-ietf-lamps-pq-composite-sigs.html @@ -0,0 +1,5167 @@ + + + + + + +Composite ML-DSA for use in Internet PKI + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Internet-DraftPQ Composite ML-DSAOctober 2024
Ounsworth, et al.Expires 21 April 2025[Page]
+
+
+
+
Workgroup:
+
LAMPS
+
Internet-Draft:
+
draft-ietf-lamps-pq-composite-sigs-latest
+
Published:
+
+ +
+
Intended Status:
+
Standards Track
+
Expires:
+
+
Authors:
+
+
+
M. Ounsworth
+
Entrust
+
+
+
J. Gray
+
Entrust
+
+
+
M. Pala
+
OpenCA Labs
+
+
+
J. Klaussner
+
Bundesdruckerei GmbH
+
+
+
S. Fluhrer
+
Cisco Systems
+
+
+
+
+

Composite ML-DSA for use in Internet PKI

+
+

Abstract

+

This document introduces a set of signature schemes that use pairs of cryptographic elements such as public keys and signatures to combine their security properties. These schemes effectively mitigate risks associated with the adoption of post-quantum cryptography and are fully compatible with existing X.509, PKIX, and CMS data structures and protocols. This document defines thirteen specific pairwise combinations, called ML-DSA Composite Schemes, that blend ML-DSA with traditional algorithms such as RSA, 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 would otherwise use ML-DSA, but wants the protection against breaks or catastrophic bugs in ML-DSA.

+
+
+
+

+Status of This Memo +

+

+ This Internet-Draft is submitted in full conformance with the + provisions of BCP 78 and BCP 79.

+

+ Internet-Drafts are working documents of the Internet Engineering Task + Force (IETF). Note that other groups may also distribute working + documents as Internet-Drafts. The list of current Internet-Drafts is + at https://datatracker.ietf.org/drafts/current/.

+

+ Internet-Drafts are draft documents valid for a maximum of six months + and may be updated, replaced, or obsoleted by other documents at any + time. It is inappropriate to use Internet-Drafts as reference + material or to cite them other than as "work in progress."

+

+ This Internet-Draft will expire on 21 April 2025.

+
+
+ +
+
+

+Table of Contents +

+ +
+
+
+
+

+1. Changes in -03 +

+
    +
  • +

    Added the ASN.1 encodings for the component public keys and signature algorithm identifiers

    +
  • +
  • +

    Compacted CompositeSignaturePrivateKey to SEQUENCE SIZE (2) OF OCTET STRING instead of OneAsymmetricKey to remove redundency

    +
  • +
  • +

    ASN.1 Module changes:

    +
      +
    • +

      Renamed the module from Composite-Signatures-2023 -> Composite-MLDSA-2024

      +
    • +
    • +

      Simplified the ASN.1 module to make it more compiler-friendly (thanks Carl!) -- should not affect wire encodings.

      +
    • +
    +
  • +
  • +

    Added Pre-Hash and Pure modes and changed the Message format to align with FIPS-204. This breaks backwards compatibility will all previous versions

    +
  • +
  • +

    Added support for the ML-DSA context String, and use the Composite Domain as the context for the underlying ML-DSA component algorithm.

    +
  • +
  • +

    Updated the OID table for new Pre-Hash OIDs and added them to the IANA section

    +
  • +
  • +

    Updated Use in CMS section to reflect content is hashed and pure Composite ML-DSA should be used.

    +
  • +
  • +

    Updated Security Considerations about Non-separability, EUF-CMA and key reuse.

    +
  • +
+
+
+
+
+

+2. Introduction +

+

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.

+

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.

+

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 [I-D.driscoll-pqt-hybrid-terminology].

+

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 [BSI2021].

+

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.

+
+
+

+2.1. Conventions and Terminology +

+

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 [RFC2119] [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.

+

This document is consistent with the terminology defined in [I-D.driscoll-pqt-hybrid-terminology]. In addition, the following terminology is used throughout this document:

+

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

+

BER: + Basic Encoding Rules (BER) as defined in [X.690].

+

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

+

COMPONENT ALGORITHM: + A single basic algorithm which is contained within a + composite algorithm.

+

COMPOSITE ALGORITHM: + An algorithm which is a sequence of two component + algorithms, as defined in Section 5.

+

DER: + Distinguished Encoding Rules as defined in [X.690].

+

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

+

PKI: + Public Key Infrastructure, as defined in [RFC5280].

+

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

+

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

+

SIGNATURE: + A digital cryptographic signature, making no assumptions + about which algorithm.

+

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

+
+
+
+
+
+
+

+3. Composite Signatures Schemes +

+

The engineering principle behind the definition of Composite schemes is to define a new family of algorithms that combines the use of cryptographic operations from two different ones: ML-DSA one and a traditional one. The complexity of combining security properties from the selected two algorithms is handled at the cryptographic library or cryptographic module, thus minimal changes are expected at the application or protocol level. Composite schemes are fully compatible with the X.509 model: composite public keys, composite private keys, and ciphertexts can be carried in existing data structures and protocols such as PKCS#10 [RFC2986], CMP [RFC4210], X.509 [RFC5280], CMS [RFC5652], and the Trust Anchor Format [RFC5914].

+

Composite schemes are defined as cryptographic primitives that consists of three algorithms:

+
    +
  • +

    KeyGen() -> (pk, sk): A probabilistic key generation algorithm, +which generates a public key pk and a secret key sk.

    +
  • +
  • +

    Sign(sk, Message) -> (signature): A signing algorithm which takes +as input a secret key sk and a Message, and outputs a signature

    +
  • +
  • +

    Verify(pk, Message, signature) -> true or false: 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.

    +
  • +
+

A composite signature allows the security properties of the two underlying algorithms to be combined via standard signature operations such as generation and verify and can be used in all applications that use signatures without the need for changes in data structures or protocol messages.

+
+
+

+3.1. Composite Schemes PreHashing +

+

Composite schemes' signature generation process and composite signature verification process are designed to provide security properties meant to address specific issues related to the use multiple algorithms and they require the use of pre-hasing. In Composite schemes, the value of the DER encoding of the selected signature scheme is concatenated with the calculated Hash over the original message.

+

The output is then used as input for the Sign() and Verify() functions.

+
+
+
+
+
+
+

+4. Cryptographic Primitives +

+
+
+

+4.1. Key Generation +

+

To generate a new keypair for Composite schemes, the KeyGen() -> (pk, sk) 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.

+

The generated public key structure is described in Section 5.2, while the corresponding composite secret key structure is defined in Section 5.3.

+

The following process is used to generate composite keypair values:

+
+
+
+
+KeyGen() -> (pk, sk)
+
+Input:
+     sk_1, sk_2         Private keys for each component.
+
+     pk_1, pk_2         Public keys for each component.
+
+     A1, A2             Component signature algorithms.
+
+Output:
+     (pk, sk)           The composite keypair.
+
+Function KeyGen():
+
+  (pk_1, sk_1) <- A1.KeyGen()
+  (pk_2, sk_2) <- A2.KeyGen()
+
+  if NOT (pk_1, sk_1) or NOT (pk_2, sk_2):
+    // Component key generation failure
+    return NULL
+
+  (pk, sk) <- encode[(pk_1, sk_1), (pk_2, sk_2)]
+  if NOT (pk, sk):
+    // Encoding failure
+    return False
+
+  // Success
+  return (pk, sk)
+
+
+
+
Figure 1: +Composite KeyGen(pk, sk) +
+
+

The key generation functions MUST be executed for both algorithms. Compliant parties MUST NOT use or import component keys that are used in other contexts, combinations, or by themselves (i.e., not only in X.509 certificates).

+
+
+
+
+

+4.2. Pure Signature Generation +

+

Composite schemes' signatures provide important properties for multi-key environments such as non-separability and key-binding. For more information on the additional security properties and their applicability to multi-key or hybrid environments, please refer to [I-D.ietf-pquip-hybrid-signature-spectrums] and the use of labels as defined in [Bindel2017]

+

A composite signature's value MUST include two signature components and MUST be in the same order as the components from the corresponding verification public key.

+
+
+

+4.2.1. Composite-ML-DSA.Sign +

+

This mode mirrors ML-DSA.Sign(sk, M, ctx) defined in Section 5.2 of [FIPS.204]. The composite domain separator "Domain" Section 7.1 is concatenated with the length of the context string ctx in bytes, the context string ctx, and finally the un-hashed message M .

+

The following process is used to generate pure composite signature values and mirrors Algorithm 2 in [FIPS.204].

+
+
+
+Composite-ML-DSA.Sign (sk, M, ctx) -> (signature)
+Explicit Input:
+     sk                 Composite private key conisting 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' by concatenating the Domain identifier (i.e., the DER encoding of the Composite signature algorithm identifier) with the length of ctx, the value ctx and the original message M
+
+         M' := Domain || len(ctx) || ctx || M
+
+   3. Separate the private key into component keys. Note, the exact storage format for composite private keys may be as described in this document, or may be implementation-specific.
+
+         (sk1, sk2) := Unmarshal(sk)
+
+   4. Generate the 2 component signatures independently, by calculating the signature over M'
+      according to their algorithm specifications that might involve the use of the hash-n-sign paradigm.
+
+         s1 := ML-DSA.Sign( sk1, M', ctx=Domain )
+         s2 := Trad.Sign( sk2, M' )
+
+      The Domain is used as the context separator for the ML-DSA.Sign component.
+
+      If either ML-DSA.Sign() or Trad.Sign() return an error, then this process must return an error.
+
+   5. Encode each component signature S1 and S2 into a BIT STRING
+      according to its algorithm specification.
+
+          signature := Sequence { s1, s2 }
+
+   6. Output signature
+
+        return signature
+
+
+
Figure 2: +Composite-ML-DSA-Sign(sk, M, ctx) +
+

It is possible to construct CompositePrivateKey(s) to generate signatures from component keys stored in separate software or hardware keystores. Variations in the process to accommodate particular private key storage mechanisms are considered to be conformant to this document so long as it produces the same output as the process sketched above.

+
+
+
+
+

+4.2.2. Composite-ML-DSA.Verify +

+

This mode mirrors ML-DSA.Verify(pk, M, signature, ctx) defined in Section 5.3 of [FIPS.204]. Verification of a composite signature involves reconstructing the M' message by concatenating the composite domain separator "Domain" Section 7.1 with the length of the context string ctx in bytes, the context string ctx, and finally the original message M .

+

Compliant applications MUST output "Valid signature" (true) if and only if all component signatures were successfully validated, and "Invalid signature" (false) otherwise.

+

The following process is used to perform this verification.

+
+
+
+
+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 (S1 and S2) 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 Procedure:
+
+   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' by concatenating the Domain identifier (i.e., the DER encoding of the Composite signature algorithm identifier) with the length of ctx, the value ctx and the original 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"
+
+
+
Figure 3: +Composite-ML-DSA-Verify(pk, Message, signature, Context) +
+
+

It is possible to construct CompositePublicKey(s) to verify signatures from component keys stored in separate software or hardware keystores. Variations in the process to accommodate particular private key storage mechanisms are considered to be conformant to this document so long as it produces the same output as the process sketched above.

+
+
+
+
+
+
+

+4.3. PreHash-Signature Generation +

+

This mode mirrors HashML-DSA defined in Section 5.4 of [FIPS.204].

+

In the pre-hash mode the Domain separator Section 7.1 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. After that, the signature process for each component algorithm is invoked and the values are then placed in the CompositeSignatureValue structure defined in Section 6.1.

+

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.

+

The following process is used to generate composite signature values.

+
+
+

+4.3.1. HashComposite-ML-DSA-Sign signature mode +

+

This mode mirrors HashML-DSA.Sign(sk, M, ctx, PH) defined in Section 5.4.1 of [FIPS.204].

+

In the pre-hash mode the Domain separator Section 7.1 is concatendated with the length of the context in bytes, the context, an additional DER encoded value that represents the Hash and finally the pre-hashed message PH(M).

+
+
+
+
+HashComposite-ML-DSA.Sign (sk, M, ctx, PH) -> (signature)
+
+Explicit Input:
+     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' by concatenating the Domain identifier (i.e., the DER encoding of the Composite signature algorithm identifier) with the length of the context, the Context, the HashOID and the Hash of the Message.
+
+         M' :=  Domain || len(ctx) || ctx || HashOID || PH(M)
+
+   3. Separate the private key into component keys. Note, the exact storage format for composite private keys may be as described in this document, or may be implementation-specific.
+
+         (sk1, sk2) := Unmarshal(sk)
+
+   4. Generate the 2 component signatures independently, by calculating the signature over M'
+      according to their algorithm specifications that might involve the use of the hash-n-sign paradigm.
+
+         s1 := ML-DSA.Sign( sk1, M', ctx=Domain )
+         s2 := Trad.Sign( sk2, M' )
+
+     The Domain is used as the context separator for the ML-DSA.Sign component.
+
+   5. Encode each component signature S1 and S2 into a BIT STRING
+      according to its algorithm specification.
+
+          signature := Sequence { s1, s2 }
+
+   6. Output signature
+
+        return signature
+
+
+
Figure 4: +HashComposite-ML-DSA-Sign(sk, M, ctx, PH) +
+
+

It is possible to construct CompositePrivateKey(s) to generate signatures from component keys stored in separate software or hardware keystores. Variations in the process to accommodate particular private key storage mechanisms are considered to be conformant to this document so long as it produces the same output as the process sketched above.

+
+
+
+
+

+4.3.2. HashComposite-ML-DSA-Verify +

+

This mode mirrors HashML-DSA.Verify(pk, M, signature, ctx, PH) defined in Section 5.4.1 of [FIPS.204].

+

Verification of a composite signature involves reconstructing the M' message by concatenating the composite domain separator "Domain" Section 7.1 with the length of the context string ctx in bytes, the context string ctx, and finally the pre-hashed message PH(M) .

+

Compliant applications MUST output "Valid signature" (true) if and only if all component signatures were successfully validated, and "Invalid signature" (false) otherwise.

+

The following process is used to perform this verification.

+
+
+
+
+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 (S1 and S2) 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 Procedure::
+
+   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"
+
+
+
Figure 5: +Hash-Composite-ML-DSA-Verify(pk, M, signature, ctx, PH) +
+
+

It is possible to construct CompositePublicKey(s) to verify signatures from component keys stored in separate software or hardware keystores. Variations in the process to accommodate particular private key storage mechanisms are considered to be conformant to this document so long as it produces the same output as the process sketched above.

+
+
+
+
+
+
+
+
+

+5. Composite Key Structures +

+

In order for signatures to be composed of multiple algorithms, we define encodings consisting of a sequence of signature primitives (aka "component algorithms") such that these structures can be used as a drop-in replacement for existing signature fields such as those found in PKCS#10 [RFC2986], CMP [RFC4210], X.509 [RFC5280], CMS [RFC5652].

+
+
+

+5.1. pk-CompositeSignature +

+

The following ASN.1 structures represent a composite public key combined with an RSA and Elliptic Curve public key, respectively.

+
+
+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 (CONTAINING id-raw-key)
+      }
+
+
+

id-raw-key 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.

+

This structure is intentionally generic in the first public key slot since ML-DSA, as defined in [I-D.ietf-lamps-dilithium-certificates], does not define any ASN.1 public key structures. For use with this document, the firstPublicKey MUST be the BIT STRING representation of an ML-DSA key as specified in [I-D.ietf-lamps-dilithium-certificates]. Note that here we used BIT STRING rather than OCTET STRING so that these keys can be trivially transcoded into a SubjectPublicKeyInfo as necessary, for example when a crypto library requires this for invoking the component algorithm. The public key for Edwards curve DSA component is also encoded as a raw key.

+

The following ASN.1 Information Object Class is defined to then allow for compact definitions of each composite algorithm.

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

As an example, the public key type pk-MLDSA44-ECDSA-P256-SHA256 is defined as:

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

The full set of key types defined by this specification can be found in the ASN.1 Module in Section 9.

+
+
+
+
+

+5.2. CompositeSignaturePublicKey +

+

Composite public key data is represented by the following structure:

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

A composite key MUST contain two component public keys. The order of the component keys is determined by the definition of the corresponding algorithm identifier as defined in section Section 7.

+

Some applications may need to reconstruct the SubjectPublicKeyInfo objects corresponding to each component public key. Table 2 or Table 3 in Section 7 provides the necessary mapping between composite and their component algorithms for doing this reconstruction. This also motivates the design choice of SEQUENCE OF BIT STRING instead of SEQUENCE OF OCTET STRING; using BIT STRING allows for easier transcription between CompositeSignaturePublicKey and SubjectPublicKeyInfo.

+

When the CompositeSignaturePublicKey must be provided in octet string or bit string format, the data structure is encoded as specified in Section 5.4.

+

Component keys of a CompositeSignaturePublicKey MUST NOT be used in any other type of key or as a standalone key.

+
+
+
+
+

+5.3. CompositeSignaturePrivateKey +

+

Use cases that require an interoperable encoding for composite private keys, such as when private keys are carried in PKCS #12 [RFC7292], CMP [RFC4210] or CRMF [RFC4211] MUST use the OneAsymmetricKey [RFC5958] structure into which the privateKey field contains the CompositeSignaturePrivateKey:

+
+
+ 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.
+
+
+
+
+CompositeSignaturePrivateKey ::= SEQUENCE SIZE (2) OF OCTET STRING
+
+
+

Each element of the CompositeSignaturePrivateKey Sequence is an OCTET STRING representing the PrivateKey for each component algorithm in the same order defined in Section 5.2 for the components of CompositeSignaturePublicKey.

+

When a CompositeSignaturePrivateKey is conveyed inside a OneAsymmetricKey structure (version 1 of which is also known as PrivateKeyInfo) [RFC5958], the privateKeyAlgorithm field SHALL be set to the corresponding composite algorithm identifier defined according to Section 7 and its parameters field MUST be absent. The privateKey field SHALL contain the CompositeSignaturePrivateKey, and the publicKey field MAY be present.

+

In some usecases the private keys that comprise a composite key may not be represented in a single structure or even be contained in a single cryptographic module; for example if one component is within the FIPS boundary of a cryptographic module and the other is not; see {sec-fips} for more discussion. The establishment of correspondence between public keys in a CompositeSignaturePublicKey and private keys not represented in a single composite structure is beyond the scope of this document.

+

Some applications may need to reconstruct the OneAsymmetricKey objects corresponding to each component private key. Table 2 or Table 3 in Section 7 provides the necessary mapping between composite and their component algorithms for doing this reconstruction.

+

Component keys of a CompositeSignaturePrivateKey MUST NOT be used in any other type of key or as a standalone key.

+
+
+
+
+

+5.4. Encoding Rules +

+

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.

+

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

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

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.

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

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

+
+
+
+
+

+5.5. Key Usage Bits +

+

For protocols such as X.509 [RFC5280] that specify key usage along with the public key, then the composite public key associated with a composite signature MUST have a signing-type key usage. +This is because the composite public key can only be used in situations +that are appropriate for both component algorithms, so even if the +classical component key supports both signing and encryption, +the post-quantum algorithms do not.

+

If the keyUsage extension is present in a Certification Authority (CA) certificate that indicates a composite key, then any combination of the following values MAY be present and any other values MUST NOT be present:

+
+
+digitalSignature;
+nonRepudiation;
+keyCertSign; and
+cRLSign.
+
+
+

If the keyUsage extension is present in an End Entity (EE) certificate that indicates a composite key, then any combination of the following values MAY be present and any other values MUST NOT be present:

+
+
+digitalSignature; and
+nonRepudiation;
+
+
+
+
+
+
+
+
+

+6. Composite Signature Structures +

+
+
+

+6.1. sa-CompositeSignature +

+

The ASN.1 algorithm object for a composite signature is:

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

The following is an explanation how SIGNATURE-ALGORITHM elements are used +to define Composite Signatures:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1
SIGNATURE-ALGORITHM elementDefinition
IDENTIFIERThe Object ID used to identify the composite Signature Algorithm
VALUEThe Sequence of BIT STRINGS for each component signature value
PARAMSParameters are absent
PUBLIC-KEYSThe composite public key type associated with the composite signature
+
+
+
+
+

+6.2. CompositeSignatureValue +

+

The output of the composite signature algorithm is the DER encoding of the following structure:

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

Where each BIT STRING within the SEQUENCE is a signature value produced by one of the component keys. It MUST contain one signature value produced by each component algorithm, and in the same order as specified in the object identifier.

+

The choice of SEQUENCE SIZE (2) OF BIT STRING, rather than for example a single BIT STRING containing the concatenated signature values, is to gracefully handle variable-length signature values by taking advantage of ASN.1's built-in length fields.

+
+
+
+
+
+
+

+7. Algorithm Identifiers +

+

This section defines the algorithm identifiers for explicit combinations. For simplicity and prototyping purposes, the signature algorithm object identifiers specified in this document are the same as the composite key object Identifiers. A proper implementation should not presume that the object ID of a composite key will be the same as its composite signature algorithm.

+

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

+

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

+

The following tables summarize the details for each explicit composite signature algorithms:

+

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

+

replace <CompSig> with the String "2.16.840.1.114027.80.8.1"

+

Therefore <CompSig>.21 is equal to 2.16.840.1.114027.80.8.1.21

+

Pure Composite-ML-DSA Signature public key types:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 2: +Pure ML-DSA Composite Signature Algorithms +
Composite Signature AlgorithmIDOIDFirst AlgorithmIDSecond AlgorithmIDSecond Alg PreHash
id-MLDSA44-RSA2048-PSS-SHA256<CompSig>.21id-ML-DSA-44id-RSASA-PSS with id-sha256id-sha256
id-MLDSA44-RSA2048-PKCS15-SHA256<CompSig>.22id-ML-DSA-44sha256WithRSAEncryptionid-sha256
id-MLDSA44-Ed25519<CompSig>.23id-ML-DSA-44id-Ed25519None
id-MLDSA44-ECDSA-P256-SHA256<CompSig>.24id-ML-DSA-44ecdsa-with-SHA256 with secp256r1id-sha256
id-MLDSA65-RSA3072-PSS-SHA512<CompSig>.26id-ML-DSA-65id-RSASA-PSS with id-sha512id-sha512
id-MLDSA65-RSA3072-PKCS15-SHA512<CompSig>.27id-ML-DSA-65sha512WithRSAEncryptionid-sha512
id-MLDSA65-RSA4096-PSS-SHA512<CompSig>.34id-ML-DSA-65id-RSASA-PSS with id-sha512id-sha512
id-MLDSA65-RSA4096-PKCS15-SHA512<CompSig>.35id-ML-DSA-65sha512WithRSAEncryptionid-sha512
id-MLDSA65-ECDSA-P384-SHA512<CompSig>.28id-ML-DSA-65ecdsa-with-SHA512 with secp384r1id-sha512
id-MLDSA65-ECDSA-brainpoolP256r1-SHA512<CompSig>.29id-ML-DSA-65ecdsa-with-SHA512 with brainpoolP256r1id-sha512
id-MLDSA65-Ed25519<CompSig>.30id-ML-DSA-65id-Ed25519None
id-MLDSA87-ECDSA-P384-SHA512<CompSig>.31id-ML-DSA-87ecdsa-with-SHA512 with secp384r1id-sha512
id-MLDSA87-ECDSA-brainpoolP384r1-SHA512<CompSig>.32id-ML-DSA-87ecdsa-with-SHA512 with brainpoolP384r1id-sha512
id-MLDSA87-Ed448<CompSig>.33id-ML-DSA-87id-Ed448None
+
+

The table above contains everything needed to implement the listed pure ML-DSA composite signature algorithms. The hash value indicated is used only by the Second algorithm if needed. See the ASN.1 module in section Section 9 for the explicit definitions of the above Composite signature algorithms.

+

HashComposite-ML-DSA Signature public key types:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 3: +Hash ML-DSA Composite Signature Algorithms +
Composite Signature AlgorithmIDOIDFirst AlgorithmIDSecond AlgorithmIDPre-Hash
id-HashMLDSA44-RSA2048-PSS-SHA256<CompSig>.40id-ML-DSA-44id-RSASA-PSS with id-sha256id-sha256
id-HashMLDSA44-RSA2048-PKCS15-SHA256<CompSig>.41id-ML-DSA-44sha256WithRSAEncryptionid-sha256
id-HashMLDSA44-Ed25519-SHA512<CompSig>.42id-ML-DSA-44id-Ed25519id-sha512
id-HashMLDSA44-ECDSA-P256-SHA256<CompSig>.43id-ML-DSA-44ecdsa-with-SHA256 with secp256r1id-sha256
id-HashMLDSA65-RSA3072-PSS-SHA512<CompSig>.44id-ML-DSA-65id-RSASA-PSS with id-sha512id-sha512
id-HashMLDSA65-RSA3072-PKCS15-SHA512<CompSig>.45id-ML-DSA-65sha512WithRSAEncryptionid-sha512
id-HashMLDSA65-RSA4096-PSS-SHA512<CompSig>.46id-ML-DSA-65id-RSASA-PSS with id-sha512id-sha512
id-HashMLDSA65-RSA4096-PKCS15-SHA512<CompSig>.47id-ML-DSA-65sha512WithRSAEncryptionid-sha512
id-HashMLDSA65-ECDSA-P384-SHA512<CompSig>.48id-ML-DSA-65ecdsa-with-SHA512 with secp384r1id-sha512
id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512<CompSig>.49id-ML-DSA-65ecdsa-with-SHA512 with brainpoolP256r1id-sha512
id-HashMLDSA65-Ed25519-SHA512<CompSig>.50id-ML-DSA-65id-Ed25519id-sha512
id-HashMLDSA87-ECDSA-P384-SHA512<CompSig>.51id-ML-DSA-87ecdsa-with-SHA512 with secp384r1id-sha512
id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512<CompSig>.52id-ML-DSA-87ecdsa-with-SHA512 with brainpoolP384r1id-sha512
id-HashMLDSA87-Ed448-SHA512<CompSig>.53id-ML-DSA-87id-Ed448id-sha512
+
+

The table above contains everything needed to implement the listed hash ML-DSA composite signature algorithms. The Pre-Hash algorithm is used as the PH algorithm and the DER Encoded OID value of this Hash is used as HashOID for the Message format in step 2 of HashML-DSA.Sign in section Section 4.3. This hash value is also used as the pre-hash of the Second algorithm if needed. See the ASN.1 module in section Section 9 for the explicit definitions of the above Composite signature algorithms.

+

Full specifications for the referenced algorithms can be found in Appendix A.

+
+
+

+7.1. Domain Separators +

+

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.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 4: +Pure ML-DSA Composite Signature Domain Separators +
Composite Signature AlgorithmIDDomain Separator (in Hex encoding)
id-MLDSA44-RSA2048-PSS-SHA256060B6086480186FA6B50080115
id-MLDSA44-RSA2048-PKCS15-SHA256060B6086480186FA6B50080116
id-MLDSA44-Ed25519-SHA512060B6086480186FA6B50080117
id-MLDSA44-ECDSA-P256-SHA256060B6086480186FA6B50080118
id-MLDSA65-RSA3072-PSS-SHA512060B6086480186FA6B5008011A
id-MLDSA65-RSA3072-PKCS15-SHA512060B6086480186FA6B5008011B
id-MLDSA65-RSA4096-PSS-SHA512060B6086480186FA6B50080122
id-MLDSA65-RSA4096-PKCS15-SHA512060B6086480186FA6B50080123
id-MLDSA65-ECDSA-P384-SHA512060B6086480186FA6B5008011C
id-MLDSA65-ECDSA-brainpoolP256r1-SHA512060B6086480186FA6B5008011D
id-MLDSA65-Ed25519-SHA512060B6086480186FA6B5008011E
id-MLDSA87-ECDSA-P384-SHA512060B6086480186FA6B5008011F
id-MLDSA87-ECDSA-brainpoolP384r1-SHA512060B6086480186FA6B50080120
id-MLDSA87-Ed448-SHA512060B6086480186FA6B50080121
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 5: +Hash ML-DSA Composite Signature Domain Separators +
Composite Signature AlgorithmIDDomain Separator (in Hex encoding)
id-HashMLDSA44-RSA2048-PSS-SHA256060B6086480186FA6B50080128
id-HashMLDSA44-RSA2048-PKCS15-SHA256060B6086480186FA6B50080129
id-HashMLDSA44-Ed25519-SHA512060B6086480186FA6B5008012A
id-HashMLDSA44-ECDSA-P256-SHA256060B6086480186FA6B5008012B
id-HashMLDSA65-RSA3072-PSS-SHA512060B6086480186FA6B5008012C
id-HashMLDSA65-RSA3072-PKCS15-SHA512060B6086480186FA6B5008012D
id-HashMLDSA65-RSA4096-PSS-SHA512060B6086480186FA6B5008012E
id-HashMLDSA65-RSA4096-PKCS15-SHA512060B6086480186FA6B5008012F
id-HashMLDSA65-ECDSA-P384-SHA512060B6086480186FA6B50080130
id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512060B6086480186FA6B50080131
id-HashMLDSA65-Ed25519-SHA512060B6086480186FA6B50080132
id-HashMLDSA87-ECDSA-P384-SHA512060B6086480186FA6B50080133
id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512060B6086480186FA6B50080134
id-HashMLDSA87-Ed448-SHA512060B6086480186FA6B50080135
+
+
+
+
+
+

+7.2. Notes on id-MLDSA44-RSA2048-PSS-SHA256 +

+

Use of RSA-PSS [RFC8017] deserves a special explanation.

+

The RSA component keys MUST be generated at the 2048-bit security level in order to match with ML-DSA-44

+

As with the other composite signature algorithms, when id-MLDSA44-RSA2048-PSS-SHA256 is used in an AlgorithmIdentifier, the parameters MUST be absent. id-MLDSA44-RSA2048-PSS-SHA256 SHALL instantiate RSA-PSS with the following parameters:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 6: +RSA-PSS 2048 Parameters +
RSA-PSS ParameterValue
Mask Generation Functionmgf1
Mask Generation paramsSHA-256
Message Digest AlgorithmSHA-256
Salt Length in bits256
+
+

where:

+
    +
  • +

    Mask Generation Function (mgf1) is defined in [RFC8017]

    +
  • +
  • +

    SHA-256 is defined in [RFC6234].

    +
  • +
+
+
+
+
+

+7.3. Notes on id-MLDSA65-RSA3072-PSS-SHA512 +

+

The RSA component keys MUST be generated at the 3072-bit security level in order to match with ML-DSA-65.

+

As with the other composite signature algorithms, when id-MLDSA65-RSA3072-PSS-SHA512 is used in an AlgorithmIdentifier, the parameters MUST be absent. id-MLDSA65-RSA3072-PSS-SHA512 SHALL instantiate RSA-PSS with the following parameters:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 7: +RSA-PSS 3072 Parameters +
RSA-PSS ParameterValue
Mask Generation Functionmgf1
Mask Generation paramsSHA-512
Message Digest AlgorithmSHA-512
Salt Length in bits512
+
+

where:

+
    +
  • +

    Mask Generation Function (mgf1) is defined in [RFC8017]

    +
  • +
  • +

    SHA-512 is defined in [RFC6234].

    +
  • +
+
+
+
+
+

+7.4. Notes on id-MLDSA65-RSA4096-PSS-SHA512 +

+

The RSA component keys MUST be generated at the 4096-bit security level in order to match with ML-DSA-65.

+

As with the other composite signature algorithms, when id-MLDSA65-RSA4096-PSS-SHA512 is used in an AlgorithmIdentifier, the parameters MUST be absent. id-MLDSA65-RSA4096-PSS-SHA512 SHALL instantiate RSA-PSS with the following parameters:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 8: +RSA-PSS 4096 Parameters +
RSA-PSS ParameterValue
Mask Generation Functionmgf1
Mask Generation paramsSHA-512
Message Digest AlgorithmSHA-512
Salt Length in bits512
+
+

where:

+
    +
  • +

    Mask Generation Function (mgf1) is defined in [RFC8017]

    +
  • +
  • +

    SHA-512 is defined in [RFC6234].

    +
  • +
+
+
+
+
+
+
+

+8. Use in CMS +

+

[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.]

+

Composite Signature algorithms MAY be employed for one or more recipients in the CMS signed-data content type [RFC5652].

+
+
+

+8.1. Underlying Components +

+

When a particular Composite Signature OID is supported in CMS, an implementation SHOULD support the corresponding Secure Hash algorithm identifier in Table 9 that was used as the pre-hash.

+

The following table lists the MANDATORY Hash algorithms to preserve security and performance characteristics of each composite algorithm.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 9: +Composite Signature SHA Algorithms +
Composite Signature AlgorithmIDSecure Hash
id-MLDSA44-RSA2048-PSS-SHA256SHA256
id-MLDSA44-RSA2048-PKCS15-SHA256SHA256
id-MLDSA44-Ed25519SHA512
id-MLDSA44-ECDSA-P256-SHA256SHA256
id-MLDSA65-RSA3072-PSS-SHA512SHA512
id-MLDSA65-RSA3072-PKCS15-SHA512SHA512
id-MLDSA65-RSA4096-PSS-SHA512SHA512
id-MLDSA65-RSA4096-PKCS15-SHA512SHA512
id-MLDSA65-ECDSA-P384-SHA512SHA512
id-MLDSA65-ECDSA-brainpoolP256r1-SHA512SHA512
id-MLDSA65-Ed25519SHA512
id-MLDSA87-ECDSA-P384-SHA512SHA512
id-MLDSA87-ECDSA-brainpoolP384r1-SHA512SHA512
id-MLDSA87-Ed448SHA512
+
+

where:

+
    +
  • +

    SHA2 instantiations are defined in [FIPS180].

    +
  • +
+

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.

+
+
+
+
+

+8.2. SignedData Conventions +

+

As specified in CMS [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.

+

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 Table 9, 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:

+
+
+IF (signed attributes are absent)
+   THEN Composite-ML-DSA.Sign(Hash(content))
+ELSE message-digest attribute = Hash(content);
+   Composite-ML-DSA.Sign(DER(SignedAttributes))
+
+
+

When using Composite Signatures, the fields in the SignerInfo are used as follows:

+

digestAlgorithm: + The digestAlgorithm contains the one-way hash function used by the CMS signer.

+

signatureAlgorithm: + The signatureAlgorithm MUST contain one of the the Composite Signature algorithm identifiers as specified in Table 9

+

signature: + The signature field contains the signature value resulting from the composite signing operation of the specified signatureAlgorithm.

+
+
+
+
+

+8.3. Certificate Conventions +

+

The conventions specified in this section augment RFC 5280 [RFC5280].

+

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 [RFC8551] or the SMIMECapabilities certificate extension as specified in [RFC4262].

+

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

+
+
+digitalSignature
+nonRepudiation
+keyCertSign
+cRLSign
+
+
+

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.

+
+
+
+
+

+8.4. SMIMECapabilities Attribute Conventions +

+

Section 2.5.2 of [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 [RFC5652], a compliant implementation MAY include the SMIMECapabilities attribute that announces support for the RSA-KEM Algorithm.

+

The SMIMECapability SEQUENCE representing a composite signature Algorithm MUST include the appropriate object identifier as per Table 9 in the capabilityID field.

+
+
+
+
+
+
+

+9. ASN.1 Module +

+
+
+<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, 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 OneAsymmetricKey
+
+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}
+      }
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA44-RSA2048-PSS-SHA256 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-SHA256 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA44-RSA2048-PSS-SHA256,
+  RsaCompositeSignaturePublicKey}
+
+sa-MLDSA44-RSA2048-PSS-SHA256 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA44-RSA2048-PSS-SHA256,
+       pk-MLDSA44-RSA2048-PSS-SHA256 }
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA44-RSA2048-PKCS15-SHA256 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-SHA256 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA44-RSA2048-PKCS15-SHA256,
+  RsaCompositeSignaturePublicKey}
+
+sa-MLDSA44-RSA2048-PKCS15-SHA256 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA44-RSA2048-PKCS15-SHA256,
+       pk-MLDSA44-RSA2048-PKCS15-SHA256 }
+
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA44-Ed25519-SHA512 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-SHA512 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA44-Ed25519-SHA512,
+  EdCompositeSignaturePublicKey}
+
+sa-MLDSA44-Ed25519-SHA512 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA44-Ed25519-SHA512,
+       pk-MLDSA44-Ed25519-SHA512 }
+
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA44-ECDSA-P256-SHA256 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-SHA256 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA44-ECDSA-P256-SHA256,
+  EcCompositeSignaturePublicKey}
+
+sa-MLDSA44-ECDSA-P256-SHA256 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA44-ECDSA-P256-SHA256,
+       pk-MLDSA44-ECDSA-P256-SHA256 }
+
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA44-ECDSA-brainpoolP256r1-SHA256 OBJECT IDENTIFIER ::= {
+   joint-iso-itu-t(2) country(16) us(840) organization(1)
+   entrust(114027) algorithm(80) composite(8) signature(1) 25 }
+
+pk-MLDSA44-ECDSA-brainpoolP256r1-SHA256 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA44-ECDSA-brainpoolP256r1-SHA256,
+  EcCompositeSignaturePublicKey}
+
+sa-MLDSA44-ECDSA-brainpoolP256r1-SHA256 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA44-ECDSA-brainpoolP256r1-SHA256,
+       pk-MLDSA44-ECDSA-brainpoolP256r1-SHA256 }
+
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA65-RSA3072-PSS-SHA512 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-SHA512 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA65-RSA3072-PSS-SHA512,
+  RsaCompositeSignaturePublicKey}
+
+sa-MLDSA65-RSA3072-PSS-SHA512 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA65-RSA3072-PSS-SHA512,
+       pk-MLDSA65-RSA3072-PSS-SHA512 }
+
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA65-RSA3072-PKCS15-SHA512 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-SHA512 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA65-RSA3072-PKCS15-SHA512,
+  RsaCompositeSignaturePublicKey}
+
+sa-MLDSA65-RSA3072-PKCS15-SHA512 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA65-RSA3072-PKCS15-SHA512,
+       pk-MLDSA65-RSA3072-PKCS15-SHA512 }
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA65-RSA4096-PSS-SHA512 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-SHA512 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA65-RSA4096-PSS-SHA512,
+  RsaCompositeSignaturePublicKey}
+
+sa-MLDSA65-RSA4096-PSS-SHA512 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA65-RSA4096-PSS-SHA512,
+       pk-MLDSA65-RSA4096-PSS-SHA512 }
+
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA65-RSA4096-PKCS15-SHA512 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-SHA512 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA65-RSA4096-PKCS15-SHA512,
+  RsaCompositeSignaturePublicKey}
+
+sa-MLDSA65-RSA4096-PKCS15-SHA512 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA65-RSA4096-PKCS15-SHA512,
+       pk-MLDSA65-RSA4096-PKCS15-SHA512 }
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA65-ECDSA-P384-SHA512 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-SHA512 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA65-ECDSA-P384-SHA512,
+  EcCompositeSignaturePublicKey}
+
+sa-MLDSA65-ECDSA-P256-SHA512 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA65-ECDSA-P384-SHA512,
+       pk-MLDSA65-ECDSA-P384-SHA512 }
+
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA65-ECDSA-brainpoolP256r1-SHA512 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-SHA512 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA65-ECDSA-brainpoolP256r1-SHA512,
+  EcCompositeSignaturePublicKey}
+
+sa-MLDSA65-ECDSA-brainpoolP256r1-SHA512 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA65-ECDSA-brainpoolP256r1-SHA512,
+       pk-MLDSA65-ECDSA-brainpoolP256r1-SHA512 }
+
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA65-Ed25519-SHA512 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-SHA512 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA65-Ed25519-SHA512,
+  EdCompositeSignaturePublicKey}
+
+sa-MLDSA65-Ed25519-SHA512 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA65-Ed25519-SHA512,
+       pk-MLDSA65-Ed25519-SHA512 }
+
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA87-ECDSA-P384-SHA512 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-SHA512 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA87-ECDSA-P384-SHA512,
+  EcCompositeSignaturePublicKey}
+
+sa-MLDSA87-ECDSA-P384-SHA512 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA87-ECDSA-P384-SHA512,
+       pk-MLDSA87-ECDSA-P384-SHA512 }
+
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA87-ECDSA-brainpoolP384r1-SHA512 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-SHA512 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA87-ECDSA-brainpoolP384r1-SHA512,
+  EcCompositeSignaturePublicKey}
+
+sa-MLDSA87-ECDSA-brainpoolP384r1-SHA512 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA87-ECDSA-brainpoolP384r1-SHA512,
+       pk-MLDSA87-ECDSA-brainpoolP384r1-SHA512 }
+
+
+-- TODO: OID to be replaced by IANA
+id-MLDSA87-Ed448-SHA512 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-SHA512 PUBLIC-KEY ::=
+  pk-CompositeSignature{ id-MLDSA87-Ed448-SHA512,
+  EdCompositeSignaturePublicKey}
+
+sa-MLDSA87-Ed448-SHA512 SIGNATURE-ALGORITHM ::=
+    sa-CompositeSignature{
+       id-MLDSA87-Ed448-SHA512,
+       pk-MLDSA87-Ed448-SHA512 }
+
+END
+
+<CODE ENDS>
+
+
+
+
+
+
+
+

+10. IANA Considerations +

+

IANA is requested to allocate a value from the "SMI Security for PKIX Module Identifier" registry [RFC7299] for the included ASN.1 module, and allocate values from "SMI Security for PKIX Algorithms" to identify the fourteen Algorithms defined within.

+
+
+

+10.1. Object Identifier Allocations +

+

EDNOTE to IANA: OIDs will need to be replaced in both the ASN.1 module and in Table 2 and Table 3.

+
+
+

+10.1.1. Module Registration - SMI Security for PKIX Module Identifier +

+
    +
  • +

    Decimal: IANA Assigned - Replace TBDMOD

    +
  • +
  • +

    Description: Composite-Signatures-2023 - id-mod-composite-signatures

    +
  • +
  • +

    References: This Document

    +
  • +
+
+
+
+
+

+10.1.2. Object Identifier Registrations - SMI Security for PKIX Algorithms +

+
    +
  • +

    id-raw-key

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: Designates a public key BIT STRING with no ASN.1 structure.

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-MLDSA44-RSA2048-PSS-SHA256

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-MLDSA44-RSA2048-PSS-SHA256

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-MLDSA44-RSA2048-PKCS15-SHA256

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-MLDSA44-RSA2048-PKCS15-SHA256

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-MLDSA44-Ed25519

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-MLDSA44-Ed25519

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-MLDSA44-ECDSA-P256-SHA256

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-MLDSA44-ECDSA-P256-SHA256

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-MLDSA65-RSA3072-PSS-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-MLDSA65-RSA3072-PSS-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-MLDSA65-RSA3072-PKCS15-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-MLDSA65-RSA3072-PKCS15-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-MLDSA65-RSA4096-PSS-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-MLDSA65-RSA4096-PSS-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-MLDSA65-RSA4096-PKCS15-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-MLDSA65-RSA4096-PKCS15-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-MLDSA65-ECDSA-P384-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-MLDSA65-ECDSA-P384-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-MLDSA65-ECDSA-brainpoolP256r1-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-MLDSA65-ECDSA-brainpoolP256r1-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-MLDSA65-Ed25519

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-MLDSA65-Ed25519

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-MLDSA87-ECDSA-P384-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-MLDSA87-ECDSA-P384-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-MLDSA87-ECDSA-brainpoolP384r1-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-MLDSA87-ECDSA-brainpoolP384r1-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-MLDSA87-Ed448

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-MLDSA87-Ed448

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-HashMLDSA44-RSA2048-PSS-SHA256

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-HashMLDSA44-RSA2048-PSS-SHA256

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-HashMLDSA44-RSA2048-PKCS15-SHA256

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-HashMLDSA44-RSA2048-PKCS15-SHA256

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-HashMLDSA44-Ed25519-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-HashMLDSA44-Ed25519-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-HashMLDSA44-ECDSA-P256-SHA256

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-HashMLDSA44-ECDSA-P256-SHA256

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-HashMLDSA65-RSA3072-PSS-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-HashMLDSA65-RSA3072-PSS-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-HashMLDSA65-RSA3072-PKCS15-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-HashMLDSA65-RSA3072-PKCS15-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-HashMLDSA65-RSA4096-PSS-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-HashMLDSA65-RSA4096-PSS-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-HashMLDSA65-RSA4096-PKCS15-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-HashMLDSA65-RSA4096-PKCS15-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-HashMLDSA65-ECDSA-P384-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-HashMLDSA65-ECDSA-P384-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-HashMLDSA65-Ed25519-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-HashMLDSA65-Ed25519-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-HashMLDSA87-ECDSA-P384-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-HashMLDSA87-ECDSA-P384-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
  • +

    id-HashMLDSA87-Ed448-SHA512

    +
  • +
  • +

    Decimal: IANA Assigned

    +
  • +
  • +

    Description: id-HashMLDSA87-Ed448-SHA512

    +
  • +
  • +

    References: This Document

    +
  • +
+
+
+
+
+
+
+
+
+

+11. Security Considerations +

+
+
+

+11.1. Non-separability and EUF-CMA +

+

The signature combiner defined in this document is Weakly Non-Separable (WNS), as defined in [I-D.ietf-pquip-hybrid-signature-spectrums], since the forged message M’ will include the composite domain separator as evidence. The prohibition on key reuse between composite and single-algorithm contexts discussed in Section 11.2 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.

+

Unforgeability properties are somewhat more nuanced. The classic EUF-CMA game is in reference to a pair of algorithms ( Sign(), Verify() ) where the attacker has access to a signing oracle using the Sign() and must produce a signature-message pair (s, m) that is accepted by the verifier using Verify() and where m was never signed by the oracle. The pair ( CompositeML-DSA.Sign(), CompositeML-DSA.Verify() ) 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 (s1*, m) pair where s1* was not produced by the honest signer and it then can be combined with an honestly-signed (s2, m) signature over the same message m to create ( (s1*, s2), m) which violates SUF for the composite algorithm.

+

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.

+

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 M’ and then trivially assemble a composite. In the second case, the message M’ (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 Section 11.4 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.

+
+
+
+
+

+11.2. Key Reuse +

+

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)

+

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 Section 11.1 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.

+

In adition, 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.

+
+
+
+
+

+11.3. Policy for Deprecated and Acceptable Algorithms +

+

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.

+

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.

+

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 id-MLDSA65-ECDSA-P256-SHA512 even after ECDSA-P256 is deprecated.

+

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.

+

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:

+
    +
  1. +

    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.

    +
  2. +
  3. +

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

    +
  4. +
+

There are mechanisms within Internet PKI where trusted public keys do not appear within signed structures -- such as the Trust Anchor format defined in [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.

+
+
+
+
+
+
+

+12. References +

+
+
+

+12.1. Normative References +

+
+
[FIPS.204]
+
+National Institute of Standards and Technology (NIST), "Module-Lattice-Based Digital Signature Standard", , <https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.204.pdf>.
+
+
[RFC2119]
+
+Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/info/rfc2119>.
+
+
[RFC2986]
+
+Nystrom, M. and B. Kaliski, "PKCS #10: Certification Request Syntax Specification Version 1.7", RFC 2986, DOI 10.17487/RFC2986, , <https://www.rfc-editor.org/info/rfc2986>.
+
+
[RFC4210]
+
+Adams, C., Farrell, S., Kause, T., and T. Mononen, "Internet X.509 Public Key Infrastructure Certificate Management Protocol (CMP)", RFC 4210, DOI 10.17487/RFC4210, , <https://www.rfc-editor.org/info/rfc4210>.
+
+
[RFC4211]
+
+Schaad, J., "Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF)", RFC 4211, DOI 10.17487/RFC4211, , <https://www.rfc-editor.org/info/rfc4211>.
+
+
[RFC5280]
+
+Cooper, D., Santesson, S., Farrell, S., Boeyen, S., Housley, R., and W. Polk, "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, , <https://www.rfc-editor.org/info/rfc5280>.
+
+
[RFC5480]
+
+Turner, S., Brown, D., Yiu, K., Housley, R., and T. Polk, "Elliptic Curve Cryptography Subject Public Key Information", RFC 5480, DOI 10.17487/RFC5480, , <https://www.rfc-editor.org/info/rfc5480>.
+
+
[RFC5639]
+
+Lochter, M. and J. Merkle, "Elliptic Curve Cryptography (ECC) Brainpool Standard Curves and Curve Generation", RFC 5639, DOI 10.17487/RFC5639, , <https://www.rfc-editor.org/info/rfc5639>.
+
+
[RFC5652]
+
+Housley, R., "Cryptographic Message Syntax (CMS)", STD 70, RFC 5652, DOI 10.17487/RFC5652, , <https://www.rfc-editor.org/info/rfc5652>.
+
+
[RFC5758]
+
+Dang, Q., Santesson, S., Moriarty, K., Brown, D., and T. Polk, "Internet X.509 Public Key Infrastructure: Additional Algorithms and Identifiers for DSA and ECDSA", RFC 5758, DOI 10.17487/RFC5758, , <https://www.rfc-editor.org/info/rfc5758>.
+
+
[RFC5958]
+
+Turner, S., "Asymmetric Key Packages", RFC 5958, DOI 10.17487/RFC5958, , <https://www.rfc-editor.org/info/rfc5958>.
+
+
[RFC6090]
+
+McGrew, D., Igoe, K., and M. Salter, "Fundamental Elliptic Curve Cryptography Algorithms", RFC 6090, DOI 10.17487/RFC6090, , <https://www.rfc-editor.org/info/rfc6090>.
+
+
[RFC6234]
+
+Eastlake 3rd, D. and T. Hansen, "US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)", RFC 6234, DOI 10.17487/RFC6234, , <https://www.rfc-editor.org/info/rfc6234>.
+
+
[RFC7748]
+
+Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves for Security", RFC 7748, DOI 10.17487/RFC7748, , <https://www.rfc-editor.org/info/rfc7748>.
+
+
[RFC8032]
+
+Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital Signature Algorithm (EdDSA)", RFC 8032, DOI 10.17487/RFC8032, , <https://www.rfc-editor.org/info/rfc8032>.
+
+
[RFC8174]
+
+Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/info/rfc8174>.
+
+
[RFC8410]
+
+Josefsson, S. and J. Schaad, "Algorithm Identifiers for Ed25519, Ed448, X25519, and X448 for Use in the Internet X.509 Public Key Infrastructure", RFC 8410, DOI 10.17487/RFC8410, , <https://www.rfc-editor.org/info/rfc8410>.
+
+
[RFC8411]
+
+Schaad, J. and R. Andrews, "IANA Registration for the Cryptographic Algorithm Object Identifier Range", RFC 8411, DOI 10.17487/RFC8411, , <https://www.rfc-editor.org/info/rfc8411>.
+
+
[X.690]
+
+ITU-T, "Information technology - ASN.1 encoding Rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)", ISO/IEC 8825-1:2015, .
+
+
+
+
+
+
+

+12.2. Informative References +

+
+
[ANSSI2024]
+
+French Cybersecurity Agency (ANSSI), Federal Office for Information Security (BSI), Netherlands National Communications Security Agency (NLNCSA), and Swedish National Communications Security Authority, Swedish Armed Forces, "Position Paper on Quantum Key Distribution", n.d., <https://cyber.gouv.fr/sites/default/files/document/Quantum_Key_Distribution_Position_Paper.pdf>.
+
+
[Bindel2017]
+
+Bindel, N., Herath, U., McKague, M., and D. Stebila, "Transitioning to a quantum-resistant public key infrastructure", , <https://link.springer.com/chapter/10.1007/978-3-319-59879-6_22>.
+
+
[BSI2021]
+
+Federal Office for Information Security (BSI), "Quantum-safe cryptography - fundamentals, current developments and recommendations", , <https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/Brochure/quantum-safe-cryptography.pdf>.
+
+
[I-D.becker-guthrie-noncomposite-hybrid-auth]
+
+Becker, A., Guthrie, R., and M. J. Jenkins, "Non-Composite Hybrid Authentication in PKIX and Applications to Internet Protocols", Work in Progress, Internet-Draft, draft-becker-guthrie-noncomposite-hybrid-auth-00, , <https://datatracker.ietf.org/doc/html/draft-becker-guthrie-noncomposite-hybrid-auth-00>.
+
+
[I-D.driscoll-pqt-hybrid-terminology]
+
+D, F., "Terminology for Post-Quantum Traditional Hybrid Schemes", Work in Progress, Internet-Draft, draft-driscoll-pqt-hybrid-terminology-01, , <https://datatracker.ietf.org/doc/html/draft-driscoll-pqt-hybrid-terminology-01>.
+
+
[I-D.guthrie-ipsecme-ikev2-hybrid-auth]
+
+Guthrie, R., "Hybrid Non-Composite Authentication in IKEv2", Work in Progress, Internet-Draft, draft-guthrie-ipsecme-ikev2-hybrid-auth-00, , <https://datatracker.ietf.org/doc/html/draft-guthrie-ipsecme-ikev2-hybrid-auth-00>.
+
+
[I-D.ietf-lamps-dilithium-certificates]
+
+Massimo, J., Kampanakis, P., Turner, S., and B. Westerbaan, "Internet X.509 Public Key Infrastructure: Algorithm Identifiers for ML-DSA", Work in Progress, Internet-Draft, draft-ietf-lamps-dilithium-certificates-04, , <https://datatracker.ietf.org/doc/html/draft-ietf-lamps-dilithium-certificates-04>.
+
+
[I-D.ietf-pquip-hybrid-signature-spectrums]
+
+Bindel, N., Hale, B., Connolly, D., and F. D, "Hybrid signature spectrums", Work in Progress, Internet-Draft, draft-ietf-pquip-hybrid-signature-spectrums-00, , <https://datatracker.ietf.org/doc/html/draft-ietf-pquip-hybrid-signature-spectrums-00>.
+
+
[I-D.massimo-lamps-pq-sig-certificates]
+
+Massimo, J., Kampanakis, P., Turner, S., and B. Westerbaan, "Algorithms and Identifiers for Post-Quantum Algorithms", Work in Progress, Internet-Draft, draft-massimo-lamps-pq-sig-certificates-00, , <https://datatracker.ietf.org/doc/html/draft-massimo-lamps-pq-sig-certificates-00>.
+
+
[I-D.ounsworth-pq-composite-kem]
+
+Ounsworth, M. and J. Gray, "Composite KEM For Use In Internet PKI", Work in Progress, Internet-Draft, draft-ounsworth-pq-composite-kem-01, , <https://datatracker.ietf.org/doc/html/draft-ounsworth-pq-composite-kem-01>.
+
+
[I-D.pala-klaussner-composite-kofn]
+
+Pala, M. and J. Klaußner, "K-threshold Composite Signatures for the Internet PKI", Work in Progress, Internet-Draft, draft-pala-klaussner-composite-kofn-00, , <https://datatracker.ietf.org/doc/html/draft-pala-klaussner-composite-kofn-00>.
+
+
[I-D.vaira-pquip-pqc-use-cases]
+
+Vaira, A., Brockhaus, H., Railean, A., Gray, J., and M. Ounsworth, "Post-quantum cryptography use cases", Work in Progress, Internet-Draft, draft-vaira-pquip-pqc-use-cases-00, , <https://datatracker.ietf.org/doc/html/draft-vaira-pquip-pqc-use-cases-00>.
+
+
[RFC3279]
+
+Bassham, L., Polk, W., and R. Housley, "Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 3279, DOI 10.17487/RFC3279, , <https://www.rfc-editor.org/info/rfc3279>.
+
+
[RFC7292]
+
+Moriarty, K., Ed., Nystrom, M., Parkinson, S., Rusch, A., and M. Scott, "PKCS #12: Personal Information Exchange Syntax v1.1", RFC 7292, DOI 10.17487/RFC7292, , <https://www.rfc-editor.org/info/rfc7292>.
+
+
[RFC7296]
+
+Kaufman, C., Hoffman, P., Nir, Y., Eronen, P., and T. Kivinen, "Internet Key Exchange Protocol Version 2 (IKEv2)", STD 79, RFC 7296, DOI 10.17487/RFC7296, , <https://www.rfc-editor.org/info/rfc7296>.
+
+
[RFC7299]
+
+Housley, R., "Object Identifier Registry for the PKIX Working Group", RFC 7299, DOI 10.17487/RFC7299, , <https://www.rfc-editor.org/info/rfc7299>.
+
+
[RFC8017]
+
+Moriarty, K., Ed., Kaliski, B., Jonsson, J., and A. Rusch, "PKCS #1: RSA Cryptography Specifications Version 2.2", RFC 8017, DOI 10.17487/RFC8017, , <https://www.rfc-editor.org/info/rfc8017>.
+
+
[RFC8446]
+
+Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 8446, DOI 10.17487/RFC8446, , <https://www.rfc-editor.org/info/rfc8446>.
+
+
[RFC8551]
+
+Schaad, J., Ramsdell, B., and S. Turner, "Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 Message Specification", RFC 8551, DOI 10.17487/RFC8551, , <https://www.rfc-editor.org/info/rfc8551>.
+
+
+
+
+
+
+
+
+

+Appendix A. Component Algorithm Reference +

+

This section provides references to the full specification of the algorithms used in the composite constructions.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 10: +Component Signature Algorithms used in Composite Constructions +
Component Signature Algorithm IDOIDSpecification
id-ML-DSA-442.16.840.1.101.3.4.3.17 + ML-DSA: [FIPS.204] +
id-ML-DSA-652.16.840.1.101.3.4.3.18 + ML-DSA: [FIPS.204] +
id-ML-DSA-872.16.840.1.101.3.4.3.19 + ML-DSA: [FIPS.204] +
id-Ed25519iso(1) identified-organization(3) thawte(101) 112 + Ed25519 / Ed448: [RFC8410] +
id-Ed448iso(1) identified-organization(3) thawte(101) id-Ed448(113) + Ed25519 / Ed448: [RFC8410] +
ecdsa-with-SHA256iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 2 + ECDSA: [RFC5758] +
ecdsa-with-SHA512iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 4 + ECDSA: [RFC5758] +
sha256WithRSAEncryptioniso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 11 + RSAES-PKCS-v1_5: [RFC8017] +
sha512WithRSAEncryptioniso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 13 + RSAES-PKCS-v1_5: [RFC8017] +
id-RSASA-PSSiso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 10 + RSASSA-PSS: [RFC8017] +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 11: +Elliptic Curves used in Composite Constructions +
Elliptic CurveIDOIDSpecification
secp256r1iso(1) member-body(2) us(840) ansi-x962(10045) curves(3) prime(1) 7 + [RFC6090] +
secp384r1iso(1) identified-organization(3) certicom(132) curve(0) 34 + [RFC6090] +
brainpoolP256r1iso(1) identified-organization(3) teletrust(36) algorithm(3) signatureAlgorithm(3) ecSign(2) ecStdCurvesAndGeneration(8) ellipticCurve(1) versionOne(1) 7 + [RFC5639] +
brainpoolP384r1iso(1) identified-organization(3) teletrust(36) algorithm(3) signatureAlgorithm(3) ecSign(2) ecStdCurvesAndGeneration(8) ellipticCurve(1) versionOne(1) 11 + [RFC5639] +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+Table 12: +Hash algorithms used in Composite Constructions +
HashIDOIDSpecification
id-sha256joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistAlgorithms(4) hashAlgs(2) 1 + [RFC6234] +
id-sha512joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistAlgorithms(4) hashAlgs(2) 3 + [RFC6234] +
+
+
+
+
+
+

+Appendix B. Component AlgorithmIdentifiers for Public Keys and Signatures +

+

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.

+

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.

+
+
+

+B.1. ML-DSA-44 +

+
+
+

+B.1.1. AlgorithmIdentifier of Public Key and Signature +

+

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

+B.2. ML-DSA-65 +

+
+
+

+B.2.1. AlgorithmIdentifier of Public Key and Signature +

+

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

+B.3. ML-DSA-87 +

+
+
+

+B.3.1. AlgorithmIdentifier of Public Key and Signature +

+

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

+B.4. RSA PSS 2048 +

+
+
+

+B.4.1. AlgorithmIdentifier of Public Key +

+

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

+B.4.2. AlgorithmIdentifier of Signature +

+

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

+B.5. RSA PSS 3072 & 4096 +

+
+
+

+B.5.1. AlgorithmIdentifier of Public Key +

+

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

+B.5.2. AlgorithmIdentifier of Signature +

+

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

+B.6. RSA PKCS 1.5 2048 +

+
+
+

+B.6.1. AlgorithmIdentifier of Public Key +

+

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

+B.6.2. AlgorithmIdentifier of Signature +

+

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

+B.7. RSA PKCS 1.5 3072 & 4096 +

+
+
+

+B.7.1. AlgorithmIdentifier of Public Key +

+

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

+B.7.2. AlgorithmIdentifier of Signature +

+

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

+B.8. EC NIST 256 +

+
+
+

+B.8.1. AlgorithmIdentifier of Public Key +

+

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

+B.8.2. AlgorithmIdentifier of Signature +

+

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

+B.9. EC NIST-384 +

+
+
+

+B.9.1. AlgorithmIdentifier of Public Key +

+

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

+B.9.2. AlgorithmIdentifier of Signature +

+

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

+B.10. EC Brainpool-256 +

+
+
+

+B.10.1. AlgorithmIdentifier of Public Key +

+

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

+B.10.2. AlgorithmIdentifier of Signature +

+

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

+B.11. EC Brainpool-384 +

+
+
+

+B.11.1. AlgorithmIdentifier of Public Key +

+

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

+B.11.2. AlgorithmIdentifier of Signature +

+

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

+B.12. Ed25519 +

+
+
+

+B.12.1. AlgorithmIdentifier of Public Key +

+

ASN.1:

+
+
+  algorithm AlgorithmIdentifier ::= {
+    algorithm id-Ed25519                        -- (1.3.101.112)
+    }
+
+
+

DER:

+
+
+  30 05 06 03 2B 65 70
+
+
+
+
+
+
+

+B.12.2. AlgorithmIdentifier of Signature +

+

ASN.1:

+
+
+  signature AlgorithmIdentifier ::= {
+    algorithm id-Ed25519                        -- (1.3.101.112)
+    }
+
+
+

DER:

+
+
+  30 05 06 03 2B 65 70
+
+
+
+
+
+
+
+
+

+B.13. Ed448 +

+
+
+

+B.13.1. AlgorithmIdentifier of Public Key +

+

ASN.1:

+
+
+  algorithm AlgorithmIdentifier ::= {
+    algorithm id-Ed448                          -- (1.3.101.113)
+    }
+
+
+

DER:

+
+
+  30 05 06 03 2B 65 71
+
+
+
+
+
+
+

+B.13.2. AlgorithmIdentifier of Signature +

+

ASN.1:

+
+
+  signature AlgorithmIdentifier ::= {
+    algorithm id-Ed448                          -- (1.3.101.113)
+    }
+
+
+

DER:

+
+
+  30 05 06 03 2B 65 71
+
+
+
+
+
+
+
+
+
+
+

+Appendix C. Samples +

+
+
+

+C.1. Explicit Composite Signature Examples +

+
+
+

+C.1.1. MLDSA44-ECDSA-P256-SHA256 Public Key +

+
+
+-----BEGIN PUBLIC KEY-----
+MIIFfzANBgtghkgBhvprUAgBBAOCBWwAMIIFZwSCBSAA9DTYoQys3PVrayi9zTam
+kTzpqf6vuNI5+UaMENvnrq3Rps5LmiQ5gSXaQMu0HYjVpCEQVQWl/8nbJavELelk
+gCVn528ndGBQUChAnffxhRdxgaFmOb2SEySTnHIh6QO1UFPO2kGiGx9zU6F9xZGK
+FZFBm8B076UvRHCbaw+BTvu4o+Kg1irOFRPI3hLN4ku3si2nwWSZNhDoiLaPTfJe
+7TRziBznEyrnSV3I2Xn7QdKxIWUFOwPXWBnnk/FGG/A2HdxGpiqIWxZ0gNLNcb+j
+Cz6CWZSJhoOLoJWdOD5zyojPPrH5iFIGM96p0PZ4mv5PhmZDPA/RTIg/PcG1rywn
+OJYqAsazntGyEhHEFLRe8QYOVEbiBuv20tNzkFaaulQRdW+boStcW8NefSkKG/9D
+FgGnyR87W4Z/ieHEyIva4FBamvRm60xrblAyI0Z7II4l7LTStDzL/ghFq06RVria
+au+mY5laq8rAGmRbWkUxNeKeGOVHxjGFYB3uaAkHef0o7tSMMkCSSjiDQlNk5ReQ
+xgJMkuTRE7YRN1bDXv/0uPPjg7zfa3M0tMCD9wTXFhIk04HDLVV5WAsH0EK6Nytd
+gqnsjGCwfZb2+Fw/QytBei50DUBHpIG3da4dBrxcaRTMiQPzPzL8FaDascE0ZIJM
+9ilKvxgq02ryEHLGALFN8eZD1r6zq43KFlRzaynWBWqJ27MiUzK2dk8oC+dH5cz6
++xGXAhLJ+MipoO9k9dLg8re3dOAufsKaY5DLuuluo7dO6IF7rG9xblbiIzWpyfu3
+7kJvUdwk36QzsQNGsxpELk65LaWYnaebV7wKyIaaniLysuNCG0dIcAicxRNLgpX9
+jic5pi+BzlJI1IuPk+DqOG57pNnU7lTg3op08MUslNyeUH5yaag8DNsLG7uZHzvx
+jcqffaqcqS+v6FVmbV2tDF07jn8a754Fnn/QNgsNcdfw9Ov4w7Ty+q5nT2wg2Lsg
+bAuzN6b6FiWEuHHMw/I5aIL5cLj2GUpjHtlUHL4KEHpxZ2J5jbBgeqpTWEy1TuPQ
+R34lryVASmue/kmk2liah6wNK5RXlGa8uidBm7RT8b5SkIMsrosLx9KpC5lKobzn
+8ttK1NSy0ZuMDw9wtnePUbROGjEuw5Na/K1VgO68dATj/7rscvz7C+ZuQORrt88X
++OZmoyw+fEDWAocDnhzI6rJIHLPB0p+rSJ8iSKZpFZYeIy+CD0t6E98RJQHll8BJ
+lLyJiMT0xAyelOMzrCJayHxD01aLw6LLOddFbiIRMq4lni5Ha4noWmdO2C80xy3A
+jskUEK5sbD8KFl910JUHwaGvb/gDCqW+n10mRa9+cB0tRVjo5OZeSiB01Bkagu7a
+f+bRv2i8cBa2ZoGVyW3xFFFhIkHzLgHaU+RLaGwJDe0qxKtwKYz5c/YpAsH+lodM
+NV2E/PzHtNY+sg0PijblN6IVO+yiLkxJspKIjf0I1+s8hczhz3QkLRed7dU2nvID
+puJQfgraKyS6rawlqLyWo66/PDtdd3tngw50wnDNZik0hz/usDc6o7IN5J9ha7XO
+0vZQluMb9R5l+W6RLD2nRd4mlKVqm/Yfq0R8PKoIh8f7uLVk1kbN4prkfpsokvqR
+rli5h4URG7WCNvp4bg/i1Ix/CEEjH56LRj83dhVB0O6WXorrZMAChQShMhwnEgeS
+USaB5au7xRAM+9fWvF9cmju3hXSTT1zv0owyoSgp36OHcy2HzwZXxA7YWtRDbhMX
+BEEEkSZvSVDhZlBXhAkaTBxlrRt624URpHlDVrd0njnPiR92XNs+NTjjvAImETMh
+EPbQ/KPspugi6gkrLFhcmy/OiA==
+-----END PUBLIC KEY-----
+
+
+
+
+
+
+

+C.1.2. MLDSA44-ECDSA-P256 Private Key +

+
+
+-----BEGIN PRIVATE KEY-----
+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
+pugi6gkrLFhcmy/OiA==
+-----END PRIVATE KEY-----
+
+
+
+
+
+
+
+

+C.1.3. MLDSA44-ECDSA-P256 Self-Signed X509 Certificate +

+
+
+-----BEGIN CERTIFICATE-----
+MIIP9zCCBhigAwIBAgIUUFXlmVgQD4nQC6Tzr4OlRKxVYYQwDQYLYIZIAYb6a1AI
+AQQwEjEQMA4GA1UEAwwHb3FzdGVzdDAeFw0yMzEyMTkxOTIzNDBaFw0yNDEyMTgx
+OTIzNDBaMBIxEDAOBgNVBAMMB29xc3Rlc3QwggV/MA0GC2CGSAGG+mtQCAEEA4IF
+bAAwggVnBIIFIAD0NNihDKzc9WtrKL3NNqaRPOmp/q+40jn5RowQ2+eurdGmzkua
+JDmBJdpAy7QdiNWkIRBVBaX/ydslq8Qt6WSAJWfnbyd0YFBQKECd9/GFF3GBoWY5
+vZITJJOcciHpA7VQU87aQaIbH3NToX3FkYoVkUGbwHTvpS9EcJtrD4FO+7ij4qDW
+Ks4VE8jeEs3iS7eyLafBZJk2EOiIto9N8l7tNHOIHOcTKudJXcjZeftB0rEhZQU7
+A9dYGeeT8UYb8DYd3EamKohbFnSA0s1xv6MLPoJZlImGg4uglZ04PnPKiM8+sfmI
+UgYz3qnQ9nia/k+GZkM8D9FMiD89wbWvLCc4lioCxrOe0bISEcQUtF7xBg5URuIG
+6/bS03OQVpq6VBF1b5uhK1xbw159KQob/0MWAafJHztbhn+J4cTIi9rgUFqa9Gbr
+TGtuUDIjRnsgjiXstNK0PMv+CEWrTpFWuJpq76ZjmVqrysAaZFtaRTE14p4Y5UfG
+MYVgHe5oCQd5/Sju1IwyQJJKOINCU2TlF5DGAkyS5NETthE3VsNe//S48+ODvN9r
+czS0wIP3BNcWEiTTgcMtVXlYCwfQQro3K12CqeyMYLB9lvb4XD9DK0F6LnQNQEek
+gbd1rh0GvFxpFMyJA/M/MvwVoNqxwTRkgkz2KUq/GCrTavIQcsYAsU3x5kPWvrOr
+jcoWVHNrKdYFaonbsyJTMrZ2TygL50flzPr7EZcCEsn4yKmg72T10uDyt7d04C5+
+wppjkMu66W6jt07ogXusb3FuVuIjNanJ+7fuQm9R3CTfpDOxA0azGkQuTrktpZid
+p5tXvArIhpqeIvKy40IbR0hwCJzFE0uClf2OJzmmL4HOUkjUi4+T4Oo4bnuk2dTu
+VODeinTwxSyU3J5QfnJpqDwM2wsbu5kfO/GNyp99qpypL6/oVWZtXa0MXTuOfxrv
+ngWef9A2Cw1x1/D06/jDtPL6rmdPbCDYuyBsC7M3pvoWJYS4cczD8jlogvlwuPYZ
+SmMe2VQcvgoQenFnYnmNsGB6qlNYTLVO49BHfiWvJUBKa57+SaTaWJqHrA0rlFeU
+Zry6J0GbtFPxvlKQgyyuiwvH0qkLmUqhvOfy20rU1LLRm4wPD3C2d49RtE4aMS7D
+k1r8rVWA7rx0BOP/uuxy/PsL5m5A5Gu3zxf45majLD58QNYChwOeHMjqskgcs8HS
+n6tInyJIpmkVlh4jL4IPS3oT3xElAeWXwEmUvImIxPTEDJ6U4zOsIlrIfEPTVovD
+oss510VuIhEyriWeLkdriehaZ07YLzTHLcCOyRQQrmxsPwoWX3XQlQfBoa9v+AMK
+pb6fXSZFr35wHS1FWOjk5l5KIHTUGRqC7tp/5tG/aLxwFrZmgZXJbfEUUWEiQfMu
+AdpT5EtobAkN7SrEq3ApjPlz9ikCwf6Wh0w1XYT8/Me01j6yDQ+KNuU3ohU77KIu
+TEmykoiN/QjX6zyFzOHPdCQtF53t1Tae8gOm4lB+CtorJLqtrCWovJajrr88O113
+e2eDDnTCcM1mKTSHP+6wNzqjsg3kn2Frtc7S9lCW4xv1HmX5bpEsPadF3iaUpWqb
+9h+rRHw8qgiHx/u4tWTWRs3imuR+myiS+pGuWLmHhREbtYI2+nhuD+LUjH8IQSMf
+notGPzd2FUHQ7pZeiutkwAKFBKEyHCcSB5JRJoHlq7vFEAz719a8X1yaO7eFdJNP
+XO/SjDKhKCnfo4dzLYfPBlfEDtha1ENuExcEQQSRJm9JUOFmUFeECRpMHGWtG3rb
+hRGkeUNWt3SeOc+JH3Zc2z41OOO8AiYRMyEQ9tD8o+ym6CLqCSssWFybL86IoyEw
+HzAdBgNVHQ4EFgQUhcS/LyOtUFUrF+FJxoSERDrtcXQwDQYLYIZIAYb6a1AIAQQD
+ggnIADCCCcMDggl1AMX5C7IKC8y1AX2ANKQWQWycGovPVFkiv+qctjfWt0jaErT1
+XnR80WfR3XX1rIIZ6jG1ulkLdUGx2tFcu8Qeb0umxvYWYC6htzvGw+bjxcRm0DES
+d+bkwWIBzdK23b9WqBNLqvzNccgAPXvP6PwrLxCz+sEnWcCDDqgeHphbYf3vzedR
+uMvIsRYqGO09qt/tWu3JG5nwGiX+6t/YFgE5knii3sXdlHWZQ+nSAnekc2sgtCV4
+cA0Lg01kBi+AZGelNuVK3EtgKJ0VTP5DQn5D1dLn/RGbqlMngsNs4xUlIFyvnJ8l
+UZp6+VtfE2fWRDW4yQ4ob4Ed2KEWMtWa1GaFtIfUjDGyqYLwMOJUjE5fmhLxioqS
+pk/cST+AaK5iNZzlDRC220hGOIOsiyf7UQKw+bFTENVqyXrYgTmns9zg+mc5KeZj
+hE6IMFMtkQyJnRVWUL1eRviu1JL90Tcmvw1gvKdGFPDe4A7FWx0tDyAVY1wVd/sd
+Lylt5QvBaIqgrtc4rDeS5pHGNdgy3zsi1YYpet5pyfQwZCtmqRggBDTCmH7nTfrV
+rXDbsUm0euCK+YMwbi6DbpDV5mQrUqDX1MGk0RFDzlKRtTWrvxhhCVLgV/l/ZVgi
+bEuFQg6POuCn0IA2jFJyza2TK8p82RAZbcvtM8XdJVhM0okKIRyi/8lw2kbX/p5L
+l7vMmD0xPOezi2FQMxev9460Seb6FtOlvFptsLoTw4grUTQHl9brftzPAhVmUBBY
+wGffj4rl70m5fHZzL3YXpxkr4jlqG8tKJc9370Emh9xXV4KMuo2Us+vnRUN+9QeX
+tvDaG70jX3+760hTl4qDqMWfXY1nXhCeHWGCCmn2Yq8ULdYtIjZIMcHCXAvy68jv
+7vkM5xQzDdgRMXop1Pj3aZLRI0boQ4OuR16sxmmpPUIGanfmDbvrdBBNucNcDYDy
+BU5QpuCEZ8yHs94TSWLO9KP9i+IlL35TGG2zIbwbhI15HKOWzZU9ncoC2BOF6zhw
+u60tdBvy5O8pinjMBQKVDPMbrIKjfCUK4f0YQ1/Bk4ssPogQNk3sRYJqWZ0MvElk
+q3674KpN0OVB/kJFdAB1Uqpk4ARnZ7SsO8B/6u7rRNdthHSRsu4Fhe31EE0VUoUh
+x3GQM/7gTk9El2jDBlZxwEpPEtTqARgp0ad6EJnMcIW0PEKr56HUFqfxKVjJWagV
+fhtKzskghDS5lRpDY3vPq1Cq8qSl1ojcij5zm0BxI/cJIjh41RnW5D3kjt3r3Fzo
+an4pPZkXzZm9/iGAoFAy7BThfg4PXVq2BMCNZPdASQjIiPEWklylW9iX+g/12iCV
+Gy7F/JOG0SOH5/2d12gRDDiwn6k1KDwKPDa9htaPBGaNNXLIpr/Wb68GtTkNs1TG
+e7Sf9aigE9BtTGgeniJ1Gn/aV9LGQFqRRQsnqB98bMKABZi0RjZ9yebLj6lwSFXU
+pTdq/YNnBGwAmOm/HXzksOHJOjh20iDPhLjfMB6Fi+XkWVZ0TWzV2ZwOtM56tY+a
+QoauIHR30QYtGZMI38HpVeLSj+iNUEKbE6kY5c69Bjalwa1pCqb9aP5VnKOkMA+3
+qQ6c2ggxgudchBSXK/BZw4n4l7IvHu9wEMvsVh9mt/SAGkK53k28RDkNtX7+jfJR
+5/q7Qp626ts6Sc8rG6BmZoJIJnUXjeOcqlAoDXYRGuxCw6Jm91DL9j4t3m0bQhub
+hUt9diovZ/hw2hOng+xT/oSVvauPHFpxSUu3NVcncjIljD+0U3y6cn9VnE7oFNSU
+G3HadJlVTZncMrWYo954Wt3cwNA1Opcq+5Tlu76laOWJ/4eRcvOwmxrKZHUW8Tmu
+qPPsAOTagFmMxOBkLzIaq39SZxHkw61SdJxXlKAtmZYnNvwT2NGpauF6P6G0FHAO
+Ucfu/DDpAdKZ/GGpVxC2ttfDCzO3iya139M5fbg32RpI0q18swYFhUAqszdAPihc
+4lpCGw9JdrO8i1JhB+IORJegJRPs08DYUNv7nzSbOi03iYY/QHtGw7ka5AGLfkY8
+ajiLzlXwI2xMB6XBqUsAH2VxTRPJ3N/kGTzFvhiGBOYx8+jO/FqEa5E8+cafU+kW
+m9/RCpumizdVzrH5MiFh0NI9iUegdHs+hDW6GDpA3VpGi5MmmeE6Ck8UyOzDNnY9
+t53b9QxuwiYgDdw9z0KpYtGt7tRGd0qDARky8uRQZ6HFS4sNXlUFiAG9ko62CFTD
+WCALXmhtqvPcjfiDDL6qMRLevi31YnhAua/Kb0Mhja+KDM/UwRIVaB3WHhulzn7U
+pFQG0vVnwb0+VWhKsrWVJaJw1Eg9tmy5HJBsnmne+A2qG1ehBFCWJtV2MvyK8H9G
+BxaJbq7PpPlte9ID53apvkhyvag843Ar/pOiTc8J6xncJa6w+mVViUi47/ZkZCkU
+lipgCv1ZqZhQG/CERDxACulTa+0S8nO+g5CBpW6cuQVa052nRV/qhVUkQ9yzm0Pw
+vUOftuX9b/W5QXas/ysUwPAeGd2XPBmK5lByyYaW14d6GBJGmyNYv7vjrbL1xeJr
+smjnaRPipOvwEh6IE1OdsrlqfjG27+aXgfZWbCW28DAeTK7ilLB3ubyvPcoTrmX3
+DxM7OKF+MT6PAtqSM92l76PfECvyUfv/Rf+cSF/CleTIM7xfe7IOwgxPPdMEw2rH
+uS/CeJMsdBW8DwQyRcgK5h17zyaRqztATSAQK3MQ/B2f7MoXf3Z9oLpgqyBT7aiL
+/XdYk8UipIyuRK4Y9Cj2UNc3DgYhzFPQY9SO3gO483uC8Tqc2IyoKaGsNS1rWY/W
+rleqqraEmlMN9NToAa4ftZvqdWQLqH7sJcCQ1EzfbrkyrTKgjRmvRyA4n3t9Yjry
+k+ZI3xkgrUj90xfETb+Vx/JrbegfbfZ70w7yTRnSDB01cbQP4rjI2uGZVRCxXJal
+XRtaOUey+c0ZeIRp2aPrYP2DesL0Fmlc/ooSRgC8f+QHJU/7Js+WYuK8MVK/vil9
+J9FgwoCJImfRzkA9KXYaix/f4XgvFLopb6kAszAff5Zmpcq72gwWv+nEE/3M78PO
+zs9k5+wt65W3h4zelAIUM5hfgmJj4vvq53AeZP42AhcSV+bgsPg2xGM0Im7WAQ0P
+IScqN1pepq7T9/0eMEhRdXiKj5ufub/Nztfc+Ao8RVVidXt8oMnv9vf8FxgfLkpj
+dn6Mjq7Y5OXz9AAAAAAAAAAAAAAAAAAAAAAAAAAOHy09A0gAMEUCIQDD13F6CblJ
+Ll2dp7GZtR5tyKObPtvUc1s16fP3g7xhvgIga8IVcv0k6DUIApPztCsP/UByrm8k
+1nbSe/5A4mF87n0=
+-----END CERTIFICATE-----
+
+
+
+
+
+
+
+
+
+
+
+

+Appendix D. Implementation Considerations +

+
+
+

+D.1. FIPS certification +

+

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.

+

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.

+

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.

+
+
+
+
+

+D.2. Backwards Compatibility +

+

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.

+

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 [RFC8446] and IKEv2 [RFC7296], to non-negotiated asynchronous protocols such as S/MIME signed email [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 [RFC5652] signed structures. Composite simplifies the protocol design work because it can be implemented as a signature algorithm that fits into existing systems.

+
+
+

+D.2.1. Hybrid Extensions (Keys and Signatures) +

+

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.

+
+
+
+
+
+
+
+
+

+Appendix E. Intellectual Property Considerations +

+

The following IPR Disclosure relates to this draft:

+

https://datatracker.ietf.org/ipr/3588/

+
+
+
+
+

+Appendix F. Contributors and Acknowledgements +

+

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:

+

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) and +林邦曄 (Austin Lin, Chunghwa Telecom)

+

We especially want to recognize the contributions of Dr. Britta Hale who has helped immensly with strengthening the signature combiner construction, and with analyzing the scheme with respect to EUF-CMA and Non-Separability properties.

+

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.

+

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" - [RFC8411].

+
+
+

+F.1. Making contributions +

+

Additional contributions to this draft are welcome. Please see the working copy of this draft at, as well as open issues at:

+

https://github.com/lamps-wg/draft-composite-sigs

+
+
+
+
+
+
+

+Authors' Addresses +

+
+
Mike Ounsworth
+
Entrust Limited
+
2500 Solandt Road – Suite 100
+
+Ottawa, Ontario K2K 3G5 +
+
Canada
+ +
+
+
John Gray
+
Entrust Limited
+
2500 Solandt Road – Suite 100
+
+Ottawa, Ontario K2K 3G5 +
+
Canada
+ +
+
+
Massimiliano Pala
+
OpenCA Labs
+
+New York City, New York,
+
United States of America
+ +
+
+
Jan Klaussner
+
Bundesdruckerei GmbH
+
Kommandantenstr. 18
+
+10969 Berlin +
+
Germany
+ +
+
+
Scott Fluhrer
+
Cisco Systems
+ +
+
+
+ + + diff --git a/6-CompactPrivateKey/draft-ietf-lamps-pq-composite-sigs.txt b/6-CompactPrivateKey/draft-ietf-lamps-pq-composite-sigs.txt new file mode 100644 index 0000000..add0eb5 --- /dev/null +++ b/6-CompactPrivateKey/draft-ietf-lamps-pq-composite-sigs.txt @@ -0,0 +1,3301 @@ + + + + +LAMPS M. Ounsworth +Internet-Draft J. Gray +Intended status: Standards Track Entrust +Expires: 21 April 2025 M. Pala + OpenCA Labs + J. Klaussner + Bundesdruckerei GmbH + S. Fluhrer + Cisco Systems + 18 October 2024 + + + Composite ML-DSA for use in Internet PKI + draft-ietf-lamps-pq-composite-sigs-latest + +Abstract + + This document introduces a set of signature schemes that use pairs of + cryptographic elements such as public keys and signatures to combine + their security properties. These schemes effectively mitigate risks + associated with the adoption of post-quantum cryptography and are + fully compatible with existing X.509, PKIX, and CMS data structures + and protocols. This document defines thirteen specific pairwise + combinations, called ML-DSA Composite Schemes, that blend ML-DSA with + traditional algorithms such as RSA, 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 would otherwise use ML-DSA, but wants the protection + against breaks or catastrophic bugs in ML-DSA. + +Status of This Memo + + This Internet-Draft is submitted in full conformance with the + provisions of BCP 78 and BCP 79. + + Internet-Drafts are working documents of the Internet Engineering + Task Force (IETF). Note that other groups may also distribute + working documents as Internet-Drafts. The list of current Internet- + Drafts is at https://datatracker.ietf.org/drafts/current/. + + Internet-Drafts are draft documents valid for a maximum of six months + and may be updated, replaced, or obsoleted by other documents at any + time. It is inappropriate to use Internet-Drafts as reference + material or to cite them other than as "work in progress." + + This Internet-Draft will expire on 21 April 2025. + +Copyright Notice + + Copyright (c) 2024 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents (https://trustee.ietf.org/ + license-info) in effect on the date of publication of this document. + Please review these documents carefully, as they describe your rights + and restrictions with respect to this document. Code Components + extracted from this document must include Revised BSD License text as + described in Section 4.e of the Trust Legal Provisions and are + provided without warranty as described in the Revised BSD License. + +Table of Contents + + 1. Changes in -03 + 2. Introduction + 2.1. Conventions and Terminology + 3. Composite Signatures Schemes + 3.1. Composite Schemes PreHashing + 4. Cryptographic Primitives + 4.1. Key Generation + 4.2. Pure Signature Generation + 4.2.1. Composite-ML-DSA.Sign + 4.2.2. Composite-ML-DSA.Verify + 4.3. PreHash-Signature Generation + 4.3.1. HashComposite-ML-DSA-Sign signature mode + 4.3.2. HashComposite-ML-DSA-Verify + 5. Composite Key Structures + 5.1. pk-CompositeSignature + 5.2. CompositeSignaturePublicKey + 5.3. CompositeSignaturePrivateKey + 5.4. Encoding Rules + 5.5. Key Usage Bits + 6. Composite Signature Structures + 6.1. sa-CompositeSignature + 6.2. CompositeSignatureValue + 7. Algorithm Identifiers + 7.1. Domain Separators + 7.2. Notes on id-MLDSA44-RSA2048-PSS-SHA256 + 7.3. Notes on id-MLDSA65-RSA3072-PSS-SHA512 + 7.4. Notes on id-MLDSA65-RSA4096-PSS-SHA512 + 8. Use in CMS + 8.1. Underlying Components + 8.2. SignedData Conventions + 8.3. Certificate Conventions + 8.4. SMIMECapabilities Attribute Conventions + 9. ASN.1 Module + 10. IANA Considerations + 10.1. Object Identifier Allocations + 10.1.1. Module Registration - SMI Security for PKIX Module + Identifier + 10.1.2. Object Identifier Registrations - SMI Security for + PKIX Algorithms + 11. Security Considerations + 11.1. Non-separability and EUF-CMA + 11.2. Key Reuse + 11.3. Policy for Deprecated and Acceptable Algorithms + 12. References + 12.1. Normative References + 12.2. Informative References + Appendix A. Component Algorithm Reference + Appendix B. Component AlgorithmIdentifiers for Public Keys and + Signatures + B.1. ML-DSA-44 + B.1.1. AlgorithmIdentifier of Public Key and Signature + B.2. ML-DSA-65 + B.2.1. AlgorithmIdentifier of Public Key and Signature + B.3. ML-DSA-87 + B.3.1. AlgorithmIdentifier of Public Key and Signature + B.4. RSA PSS 2048 + B.4.1. AlgorithmIdentifier of Public Key + B.4.2. AlgorithmIdentifier of Signature + B.5. RSA PSS 3072 & 4096 + B.5.1. AlgorithmIdentifier of Public Key + B.5.2. AlgorithmIdentifier of Signature + B.6. RSA PKCS 1.5 2048 + B.6.1. AlgorithmIdentifier of Public Key + B.6.2. AlgorithmIdentifier of Signature + B.7. RSA PKCS 1.5 3072 & 4096 + B.7.1. AlgorithmIdentifier of Public Key + B.7.2. AlgorithmIdentifier of Signature + B.8. EC NIST 256 + B.8.1. AlgorithmIdentifier of Public Key + B.8.2. AlgorithmIdentifier of Signature + B.9. EC NIST-384 + B.9.1. AlgorithmIdentifier of Public Key + B.9.2. AlgorithmIdentifier of Signature + B.10. EC Brainpool-256 + B.10.1. AlgorithmIdentifier of Public Key + B.10.2. AlgorithmIdentifier of Signature + B.11. EC Brainpool-384 + B.11.1. AlgorithmIdentifier of Public Key + B.11.2. AlgorithmIdentifier of Signature + B.12. Ed25519 + B.12.1. AlgorithmIdentifier of Public Key + B.12.2. AlgorithmIdentifier of Signature + B.13. Ed448 + B.13.1. AlgorithmIdentifier of Public Key + B.13.2. AlgorithmIdentifier of Signature + Appendix C. Samples + C.1. Explicit Composite Signature Examples + C.1.1. MLDSA44-ECDSA-P256-SHA256 Public Key + C.1.2. MLDSA44-ECDSA-P256 Private Key + C.1.3. MLDSA44-ECDSA-P256 Self-Signed X509 Certificate + Appendix D. Implementation Considerations + D.1. FIPS certification + D.2. Backwards Compatibility + D.2.1. Hybrid Extensions (Keys and Signatures) + Appendix E. Intellectual Property Considerations + Appendix F. Contributors and Acknowledgements + F.1. Making contributions + Authors' Addresses + +1. Changes in -03 + + * Added the ASN.1 encodings for the component public keys and + signature algorithm identifiers + + * Compacted CompositeSignaturePrivateKey to SEQUENCE SIZE (2) OF + OCTET STRING instead of OneAsymmetricKey to remove redundency + + * ASN.1 Module changes: + + - Renamed the module from Composite-Signatures-2023 -> Composite- + MLDSA-2024 + + - Simplified the ASN.1 module to make it more compiler-friendly + (thanks Carl!) -- should not affect wire encodings. + + * Added Pre-Hash and Pure modes and changed the Message format to + align with FIPS-204. This breaks backwards compatibility will all + previous versions + + * Added support for the ML-DSA context String, and use the Composite + Domain as the context for the underlying ML-DSA component + algorithm. + + * Updated the OID table for new Pre-Hash OIDs and added them to the + IANA section + + * Updated Use in CMS section to reflect content is hashed and pure + Composite ML-DSA should be used. + + * Updated Security Considerations about Non-separability, EUF-CMA + and key reuse. + +2. Introduction + + 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. + + 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. + + 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 + [I-D.driscoll-pqt-hybrid-terminology]. + + 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 [BSI2021]. + + 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. + +2.1. Conventions and Terminology + + 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 [RFC2119] [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. + + This document is consistent with the terminology defined in + [I-D.driscoll-pqt-hybrid-terminology]. In addition, the following + terminology is used throughout this document: + + ALGORITHM: A standardized cryptographic primitive, as well as any + ASN.1 structures needed for encoding data and metadata needed to use + the algorithm. This document is primarily concerned with algorithms + for producing digital signatures. + + BER: Basic Encoding Rules (BER) as defined in [X.690]. + + CLIENT: Any software that is making use of a cryptographic key. This + includes a signer, verifier, encrypter, decrypter. + + COMPONENT ALGORITHM: A single basic algorithm which is contained + within a composite algorithm. + + COMPOSITE ALGORITHM: An algorithm which is a sequence of two + component algorithms, as defined in Section 5. + + DER: Distinguished Encoding Rules as defined in [X.690]. + + LEGACY: For the purposes of this document, a legacy algorithm is any + cryptographic algorithm currently in use which is not believed to be + resistant to quantum cryptanalysis. + + PKI: Public Key Infrastructure, as defined in [RFC5280]. + + POST-QUANTUM ALGORITHM: Any cryptographic algorithm which is believed + to be resistant to classical and quantum cryptanalysis, such as the + algorithms being considered for standardization by NIST. + + PUBLIC / PRIVATE KEY: The public and private portion of an asymmetric + cryptographic key, making no assumptions about which algorithm. + + SIGNATURE: A digital cryptographic signature, making no assumptions + about which algorithm. + + STRIPPING ATTACK: An attack in which the attacker is able to + downgrade the cryptographic object to an attacker-chosen subset of + original set of component algorithms in such a way that it is not + detectable by the receiver. For example, substituting a composite + public key or signature for a version with fewer components. + +3. Composite Signatures Schemes + + The engineering principle behind the definition of Composite schemes + is to define a new family of algorithms that combines the use of + cryptographic operations from two different ones: ML-DSA one and a + traditional one. The complexity of combining security properties + from the selected two algorithms is handled at the cryptographic + library or cryptographic module, thus minimal changes are expected at + the application or protocol level. Composite schemes are fully + compatible with the X.509 model: composite public keys, composite + private keys, and ciphertexts can be carried in existing data + structures and protocols such as PKCS#10 [RFC2986], CMP [RFC4210], + X.509 [RFC5280], CMS [RFC5652], and the Trust Anchor Format + [RFC5914]. + + Composite schemes are defined as cryptographic primitives that + consists of three algorithms: + + * KeyGen() -> (pk, sk): A probabilistic key generation algorithm, + which generates a public key pk and a secret key sk. + + * Sign(sk, Message) -> (signature): A signing algorithm which takes + as input a secret key sk and a Message, and outputs a signature + + * Verify(pk, Message, signature) -> true or false: 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. + + A composite signature allows the security properties of the two + underlying algorithms to be combined via standard signature + operations such as generation and verify and can be used in all + applications that use signatures without the need for changes in data + structures or protocol messages. + +3.1. Composite Schemes PreHashing + + Composite schemes' signature generation process and composite + signature verification process are designed to provide security + properties meant to address specific issues related to the use + multiple algorithms and they require the use of pre-hasing. In + Composite schemes, the value of the DER encoding of the selected + signature scheme is concatenated with the calculated Hash over the + original message. + + The output is then used as input for the Sign() and Verify() + functions. + +4. Cryptographic Primitives + +4.1. Key Generation + + To generate a new keypair for Composite schemes, the KeyGen() -> (pk, + sk) 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. + + The generated public key structure is described in Section 5.2, while + the corresponding composite secret key structure is defined in + Section 5.3. + + The following process is used to generate composite keypair values: + + KeyGen() -> (pk, sk) + + Input: + sk_1, sk_2 Private keys for each component. + + pk_1, pk_2 Public keys for each component. + + A1, A2 Component signature algorithms. + + Output: + (pk, sk) The composite keypair. + + Function KeyGen(): + + (pk_1, sk_1) <- A1.KeyGen() + (pk_2, sk_2) <- A2.KeyGen() + + if NOT (pk_1, sk_1) or NOT (pk_2, sk_2): + // Component key generation failure + return NULL + + (pk, sk) <- encode[(pk_1, sk_1), (pk_2, sk_2)] + if NOT (pk, sk): + // Encoding failure + return False + + // Success + return (pk, sk) + + Figure 1: Composite KeyGen(pk, sk) + + The key generation functions MUST be executed for both algorithms. + Compliant parties MUST NOT use or import component keys that are used + in other contexts, combinations, or by themselves (i.e., not only in + X.509 certificates). + +4.2. Pure Signature Generation + + Composite schemes' signatures provide important properties for multi- + key environments such as non-separability and key-binding. For more + information on the additional security properties and their + applicability to multi-key or hybrid environments, please refer to + [I-D.ietf-pquip-hybrid-signature-spectrums] and the use of labels as + defined in [Bindel2017] + + A composite signature's value MUST include two signature components + and MUST be in the same order as the components from the + corresponding verification public key. + +4.2.1. Composite-ML-DSA.Sign + + This mode mirrors ML-DSA.Sign(sk, M, ctx) defined in Section 5.2 of + [FIPS.204]. The composite domain separator "Domain" Section 7.1 is + concatenated with the length of the context string ctx in bytes, the + context string ctx, and finally the un-hashed message M . + + The following process is used to generate pure composite signature + values and mirrors Algorithm 2 in [FIPS.204]. + +Composite-ML-DSA.Sign (sk, M, ctx) -> (signature) +Explicit Input: + sk Composite private key conisting 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' by concatenating the Domain identifier (i.e., the DER encoding of the Composite signature algorithm identifier) with the length of ctx, the value ctx and the original message M + + M' := Domain || len(ctx) || ctx || M + + 3. Separate the private key into component keys. Note, the exact storage format for composite private keys may be as described in this document, or may be implementation-specific. + + (sk1, sk2) := Unmarshal(sk) + + 4. Generate the 2 component signatures independently, by calculating the signature over M' + according to their algorithm specifications that might involve the use of the hash-n-sign paradigm. + + s1 := ML-DSA.Sign( sk1, M', ctx=Domain ) + s2 := Trad.Sign( sk2, M' ) + + The Domain is used as the context separator for the ML-DSA.Sign component. + + If either ML-DSA.Sign() or Trad.Sign() return an error, then this process must return an error. + + 5. Encode each component signature S1 and S2 into a BIT STRING + according to its algorithm specification. + + signature := Sequence { s1, s2 } + + 6. Output signature + + return signature + + Figure 2: Composite-ML-DSA-Sign(sk, M, ctx) + + It is possible to construct CompositePrivateKey(s) to generate + signatures from component keys stored in separate software or + hardware keystores. Variations in the process to accommodate + particular private key storage mechanisms are considered to be + conformant to this document so long as it produces the same output as + the process sketched above. + +4.2.2. Composite-ML-DSA.Verify + + This mode mirrors ML-DSA.Verify(pk, M, signature, ctx) defined in + Section 5.3 of [FIPS.204]. Verification of a composite signature + involves reconstructing the M' message by concatenating the composite + domain separator "Domain" Section 7.1 with the length of the context + string ctx in bytes, the context string ctx, and finally the original + message M . + + Compliant applications MUST output "Valid signature" (true) if and + only if all component signatures were successfully validated, and + "Invalid signature" (false) otherwise. + + The following process is used to perform this verification. + +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 (S1 and S2) 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 Procedure: + + 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' by concatenating the Domain identifier (i.e., the DER encoding of the Composite signature algorithm identifier) with the length of ctx, the value ctx and the original 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" + + Figure 3: Composite-ML-DSA-Verify(pk, Message, signature, Context) + + It is possible to construct CompositePublicKey(s) to verify + signatures from component keys stored in separate software or + hardware keystores. Variations in the process to accommodate + particular private key storage mechanisms are considered to be + conformant to this document so long as it produces the same output as + the process sketched above. + +4.3. PreHash-Signature Generation + + This mode mirrors HashML-DSA defined in Section 5.4 of [FIPS.204]. + + In the pre-hash mode the Domain separator Section 7.1 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. After that, the signature process + for each component algorithm is invoked and the values are then + placed in the CompositeSignatureValue structure defined in + Section 6.1. + + 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. + + The following process is used to generate composite signature values. + +4.3.1. HashComposite-ML-DSA-Sign signature mode + + This mode mirrors HashML-DSA.Sign(sk, M, ctx, PH) defined in + Section 5.4.1 of [FIPS.204]. + + In the pre-hash mode the Domain separator Section 7.1 is + concatendated with the length of the context in bytes, the context, + an additional DER encoded value that represents the Hash and finally + the pre-hashed message PH(M). + +HashComposite-ML-DSA.Sign (sk, M, ctx, PH) -> (signature) + +Explicit Input: + 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' by concatenating the Domain identifier (i.e., the DER encoding of the Composite signature algorithm identifier) with the length of the context, the Context, the HashOID and the Hash of the Message. + + M' := Domain || len(ctx) || ctx || HashOID || PH(M) + + 3. Separate the private key into component keys. Note, the exact storage format for composite private keys may be as described in this document, or may be implementation-specific. + + (sk1, sk2) := Unmarshal(sk) + + 4. Generate the 2 component signatures independently, by calculating the signature over M' + according to their algorithm specifications that might involve the use of the hash-n-sign paradigm. + + s1 := ML-DSA.Sign( sk1, M', ctx=Domain ) + s2 := Trad.Sign( sk2, M' ) + + The Domain is used as the context separator for the ML-DSA.Sign component. + + 5. Encode each component signature S1 and S2 into a BIT STRING + according to its algorithm specification. + + signature := Sequence { s1, s2 } + + 6. Output signature + + return signature + + Figure 4: HashComposite-ML-DSA-Sign(sk, M, ctx, PH) + + It is possible to construct CompositePrivateKey(s) to generate + signatures from component keys stored in separate software or + hardware keystores. Variations in the process to accommodate + particular private key storage mechanisms are considered to be + conformant to this document so long as it produces the same output as + the process sketched above. + +4.3.2. HashComposite-ML-DSA-Verify + + This mode mirrors HashML-DSA.Verify(pk, M, signature, ctx, PH) + defined in Section 5.4.1 of [FIPS.204]. + + Verification of a composite signature involves reconstructing the M' + message by concatenating the composite domain separator "Domain" + Section 7.1 with the length of the context string ctx in bytes, the + context string ctx, and finally the pre-hashed message PH(M) . + + Compliant applications MUST output "Valid signature" (true) if and + only if all component signatures were successfully validated, and + "Invalid signature" (false) otherwise. + + The following process is used to perform this verification. + +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 (S1 and S2) 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 Procedure:: + + 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" + + Figure 5: Hash-Composite-ML-DSA-Verify(pk, M, signature, ctx, PH) + + It is possible to construct CompositePublicKey(s) to verify + signatures from component keys stored in separate software or + hardware keystores. Variations in the process to accommodate + particular private key storage mechanisms are considered to be + conformant to this document so long as it produces the same output as + the process sketched above. + +5. Composite Key Structures + + In order for signatures to be composed of multiple algorithms, we + define encodings consisting of a sequence of signature primitives + (aka "component algorithms") such that these structures can be used + as a drop-in replacement for existing signature fields such as those + found in PKCS#10 [RFC2986], CMP [RFC4210], X.509 [RFC5280], CMS + [RFC5652]. + +5.1. pk-CompositeSignature + + The following ASN.1 structures represent a composite public key + combined with an RSA and Elliptic Curve public key, respectively. + + 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 (CONTAINING id-raw-key) + } + + id-raw-key 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. + + This structure is intentionally generic in the first public key slot + since ML-DSA, as defined in [I-D.ietf-lamps-dilithium-certificates], + does not define any ASN.1 public key structures. For use with this + document, the firstPublicKey MUST be the BIT STRING representation of + an ML-DSA key as specified in + [I-D.ietf-lamps-dilithium-certificates]. Note that here we used BIT + STRING rather than OCTET STRING so that these keys can be trivially + transcoded into a SubjectPublicKeyInfo as necessary, for example when + a crypto library requires this for invoking the component algorithm. + The public key for Edwards curve DSA component is also encoded as a + raw key. + + The following ASN.1 Information Object Class is defined to then allow + for compact definitions of each composite algorithm. + + pk-CompositeSignature {OBJECT IDENTIFIER:id, PublicKeyType} + PUBLIC-KEY ::= { + IDENTIFIER id + KEY PublicKeyType + PARAMS ARE absent + CERT-KEY-USAGE { digitalSignature, nonRepudiation, keyCertSign, cRLSign} + } + + As an example, the public key type pk-MLDSA44-ECDSA-P256-SHA256 is + defined as: + + pk-MLDSA44-ECDSA-P256-SHA256 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA44-ECDSA-P256-SHA256, + EcCompositeSignaturePublicKey} + + The full set of key types defined by this specification can be found + in the ASN.1 Module in Section 9. + +5.2. CompositeSignaturePublicKey + + Composite public key data is represented by the following structure: + + CompositeSignaturePublicKey ::= SEQUENCE SIZE (2) OF BIT STRING + + A composite key MUST contain two component public keys. The order of + the component keys is determined by the definition of the + corresponding algorithm identifier as defined in section Section 7. + + Some applications may need to reconstruct the SubjectPublicKeyInfo + objects corresponding to each component public key. Table 2 or + Table 3 in Section 7 provides the necessary mapping between composite + and their component algorithms for doing this reconstruction. This + also motivates the design choice of SEQUENCE OF BIT STRING instead of + SEQUENCE OF OCTET STRING; using BIT STRING allows for easier + transcription between CompositeSignaturePublicKey and + SubjectPublicKeyInfo. + + When the CompositeSignaturePublicKey must be provided in octet string + or bit string format, the data structure is encoded as specified in + Section 5.4. + + Component keys of a CompositeSignaturePublicKey MUST NOT be used in + any other type of key or as a standalone key. + +5.3. CompositeSignaturePrivateKey + + Use cases that require an interoperable encoding for composite + private keys, such as when private keys are carried in PKCS #12 + [RFC7292], CMP [RFC4210] or CRMF [RFC4211] MUST use the + OneAsymmetricKey [RFC5958] structure into which the privateKey field + contains the CompositeSignaturePrivateKey: + + 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. + + CompositeSignaturePrivateKey ::= SEQUENCE SIZE (2) OF OCTET STRING + + Each element of the CompositeSignaturePrivateKey Sequence is an OCTET + STRING representing the PrivateKey for each component algorithm in + the same order defined in Section 5.2 for the components of + CompositeSignaturePublicKey. + + When a CompositeSignaturePrivateKey is conveyed inside a + OneAsymmetricKey structure (version 1 of which is also known as + PrivateKeyInfo) [RFC5958], the privateKeyAlgorithm field SHALL be set + to the corresponding composite algorithm identifier defined according + to Section 7 and its parameters field MUST be absent. The privateKey + field SHALL contain the CompositeSignaturePrivateKey, and the + publicKey field MAY be present. + + In some usecases the private keys that comprise a composite key may + not be represented in a single structure or even be contained in a + single cryptographic module; for example if one component is within + the FIPS boundary of a cryptographic module and the other is not; see + {sec-fips} for more discussion. The establishment of correspondence + between public keys in a CompositeSignaturePublicKey and private keys + not represented in a single composite structure is beyond the scope + of this document. + + Some applications may need to reconstruct the OneAsymmetricKey + objects corresponding to each component private key. Table 2 or + Table 3 in Section 7 provides the necessary mapping between composite + and their component algorithms for doing this reconstruction. + + Component keys of a CompositeSignaturePrivateKey MUST NOT be used in + any other type of key or as a standalone key. + +5.4. Encoding Rules + + 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. + + When an octet string is required, the DER encoding of the composite + data structure SHALL be used directly. + + CompositeSignaturePublicKeyOs ::= OCTET STRING (CONTAINING + CompositeSignaturePublicKey ENCODED BY der) + + 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. + + CompositeSignaturePublicKeyBs ::= BIT STRING (CONTAINING + CompositeSignaturePublicKey ENCODED BY der) + + In the interests of simplicity and avoiding compatibility issues, + implementations that parse these structures MAY accept both BER and + DER. + +5.5. Key Usage Bits + + For protocols such as X.509 [RFC5280] that specify key usage along + with the public key, then the composite public key associated with a + composite signature MUST have a signing-type key usage. This is + because the composite public key can only be used in situations that + are appropriate for both component algorithms, so even if the + classical component key supports both signing and encryption, the + post-quantum algorithms do not. + + If the keyUsage extension is present in a Certification Authority + (CA) certificate that indicates a composite key, then any combination + of the following values MAY be present and any other values MUST NOT + be present: + + digitalSignature; + nonRepudiation; + keyCertSign; and + cRLSign. + + If the keyUsage extension is present in an End Entity (EE) + certificate that indicates a composite key, then any combination of + the following values MAY be present and any other values MUST NOT be + present: + + digitalSignature; and + nonRepudiation; + +6. Composite Signature Structures + +6.1. sa-CompositeSignature + + The ASN.1 algorithm object for a composite signature is: + + sa-CompositeSignature{OBJECT IDENTIFIER:id, + PUBLIC-KEY:publicKeyType } + SIGNATURE-ALGORITHM ::= { + IDENTIFIER id + VALUE CompositeSignatureValue + PARAMS ARE absent + PUBLIC-KEYS {publicKeyType} + } + + The following is an explanation how SIGNATURE-ALGORITHM elements are + used to define Composite Signatures: + + +=====================+=========================================+ + | SIGNATURE-ALGORITHM | Definition | + | element | | + +=====================+=========================================+ + | IDENTIFIER | The Object ID used to identify the | + | | composite Signature Algorithm | + +---------------------+-----------------------------------------+ + | VALUE | The Sequence of BIT STRINGS for each | + | | component signature value | + +---------------------+-----------------------------------------+ + | PARAMS | Parameters are absent | + +---------------------+-----------------------------------------+ + | PUBLIC-KEYS | The composite public key type | + | | associated with the composite signature | + +---------------------+-----------------------------------------+ + + Table 1 + +6.2. CompositeSignatureValue + + The output of the composite signature algorithm is the DER encoding + of the following structure: + + CompositeSignatureValue ::= SEQUENCE SIZE (2) OF BIT STRING + + Where each BIT STRING within the SEQUENCE is a signature value + produced by one of the component keys. It MUST contain one signature + value produced by each component algorithm, and in the same order as + specified in the object identifier. + + The choice of SEQUENCE SIZE (2) OF BIT STRING, rather than for + example a single BIT STRING containing the concatenated signature + values, is to gracefully handle variable-length signature values by + taking advantage of ASN.1's built-in length fields. + +7. Algorithm Identifiers + + This section defines the algorithm identifiers for explicit + combinations. For simplicity and prototyping purposes, the signature + algorithm object identifiers specified in this document are the same + as the composite key object Identifiers. A proper implementation + should not presume that the object ID of a composite key will be the + same as its composite signature algorithm. + + This section is not intended to be exhaustive and other authors may + define other composite signature algorithms so long as they are + compatible with the structures and processes defined in this and + companion public and private key documents. + + Some use-cases desire the flexibility for clients to use any + combination of supported algorithms, while others desire the rigidity + of explicitly-specified combinations of algorithms. + + The following tables summarize the details for each explicit + composite signature algorithms: + + The OID referenced are TBD for prototyping only, and the following + prefix is used for each: + + replace with the String "2.16.840.1.114027.80.8.1" + + Therefore .21 is equal to 2.16.840.1.114027.80.8.1.21 + + Pure Composite-ML-DSA Signature public key types: + + +=============================+============+===========+=======================+=======+ + |Composite Signature |OID |First |Second AlgorithmID |Second | + |AlgorithmID | |AlgorithmID| |Alg | + | | | | |PreHash| + +=============================+============+===========+=======================+=======+ + |id-MLDSA44-RSA2048-PSS-SHA256|.21|id-ML- |id-RSASA-PSS with id- |id- | + | | |DSA-44 |sha256 |sha256 | + +-----------------------------+------------+-----------+-----------------------+-------+ + |id- |.22|id-ML- |sha256WithRSAEncryption|id- | + |MLDSA44-RSA2048-PKCS15-SHA256| |DSA-44 | |sha256 | + +-----------------------------+------------+-----------+-----------------------+-------+ + |id-MLDSA44-Ed25519 |.23|id-ML- |id-Ed25519 |None | + | | |DSA-44 | | | + +-----------------------------+------------+-----------+-----------------------+-------+ + |id-MLDSA44-ECDSA-P256-SHA256 |.24|id-ML- |ecdsa-with-SHA256 with |id- | + | | |DSA-44 |secp256r1 |sha256 | + +-----------------------------+------------+-----------+-----------------------+-------+ + |id-MLDSA65-RSA3072-PSS-SHA512|.26|id-ML- |id-RSASA-PSS with id- |id- | + | | |DSA-65 |sha512 |sha512 | + +-----------------------------+------------+-----------+-----------------------+-------+ + |id- |.27|id-ML- |sha512WithRSAEncryption|id- | + |MLDSA65-RSA3072-PKCS15-SHA512| |DSA-65 | |sha512 | + +-----------------------------+------------+-----------+-----------------------+-------+ + |id-MLDSA65-RSA4096-PSS-SHA512|.34|id-ML- |id-RSASA-PSS with id- |id- | + | | |DSA-65 |sha512 |sha512 | + +-----------------------------+------------+-----------+-----------------------+-------+ + |id- |.35|id-ML- |sha512WithRSAEncryption|id- | + |MLDSA65-RSA4096-PKCS15-SHA512| |DSA-65 | |sha512 | + +-----------------------------+------------+-----------+-----------------------+-------+ + |id-MLDSA65-ECDSA-P384-SHA512 |.28|id-ML- |ecdsa-with-SHA512 with |id- | + | | |DSA-65 |secp384r1 |sha512 | + +-----------------------------+------------+-----------+-----------------------+-------+ + |id-MLDSA65-ECDSA- |.29|id-ML- |ecdsa-with-SHA512 with |id- | + |brainpoolP256r1-SHA512 | |DSA-65 |brainpoolP256r1 |sha512 | + +-----------------------------+------------+-----------+-----------------------+-------+ + |id-MLDSA65-Ed25519 |.30|id-ML- |id-Ed25519 |None | + | | |DSA-65 | | | + +-----------------------------+------------+-----------+-----------------------+-------+ + |id-MLDSA87-ECDSA-P384-SHA512 |.31|id-ML- |ecdsa-with-SHA512 with |id- | + | | |DSA-87 |secp384r1 |sha512 | + +-----------------------------+------------+-----------+-----------------------+-------+ + |id-MLDSA87-ECDSA- |.32|id-ML- |ecdsa-with-SHA512 with |id- | + |brainpoolP384r1-SHA512 | |DSA-87 |brainpoolP384r1 |sha512 | + +-----------------------------+------------+-----------+-----------------------+-------+ + |id-MLDSA87-Ed448 |.33|id-ML- |id-Ed448 |None | + | | |DSA-87 | | | + +-----------------------------+------------+-----------+-----------------------+-------+ + + Table 2: Pure ML-DSA Composite Signature Algorithms + + The table above contains everything needed to implement the listed + pure ML-DSA composite signature algorithms. The hash value indicated + is used only by the Second algorithm if needed. See the ASN.1 module + in section Section 9 for the explicit definitions of the above + Composite signature algorithms. + + HashComposite-ML-DSA Signature public key types: + + +=================================+============+===========+=======================+======+ + |Composite Signature AlgorithmID |OID |First |Second AlgorithmID |Pre- | + | | |AlgorithmID| |Hash | + +=================================+============+===========+=======================+======+ + |id-HashMLDSA44-RSA2048-PSS-SHA256|.40|id-ML- |id-RSASA-PSS with id- |id- | + | | |DSA-44 |sha256 |sha256| + +---------------------------------+------------+-----------+-----------------------+------+ + |id- |.41|id-ML- |sha256WithRSAEncryption|id- | + |HashMLDSA44-RSA2048-PKCS15-SHA256| |DSA-44 | |sha256| + +---------------------------------+------------+-----------+-----------------------+------+ + |id-HashMLDSA44-Ed25519-SHA512 |.42|id-ML- |id-Ed25519 |id- | + | | |DSA-44 | |sha512| + +---------------------------------+------------+-----------+-----------------------+------+ + |id-HashMLDSA44-ECDSA-P256-SHA256 |.43|id-ML- |ecdsa-with-SHA256 with |id- | + | | |DSA-44 |secp256r1 |sha256| + +---------------------------------+------------+-----------+-----------------------+------+ + |id-HashMLDSA65-RSA3072-PSS-SHA512|.44|id-ML- |id-RSASA-PSS with id- |id- | + | | |DSA-65 |sha512 |sha512| + +---------------------------------+------------+-----------+-----------------------+------+ + |id- |.45|id-ML- |sha512WithRSAEncryption|id- | + |HashMLDSA65-RSA3072-PKCS15-SHA512| |DSA-65 | |sha512| + +---------------------------------+------------+-----------+-----------------------+------+ + |id-HashMLDSA65-RSA4096-PSS-SHA512|.46|id-ML- |id-RSASA-PSS with id- |id- | + | | |DSA-65 |sha512 |sha512| + +---------------------------------+------------+-----------+-----------------------+------+ + |id- |.47|id-ML- |sha512WithRSAEncryption|id- | + |HashMLDSA65-RSA4096-PKCS15-SHA512| |DSA-65 | |sha512| + +---------------------------------+------------+-----------+-----------------------+------+ + |id-HashMLDSA65-ECDSA-P384-SHA512 |.48|id-ML- |ecdsa-with-SHA512 with |id- | + | | |DSA-65 |secp384r1 |sha512| + +---------------------------------+------------+-----------+-----------------------+------+ + |id-HashMLDSA65-ECDSA- |.49|id-ML- |ecdsa-with-SHA512 with |id- | + |brainpoolP256r1-SHA512 | |DSA-65 |brainpoolP256r1 |sha512| + +---------------------------------+------------+-----------+-----------------------+------+ + |id-HashMLDSA65-Ed25519-SHA512 |.50|id-ML- |id-Ed25519 |id- | + | | |DSA-65 | |sha512| + +---------------------------------+------------+-----------+-----------------------+------+ + |id-HashMLDSA87-ECDSA-P384-SHA512 |.51|id-ML- |ecdsa-with-SHA512 with |id- | + | | |DSA-87 |secp384r1 |sha512| + +---------------------------------+------------+-----------+-----------------------+------+ + |id-HashMLDSA87-ECDSA- |.52|id-ML- |ecdsa-with-SHA512 with |id- | + |brainpoolP384r1-SHA512 | |DSA-87 |brainpoolP384r1 |sha512| + +---------------------------------+------------+-----------+-----------------------+------+ + |id-HashMLDSA87-Ed448-SHA512 |.53|id-ML- |id-Ed448 |id- | + | | |DSA-87 | |sha512| + +---------------------------------+------------+-----------+-----------------------+------+ + + Table 3: Hash ML-DSA Composite Signature Algorithms + + The table above contains everything needed to implement the listed + hash ML-DSA composite signature algorithms. The Pre-Hash algorithm + is used as the PH algorithm and the DER Encoded OID value of this + Hash is used as HashOID for the Message format in step 2 of HashML- + DSA.Sign in section Section 4.3. This hash value is also used as the + pre-hash of the Second algorithm if needed. See the ASN.1 module in + section Section 9 for the explicit definitions of the above Composite + signature algorithms. + + Full specifications for the referenced algorithms can be found in + Appendix A. + +7.1. Domain Separators + + 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. + + +=======================================+==========================+ + |Composite Signature AlgorithmID |Domain Separator (in Hex | + | |encoding) | + +=======================================+==========================+ + |id-MLDSA44-RSA2048-PSS-SHA256 |060B6086480186FA6B50080115| + +---------------------------------------+--------------------------+ + |id-MLDSA44-RSA2048-PKCS15-SHA256 |060B6086480186FA6B50080116| + +---------------------------------------+--------------------------+ + |id-MLDSA44-Ed25519-SHA512 |060B6086480186FA6B50080117| + +---------------------------------------+--------------------------+ + |id-MLDSA44-ECDSA-P256-SHA256 |060B6086480186FA6B50080118| + +---------------------------------------+--------------------------+ + |id-MLDSA65-RSA3072-PSS-SHA512 |060B6086480186FA6B5008011A| + +---------------------------------------+--------------------------+ + |id-MLDSA65-RSA3072-PKCS15-SHA512 |060B6086480186FA6B5008011B| + +---------------------------------------+--------------------------+ + |id-MLDSA65-RSA4096-PSS-SHA512 |060B6086480186FA6B50080122| + +---------------------------------------+--------------------------+ + |id-MLDSA65-RSA4096-PKCS15-SHA512 |060B6086480186FA6B50080123| + +---------------------------------------+--------------------------+ + |id-MLDSA65-ECDSA-P384-SHA512 |060B6086480186FA6B5008011C| + +---------------------------------------+--------------------------+ + |id-MLDSA65-ECDSA-brainpoolP256r1-SHA512|060B6086480186FA6B5008011D| + +---------------------------------------+--------------------------+ + |id-MLDSA65-Ed25519-SHA512 |060B6086480186FA6B5008011E| + +---------------------------------------+--------------------------+ + |id-MLDSA87-ECDSA-P384-SHA512 |060B6086480186FA6B5008011F| + +---------------------------------------+--------------------------+ + |id-MLDSA87-ECDSA-brainpoolP384r1-SHA512|060B6086480186FA6B50080120| + +---------------------------------------+--------------------------+ + |id-MLDSA87-Ed448-SHA512 |060B6086480186FA6B50080121| + +---------------------------------------+--------------------------+ + + Table 4: Pure ML-DSA Composite Signature Domain Separators + + +===================================+============================+ + | Composite Signature AlgorithmID | Domain Separator (in Hex | + | | encoding) | + +===================================+============================+ + | id-HashMLDSA44-RSA2048-PSS-SHA256 | 060B6086480186FA6B50080128 | + +-----------------------------------+----------------------------+ + | id- | 060B6086480186FA6B50080129 | + | HashMLDSA44-RSA2048-PKCS15-SHA256 | | + +-----------------------------------+----------------------------+ + | id-HashMLDSA44-Ed25519-SHA512 | 060B6086480186FA6B5008012A | + +-----------------------------------+----------------------------+ + | id-HashMLDSA44-ECDSA-P256-SHA256 | 060B6086480186FA6B5008012B | + +-----------------------------------+----------------------------+ + | id-HashMLDSA65-RSA3072-PSS-SHA512 | 060B6086480186FA6B5008012C | + +-----------------------------------+----------------------------+ + | id- | 060B6086480186FA6B5008012D | + | HashMLDSA65-RSA3072-PKCS15-SHA512 | | + +-----------------------------------+----------------------------+ + | id-HashMLDSA65-RSA4096-PSS-SHA512 | 060B6086480186FA6B5008012E | + +-----------------------------------+----------------------------+ + | id- | 060B6086480186FA6B5008012F | + | HashMLDSA65-RSA4096-PKCS15-SHA512 | | + +-----------------------------------+----------------------------+ + | id-HashMLDSA65-ECDSA-P384-SHA512 | 060B6086480186FA6B50080130 | + +-----------------------------------+----------------------------+ + | id-HashMLDSA65-ECDSA- | 060B6086480186FA6B50080131 | + | brainpoolP256r1-SHA512 | | + +-----------------------------------+----------------------------+ + | id-HashMLDSA65-Ed25519-SHA512 | 060B6086480186FA6B50080132 | + +-----------------------------------+----------------------------+ + | id-HashMLDSA87-ECDSA-P384-SHA512 | 060B6086480186FA6B50080133 | + +-----------------------------------+----------------------------+ + | id-HashMLDSA87-ECDSA- | 060B6086480186FA6B50080134 | + | brainpoolP384r1-SHA512 | | + +-----------------------------------+----------------------------+ + | id-HashMLDSA87-Ed448-SHA512 | 060B6086480186FA6B50080135 | + +-----------------------------------+----------------------------+ + + Table 5: Hash ML-DSA Composite Signature Domain Separators + +7.2. Notes on id-MLDSA44-RSA2048-PSS-SHA256 + + Use of RSA-PSS [RFC8017] deserves a special explanation. + + The RSA component keys MUST be generated at the 2048-bit security + level in order to match with ML-DSA-44 + + As with the other composite signature algorithms, when id- + MLDSA44-RSA2048-PSS-SHA256 is used in an AlgorithmIdentifier, the + parameters MUST be absent. id-MLDSA44-RSA2048-PSS-SHA256 SHALL + instantiate RSA-PSS with the following parameters: + + +==========================+=========+ + | RSA-PSS Parameter | Value | + +==========================+=========+ + | Mask Generation Function | mgf1 | + +--------------------------+---------+ + | Mask Generation params | SHA-256 | + +--------------------------+---------+ + | Message Digest Algorithm | SHA-256 | + +--------------------------+---------+ + | Salt Length in bits | 256 | + +--------------------------+---------+ + + Table 6: RSA-PSS 2048 Parameters + + where: + + * Mask Generation Function (mgf1) is defined in [RFC8017] + + * SHA-256 is defined in [RFC6234]. + +7.3. Notes on id-MLDSA65-RSA3072-PSS-SHA512 + + The RSA component keys MUST be generated at the 3072-bit security + level in order to match with ML-DSA-65. + + As with the other composite signature algorithms, when id- + MLDSA65-RSA3072-PSS-SHA512 is used in an AlgorithmIdentifier, the + parameters MUST be absent. id-MLDSA65-RSA3072-PSS-SHA512 SHALL + instantiate RSA-PSS with the following parameters: + + +==========================+=========+ + | RSA-PSS Parameter | Value | + +==========================+=========+ + | Mask Generation Function | mgf1 | + +--------------------------+---------+ + | Mask Generation params | SHA-512 | + +--------------------------+---------+ + | Message Digest Algorithm | SHA-512 | + +--------------------------+---------+ + | Salt Length in bits | 512 | + +--------------------------+---------+ + + Table 7: RSA-PSS 3072 Parameters + + where: + + * Mask Generation Function (mgf1) is defined in [RFC8017] + + * SHA-512 is defined in [RFC6234]. + +7.4. Notes on id-MLDSA65-RSA4096-PSS-SHA512 + + The RSA component keys MUST be generated at the 4096-bit security + level in order to match with ML-DSA-65. + + As with the other composite signature algorithms, when id- + MLDSA65-RSA4096-PSS-SHA512 is used in an AlgorithmIdentifier, the + parameters MUST be absent. id-MLDSA65-RSA4096-PSS-SHA512 SHALL + instantiate RSA-PSS with the following parameters: + + +==========================+=========+ + | RSA-PSS Parameter | Value | + +==========================+=========+ + | Mask Generation Function | mgf1 | + +--------------------------+---------+ + | Mask Generation params | SHA-512 | + +--------------------------+---------+ + | Message Digest Algorithm | SHA-512 | + +--------------------------+---------+ + | Salt Length in bits | 512 | + +--------------------------+---------+ + + Table 8: RSA-PSS 4096 Parameters + + where: + + * Mask Generation Function (mgf1) is defined in [RFC8017] + + * SHA-512 is defined in [RFC6234]. + +8. Use in CMS + + [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.] + + Composite Signature algorithms MAY be employed for one or more + recipients in the CMS signed-data content type [RFC5652]. + +8.1. Underlying Components + + When a particular Composite Signature OID is supported in CMS, an + implementation SHOULD support the corresponding Secure Hash algorithm + identifier in Table 9 that was used as the pre-hash. + + The following table lists the MANDATORY Hash algorithms to preserve + security and performance characteristics of each composite algorithm. + + +=========================================+=============+ + | Composite Signature AlgorithmID | Secure Hash | + +=========================================+=============+ + | id-MLDSA44-RSA2048-PSS-SHA256 | SHA256 | + +-----------------------------------------+-------------+ + | id-MLDSA44-RSA2048-PKCS15-SHA256 | SHA256 | + +-----------------------------------------+-------------+ + | id-MLDSA44-Ed25519 | SHA512 | + +-----------------------------------------+-------------+ + | id-MLDSA44-ECDSA-P256-SHA256 | SHA256 | + +-----------------------------------------+-------------+ + | id-MLDSA65-RSA3072-PSS-SHA512 | SHA512 | + +-----------------------------------------+-------------+ + | id-MLDSA65-RSA3072-PKCS15-SHA512 | SHA512 | + +-----------------------------------------+-------------+ + | id-MLDSA65-RSA4096-PSS-SHA512 | SHA512 | + +-----------------------------------------+-------------+ + | id-MLDSA65-RSA4096-PKCS15-SHA512 | SHA512 | + +-----------------------------------------+-------------+ + | id-MLDSA65-ECDSA-P384-SHA512 | SHA512 | + +-----------------------------------------+-------------+ + | id-MLDSA65-ECDSA-brainpoolP256r1-SHA512 | SHA512 | + +-----------------------------------------+-------------+ + | id-MLDSA65-Ed25519 | SHA512 | + +-----------------------------------------+-------------+ + | id-MLDSA87-ECDSA-P384-SHA512 | SHA512 | + +-----------------------------------------+-------------+ + | id-MLDSA87-ECDSA-brainpoolP384r1-SHA512 | SHA512 | + +-----------------------------------------+-------------+ + | id-MLDSA87-Ed448 | SHA512 | + +-----------------------------------------+-------------+ + + Table 9: Composite Signature SHA Algorithms + + where: + + * SHA2 instantiations are defined in [FIPS180]. + + 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. + +8.2. SignedData Conventions + + As specified in CMS [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. + + 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 Table 9, 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: + + IF (signed attributes are absent) + THEN Composite-ML-DSA.Sign(Hash(content)) + ELSE message-digest attribute = Hash(content); + Composite-ML-DSA.Sign(DER(SignedAttributes)) + + When using Composite Signatures, the fields in the SignerInfo are + used as follows: + + digestAlgorithm: The digestAlgorithm contains the one-way hash + function used by the CMS signer. + + signatureAlgorithm: The signatureAlgorithm MUST contain one of the + the Composite Signature algorithm identifiers as specified in Table 9 + + signature: The signature field contains the signature value resulting + from the composite signing operation of the specified + signatureAlgorithm. + +8.3. Certificate Conventions + + The conventions specified in this section augment RFC 5280 [RFC5280]. + + 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 [RFC8551] or the SMIMECapabilities certificate + extension as specified in [RFC4262]. + + 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 + [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: + + digitalSignature + nonRepudiation + keyCertSign + cRLSign + + 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. + +8.4. SMIMECapabilities Attribute Conventions + + Section 2.5.2 of [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 + [RFC5652], a compliant implementation MAY include the + SMIMECapabilities attribute that announces support for the RSA-KEM + Algorithm. + + The SMIMECapability SEQUENCE representing a composite signature + Algorithm MUST include the appropriate object identifier as per + Table 9 in the capabilityID field. + +9. ASN.1 Module + + + + 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, 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 OneAsymmetricKey + + 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} + } + + -- TODO: OID to be replaced by IANA + id-MLDSA44-RSA2048-PSS-SHA256 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-SHA256 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA44-RSA2048-PSS-SHA256, + RsaCompositeSignaturePublicKey} + + sa-MLDSA44-RSA2048-PSS-SHA256 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA44-RSA2048-PSS-SHA256, + pk-MLDSA44-RSA2048-PSS-SHA256 } + + -- TODO: OID to be replaced by IANA + id-MLDSA44-RSA2048-PKCS15-SHA256 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-SHA256 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA44-RSA2048-PKCS15-SHA256, + RsaCompositeSignaturePublicKey} + + sa-MLDSA44-RSA2048-PKCS15-SHA256 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA44-RSA2048-PKCS15-SHA256, + pk-MLDSA44-RSA2048-PKCS15-SHA256 } + + + -- TODO: OID to be replaced by IANA + id-MLDSA44-Ed25519-SHA512 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-SHA512 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA44-Ed25519-SHA512, + EdCompositeSignaturePublicKey} + + sa-MLDSA44-Ed25519-SHA512 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA44-Ed25519-SHA512, + pk-MLDSA44-Ed25519-SHA512 } + + + -- TODO: OID to be replaced by IANA + id-MLDSA44-ECDSA-P256-SHA256 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-SHA256 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA44-ECDSA-P256-SHA256, + EcCompositeSignaturePublicKey} + + sa-MLDSA44-ECDSA-P256-SHA256 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA44-ECDSA-P256-SHA256, + pk-MLDSA44-ECDSA-P256-SHA256 } + + + -- TODO: OID to be replaced by IANA + id-MLDSA44-ECDSA-brainpoolP256r1-SHA256 OBJECT IDENTIFIER ::= { + joint-iso-itu-t(2) country(16) us(840) organization(1) + entrust(114027) algorithm(80) composite(8) signature(1) 25 } + + pk-MLDSA44-ECDSA-brainpoolP256r1-SHA256 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA44-ECDSA-brainpoolP256r1-SHA256, + EcCompositeSignaturePublicKey} + + sa-MLDSA44-ECDSA-brainpoolP256r1-SHA256 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA44-ECDSA-brainpoolP256r1-SHA256, + pk-MLDSA44-ECDSA-brainpoolP256r1-SHA256 } + + + -- TODO: OID to be replaced by IANA + id-MLDSA65-RSA3072-PSS-SHA512 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-SHA512 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA65-RSA3072-PSS-SHA512, + RsaCompositeSignaturePublicKey} + + sa-MLDSA65-RSA3072-PSS-SHA512 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA65-RSA3072-PSS-SHA512, + pk-MLDSA65-RSA3072-PSS-SHA512 } + + + -- TODO: OID to be replaced by IANA + id-MLDSA65-RSA3072-PKCS15-SHA512 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-SHA512 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA65-RSA3072-PKCS15-SHA512, + RsaCompositeSignaturePublicKey} + + sa-MLDSA65-RSA3072-PKCS15-SHA512 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA65-RSA3072-PKCS15-SHA512, + pk-MLDSA65-RSA3072-PKCS15-SHA512 } + + -- TODO: OID to be replaced by IANA + id-MLDSA65-RSA4096-PSS-SHA512 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-SHA512 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA65-RSA4096-PSS-SHA512, + RsaCompositeSignaturePublicKey} + + sa-MLDSA65-RSA4096-PSS-SHA512 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA65-RSA4096-PSS-SHA512, + pk-MLDSA65-RSA4096-PSS-SHA512 } + + + -- TODO: OID to be replaced by IANA + id-MLDSA65-RSA4096-PKCS15-SHA512 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-SHA512 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA65-RSA4096-PKCS15-SHA512, + RsaCompositeSignaturePublicKey} + + sa-MLDSA65-RSA4096-PKCS15-SHA512 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA65-RSA4096-PKCS15-SHA512, + pk-MLDSA65-RSA4096-PKCS15-SHA512 } + + -- TODO: OID to be replaced by IANA + id-MLDSA65-ECDSA-P384-SHA512 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-SHA512 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA65-ECDSA-P384-SHA512, + EcCompositeSignaturePublicKey} + + sa-MLDSA65-ECDSA-P256-SHA512 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA65-ECDSA-P384-SHA512, + pk-MLDSA65-ECDSA-P384-SHA512 } + + + -- TODO: OID to be replaced by IANA + id-MLDSA65-ECDSA-brainpoolP256r1-SHA512 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-SHA512 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA65-ECDSA-brainpoolP256r1-SHA512, + EcCompositeSignaturePublicKey} + + sa-MLDSA65-ECDSA-brainpoolP256r1-SHA512 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA65-ECDSA-brainpoolP256r1-SHA512, + pk-MLDSA65-ECDSA-brainpoolP256r1-SHA512 } + + + -- TODO: OID to be replaced by IANA + id-MLDSA65-Ed25519-SHA512 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-SHA512 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA65-Ed25519-SHA512, + EdCompositeSignaturePublicKey} + + sa-MLDSA65-Ed25519-SHA512 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA65-Ed25519-SHA512, + pk-MLDSA65-Ed25519-SHA512 } + + + -- TODO: OID to be replaced by IANA + id-MLDSA87-ECDSA-P384-SHA512 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-SHA512 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA87-ECDSA-P384-SHA512, + EcCompositeSignaturePublicKey} + + sa-MLDSA87-ECDSA-P384-SHA512 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA87-ECDSA-P384-SHA512, + pk-MLDSA87-ECDSA-P384-SHA512 } + + + -- TODO: OID to be replaced by IANA + id-MLDSA87-ECDSA-brainpoolP384r1-SHA512 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-SHA512 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA87-ECDSA-brainpoolP384r1-SHA512, + EcCompositeSignaturePublicKey} + + sa-MLDSA87-ECDSA-brainpoolP384r1-SHA512 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA87-ECDSA-brainpoolP384r1-SHA512, + pk-MLDSA87-ECDSA-brainpoolP384r1-SHA512 } + + + -- TODO: OID to be replaced by IANA + id-MLDSA87-Ed448-SHA512 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-SHA512 PUBLIC-KEY ::= + pk-CompositeSignature{ id-MLDSA87-Ed448-SHA512, + EdCompositeSignaturePublicKey} + + sa-MLDSA87-Ed448-SHA512 SIGNATURE-ALGORITHM ::= + sa-CompositeSignature{ + id-MLDSA87-Ed448-SHA512, + pk-MLDSA87-Ed448-SHA512 } + + END + + + +10. IANA Considerations + + IANA is requested to allocate a value from the "SMI Security for PKIX + Module Identifier" registry [RFC7299] for the included ASN.1 module, + and allocate values from "SMI Security for PKIX Algorithms" to + identify the fourteen Algorithms defined within. + +10.1. Object Identifier Allocations + + EDNOTE to IANA: OIDs will need to be replaced in both the ASN.1 + module and in Table 2 and Table 3. + +10.1.1. Module Registration - SMI Security for PKIX Module Identifier + + * Decimal: IANA Assigned - *Replace TBDMOD* + + * Description: Composite-Signatures-2023 - id-mod-composite- + signatures + + * References: This Document + +10.1.2. Object Identifier Registrations - SMI Security for PKIX + Algorithms + + * id-raw-key + + * Decimal: IANA Assigned + + * Description: Designates a public key BIT STRING with no ASN.1 + structure. + + * References: This Document + + * id-MLDSA44-RSA2048-PSS-SHA256 + + * Decimal: IANA Assigned + + * Description: id-MLDSA44-RSA2048-PSS-SHA256 + + * References: This Document + + * id-MLDSA44-RSA2048-PKCS15-SHA256 + + * Decimal: IANA Assigned + + * Description: id-MLDSA44-RSA2048-PKCS15-SHA256 + + * References: This Document + + * id-MLDSA44-Ed25519 + + * Decimal: IANA Assigned + + * Description: id-MLDSA44-Ed25519 + + * References: This Document + + * id-MLDSA44-ECDSA-P256-SHA256 + + * Decimal: IANA Assigned + + * Description: id-MLDSA44-ECDSA-P256-SHA256 + + * References: This Document + + * id-MLDSA65-RSA3072-PSS-SHA512 + + * Decimal: IANA Assigned + + * Description: id-MLDSA65-RSA3072-PSS-SHA512 + + * References: This Document + + * id-MLDSA65-RSA3072-PKCS15-SHA512 + + * Decimal: IANA Assigned + + * Description: id-MLDSA65-RSA3072-PKCS15-SHA512 + + * References: This Document + + * id-MLDSA65-RSA4096-PSS-SHA512 + + * Decimal: IANA Assigned + + * Description: id-MLDSA65-RSA4096-PSS-SHA512 + + * References: This Document + + * id-MLDSA65-RSA4096-PKCS15-SHA512 + + * Decimal: IANA Assigned + + * Description: id-MLDSA65-RSA4096-PKCS15-SHA512 + + * References: This Document + + * id-MLDSA65-ECDSA-P384-SHA512 + + * Decimal: IANA Assigned + + * Description: id-MLDSA65-ECDSA-P384-SHA512 + + * References: This Document + + * id-MLDSA65-ECDSA-brainpoolP256r1-SHA512 + + * Decimal: IANA Assigned + + * Description: id-MLDSA65-ECDSA-brainpoolP256r1-SHA512 + + * References: This Document + + * id-MLDSA65-Ed25519 + + * Decimal: IANA Assigned + + * Description: id-MLDSA65-Ed25519 + + * References: This Document + + * id-MLDSA87-ECDSA-P384-SHA512 + + * Decimal: IANA Assigned + + * Description: id-MLDSA87-ECDSA-P384-SHA512 + + * References: This Document + + * id-MLDSA87-ECDSA-brainpoolP384r1-SHA512 + + * Decimal: IANA Assigned + + * Description: id-MLDSA87-ECDSA-brainpoolP384r1-SHA512 + + * References: This Document + + * id-MLDSA87-Ed448 + + * Decimal: IANA Assigned + + * Description: id-MLDSA87-Ed448 + + * References: This Document + + * id-HashMLDSA44-RSA2048-PSS-SHA256 + + * Decimal: IANA Assigned + + * Description: id-HashMLDSA44-RSA2048-PSS-SHA256 + + * References: This Document + + * id-HashMLDSA44-RSA2048-PKCS15-SHA256 + + * Decimal: IANA Assigned + + * Description: id-HashMLDSA44-RSA2048-PKCS15-SHA256 + + * References: This Document + + * id-HashMLDSA44-Ed25519-SHA512 + + * Decimal: IANA Assigned + + * Description: id-HashMLDSA44-Ed25519-SHA512 + + * References: This Document + + * id-HashMLDSA44-ECDSA-P256-SHA256 + + * Decimal: IANA Assigned + + * Description: id-HashMLDSA44-ECDSA-P256-SHA256 + + * References: This Document + + * id-HashMLDSA65-RSA3072-PSS-SHA512 + + * Decimal: IANA Assigned + + * Description: id-HashMLDSA65-RSA3072-PSS-SHA512 + + * References: This Document + + * id-HashMLDSA65-RSA3072-PKCS15-SHA512 + + * Decimal: IANA Assigned + + * Description: id-HashMLDSA65-RSA3072-PKCS15-SHA512 + + * References: This Document + + * id-HashMLDSA65-RSA4096-PSS-SHA512 + + * Decimal: IANA Assigned + + * Description: id-HashMLDSA65-RSA4096-PSS-SHA512 + + * References: This Document + + * id-HashMLDSA65-RSA4096-PKCS15-SHA512 + + * Decimal: IANA Assigned + + * Description: id-HashMLDSA65-RSA4096-PKCS15-SHA512 + + * References: This Document + + * id-HashMLDSA65-ECDSA-P384-SHA512 + + * Decimal: IANA Assigned + + * Description: id-HashMLDSA65-ECDSA-P384-SHA512 + + * References: This Document + + * id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512 + + * Decimal: IANA Assigned + + * Description: id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512 + + * References: This Document + + * id-HashMLDSA65-Ed25519-SHA512 + + * Decimal: IANA Assigned + + * Description: id-HashMLDSA65-Ed25519-SHA512 + + * References: This Document + + * id-HashMLDSA87-ECDSA-P384-SHA512 + + * Decimal: IANA Assigned + + * Description: id-HashMLDSA87-ECDSA-P384-SHA512 + + * References: This Document + + * id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512 + + * Decimal: IANA Assigned + + * Description: id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512 + + * References: This Document + + * id-HashMLDSA87-Ed448-SHA512 + + * Decimal: IANA Assigned + + * Description: id-HashMLDSA87-Ed448-SHA512 + + * References: This Document + +11. Security Considerations + +11.1. Non-separability and EUF-CMA + + The signature combiner defined in this document is Weakly Non- + Separable (WNS), as defined in + [I-D.ietf-pquip-hybrid-signature-spectrums], since the forged message + M’ will include the composite domain separator as evidence. The + prohibition on key reuse between composite and single-algorithm + contexts discussed in Section 11.2 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. + + Unforgeability properties are somewhat more nuanced. The classic + EUF-CMA game is in reference to a pair of algorithms ( Sign(), + Verify() ) where the attacker has access to a signing oracle using + the Sign() and must produce a signature-message pair (s, m) that is + accepted by the verifier using Verify() and where m was never signed + by the oracle. The pair ( CompositeML-DSA.Sign(), CompositeML- + DSA.Verify() ) 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 (s1*, m) pair where s1* was not produced by the honest + signer and it then can be combined with an honestly-signed (s2, m) + signature over the same message m to create ( (s1*, s2), m) which + violates SUF for the composite algorithm. + + 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. + + 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 + M’ and then trivially assemble a composite. In the second case, the + message M’ (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 + Section 11.4 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. + +11.2. Key Reuse + + 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) + + 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 Section 11.1 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. + + In adition, 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. + +11.3. Policy for Deprecated and Acceptable Algorithms + + 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. + + 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. + + 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 id-MLDSA65-ECDSA-P256-SHA512 even + after ECDSA-P256 is deprecated. + + 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. + + 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: + + 1. 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. + + 2. 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 [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. + + There are mechanisms within Internet PKI where trusted public keys do + not appear within signed structures -- such as the Trust Anchor + format defined in [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. + +12. References + +12.1. Normative References + + [FIPS.204] National Institute of Standards and Technology (NIST), + "Module-Lattice-Based Digital Signature Standard", August + 2024, . + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + . + + [RFC2986] Nystrom, M. and B. Kaliski, "PKCS #10: Certification + Request Syntax Specification Version 1.7", RFC 2986, + DOI 10.17487/RFC2986, November 2000, + . + + [RFC4210] Adams, C., Farrell, S., Kause, T., and T. Mononen, + "Internet X.509 Public Key Infrastructure Certificate + Management Protocol (CMP)", RFC 4210, + DOI 10.17487/RFC4210, September 2005, + . + + [RFC4211] Schaad, J., "Internet X.509 Public Key Infrastructure + Certificate Request Message Format (CRMF)", RFC 4211, + DOI 10.17487/RFC4211, September 2005, + . + + [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., + Housley, R., and W. Polk, "Internet X.509 Public Key + Infrastructure Certificate and Certificate Revocation List + (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, + . + + [RFC5480] Turner, S., Brown, D., Yiu, K., Housley, R., and T. Polk, + "Elliptic Curve Cryptography Subject Public Key + Information", RFC 5480, DOI 10.17487/RFC5480, March 2009, + . + + [RFC5639] Lochter, M. and J. Merkle, "Elliptic Curve Cryptography + (ECC) Brainpool Standard Curves and Curve Generation", + RFC 5639, DOI 10.17487/RFC5639, March 2010, + . + + [RFC5652] Housley, R., "Cryptographic Message Syntax (CMS)", STD 70, + RFC 5652, DOI 10.17487/RFC5652, September 2009, + . + + [RFC5758] Dang, Q., Santesson, S., Moriarty, K., Brown, D., and T. + Polk, "Internet X.509 Public Key Infrastructure: + Additional Algorithms and Identifiers for DSA and ECDSA", + RFC 5758, DOI 10.17487/RFC5758, January 2010, + . + + [RFC5958] Turner, S., "Asymmetric Key Packages", RFC 5958, + DOI 10.17487/RFC5958, August 2010, + . + + [RFC6090] McGrew, D., Igoe, K., and M. Salter, "Fundamental Elliptic + Curve Cryptography Algorithms", RFC 6090, + DOI 10.17487/RFC6090, February 2011, + . + + [RFC6234] Eastlake 3rd, D. and T. Hansen, "US Secure Hash Algorithms + (SHA and SHA-based HMAC and HKDF)", RFC 6234, + DOI 10.17487/RFC6234, May 2011, + . + + [RFC7748] Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves + for Security", RFC 7748, DOI 10.17487/RFC7748, January + 2016, . + + [RFC8032] Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital + Signature Algorithm (EdDSA)", RFC 8032, + DOI 10.17487/RFC8032, January 2017, + . + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, . + + [RFC8410] Josefsson, S. and J. Schaad, "Algorithm Identifiers for + Ed25519, Ed448, X25519, and X448 for Use in the Internet + X.509 Public Key Infrastructure", RFC 8410, + DOI 10.17487/RFC8410, August 2018, + . + + [RFC8411] Schaad, J. and R. Andrews, "IANA Registration for the + Cryptographic Algorithm Object Identifier Range", + RFC 8411, DOI 10.17487/RFC8411, August 2018, + . + + [X.690] ITU-T, "Information technology - ASN.1 encoding Rules: + Specification of Basic Encoding Rules (BER), Canonical + Encoding Rules (CER) and Distinguished Encoding Rules + (DER)", ISO/IEC 8825-1:2015, November 2015. + +12.2. Informative References + + [ANSSI2024] + French Cybersecurity Agency (ANSSI), Federal Office for + Information Security (BSI), Netherlands National + Communications Security Agency (NLNCSA), and Swedish + National Communications Security Authority, Swedish Armed + Forces, "Position Paper on Quantum Key Distribution", + n.d., . + + [Bindel2017] + Bindel, N., Herath, U., McKague, M., and D. Stebila, + "Transitioning to a quantum-resistant public key + infrastructure", 2017, . + + [BSI2021] Federal Office for Information Security (BSI), "Quantum- + safe cryptography - fundamentals, current developments and + recommendations", October 2021, + . + + [I-D.becker-guthrie-noncomposite-hybrid-auth] + Becker, A., Guthrie, R., and M. J. Jenkins, "Non-Composite + Hybrid Authentication in PKIX and Applications to Internet + Protocols", Work in Progress, Internet-Draft, draft- + becker-guthrie-noncomposite-hybrid-auth-00, 22 March 2022, + . + + [I-D.driscoll-pqt-hybrid-terminology] + D, F., "Terminology for Post-Quantum Traditional Hybrid + Schemes", Work in Progress, Internet-Draft, draft- + driscoll-pqt-hybrid-terminology-01, 20 October 2022, + . + + [I-D.guthrie-ipsecme-ikev2-hybrid-auth] + Guthrie, R., "Hybrid Non-Composite Authentication in + IKEv2", Work in Progress, Internet-Draft, draft-guthrie- + ipsecme-ikev2-hybrid-auth-00, 25 March 2022, + . + + [I-D.ietf-lamps-dilithium-certificates] + Massimo, J., Kampanakis, P., Turner, S., and B. + Westerbaan, "Internet X.509 Public Key Infrastructure: + Algorithm Identifiers for ML-DSA", Work in Progress, + Internet-Draft, draft-ietf-lamps-dilithium-certificates- + 04, 22 July 2024, . + + [I-D.ietf-pquip-hybrid-signature-spectrums] + Bindel, N., Hale, B., Connolly, D., and F. D, "Hybrid + signature spectrums", Work in Progress, Internet-Draft, + draft-ietf-pquip-hybrid-signature-spectrums-00, 24 May + 2024, . + + [I-D.massimo-lamps-pq-sig-certificates] + Massimo, J., Kampanakis, P., Turner, S., and B. + Westerbaan, "Algorithms and Identifiers for Post-Quantum + Algorithms", Work in Progress, Internet-Draft, draft- + massimo-lamps-pq-sig-certificates-00, 8 July 2022, + . + + [I-D.ounsworth-pq-composite-kem] + Ounsworth, M. and J. Gray, "Composite KEM For Use In + Internet PKI", Work in Progress, Internet-Draft, draft- + ounsworth-pq-composite-kem-01, 13 March 2023, + . + + [I-D.pala-klaussner-composite-kofn] + Pala, M. and J. Klaußner, "K-threshold Composite + Signatures for the Internet PKI", Work in Progress, + Internet-Draft, draft-pala-klaussner-composite-kofn-00, 15 + November 2022, . + + [I-D.vaira-pquip-pqc-use-cases] + Vaira, A., Brockhaus, H., Railean, A., Gray, J., and M. + Ounsworth, "Post-quantum cryptography use cases", Work in + Progress, Internet-Draft, draft-vaira-pquip-pqc-use-cases- + 00, 23 October 2023, + . + + [RFC3279] Bassham, L., Polk, W., and R. Housley, "Algorithms and + Identifiers for the Internet X.509 Public Key + Infrastructure Certificate and Certificate Revocation List + (CRL) Profile", RFC 3279, DOI 10.17487/RFC3279, April + 2002, . + + [RFC7292] Moriarty, K., Ed., Nystrom, M., Parkinson, S., Rusch, A., + and M. Scott, "PKCS #12: Personal Information Exchange + Syntax v1.1", RFC 7292, DOI 10.17487/RFC7292, July 2014, + . + + [RFC7296] Kaufman, C., Hoffman, P., Nir, Y., Eronen, P., and T. + Kivinen, "Internet Key Exchange Protocol Version 2 + (IKEv2)", STD 79, RFC 7296, DOI 10.17487/RFC7296, October + 2014, . + + [RFC7299] Housley, R., "Object Identifier Registry for the PKIX + Working Group", RFC 7299, DOI 10.17487/RFC7299, July 2014, + . + + [RFC8017] Moriarty, K., Ed., Kaliski, B., Jonsson, J., and A. Rusch, + "PKCS #1: RSA Cryptography Specifications Version 2.2", + RFC 8017, DOI 10.17487/RFC8017, November 2016, + . + + [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol + Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, + . + + [RFC8551] Schaad, J., Ramsdell, B., and S. Turner, "Secure/ + Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 + Message Specification", RFC 8551, DOI 10.17487/RFC8551, + April 2019, . + +Appendix A. Component Algorithm Reference + + This section provides references to the full specification of the + algorithms used in the composite constructions. + + +=========================+===========================+=============+ + | Component Signature | OID |Specification| + | Algorithm ID | | | + +=========================+===========================+=============+ + | id-ML-DSA-44 | 2.16.840.1.101.3.4.3.17 |_ML-DSA_: | + | | |[FIPS.204] | + +-------------------------+---------------------------+-------------+ + | id-ML-DSA-65 | 2.16.840.1.101.3.4.3.18 |_ML-DSA_: | + | | |[FIPS.204] | + +-------------------------+---------------------------+-------------+ + | id-ML-DSA-87 | 2.16.840.1.101.3.4.3.19 |_ML-DSA_: | + | | |[FIPS.204] | + +-------------------------+---------------------------+-------------+ + | id-Ed25519 | iso(1) identified- |_Ed25519 / | + | | organization(3) |Ed448_: | + | | thawte(101) 112 |[RFC8410] | + +-------------------------+---------------------------+-------------+ + | id-Ed448 | iso(1) identified- |_Ed25519 / | + | | organization(3) |Ed448_: | + | | thawte(101) id- |[RFC8410] | + | | Ed448(113) | | + +-------------------------+---------------------------+-------------+ + | ecdsa-with-SHA256 | iso(1) member-body(2) |_ECDSA_: | + | | us(840) ansi- |[RFC5758] | + | | X9-62(10045) | | + | | signatures(4) ecdsa- | | + | | with-SHA2(3) 2 | | + +-------------------------+---------------------------+-------------+ + | ecdsa-with-SHA512 | iso(1) member-body(2) |_ECDSA_: | + | | us(840) ansi- |[RFC5758] | + | | X9-62(10045) | | + | | signatures(4) ecdsa- | | + | | with-SHA2(3) 4 | | + +-------------------------+---------------------------+-------------+ + | sha256WithRSAEncryption | iso(1) member-body(2) |_RSAES-PKCS- | + | | us(840) rsadsi(113549) |v1_5_: | + | | pkcs(1) pkcs-1(1) 11 |[RFC8017] | + +-------------------------+---------------------------+-------------+ + | sha512WithRSAEncryption | iso(1) member-body(2) |_RSAES-PKCS- | + | | us(840) rsadsi(113549) |v1_5_: | + | | pkcs(1) pkcs-1(1) 13 |[RFC8017] | + +-------------------------+---------------------------+-------------+ + | id-RSASA-PSS | iso(1) member-body(2) |_RSASSA-PSS_:| + | | us(840) rsadsi(113549) |[RFC8017] | + | | pkcs(1) pkcs-1(1) 10 | | + +-------------------------+---------------------------+-------------+ + + Table 10: Component Signature Algorithms used in Composite + Constructions + + +=================+=================================+===============+ + | Elliptic | OID | Specification | + | CurveID | | | + +=================+=================================+===============+ + | secp256r1 | iso(1) member-body(2) | [RFC6090] | + | | us(840) ansi-x962(10045) | | + | | curves(3) prime(1) 7 | | + +-----------------+---------------------------------+---------------+ + | secp384r1 | iso(1) identified- | [RFC6090] | + | | organization(3) | | + | | certicom(132) curve(0) 34 | | + +-----------------+---------------------------------+---------------+ + | brainpoolP256r1 | iso(1) identified- | [RFC5639] | + | | organization(3) | | + | | teletrust(36) algorithm(3) | | + | | signatureAlgorithm(3) | | + | | ecSign(2) | | + | | ecStdCurvesAndGeneration(8) | | + | | ellipticCurve(1) | | + | | versionOne(1) 7 | | + +-----------------+---------------------------------+---------------+ + | brainpoolP384r1 | iso(1) identified- | [RFC5639] | + | | organization(3) | | + | | teletrust(36) algorithm(3) | | + | | signatureAlgorithm(3) | | + | | ecSign(2) | | + | | ecStdCurvesAndGeneration(8) | | + | | ellipticCurve(1) | | + | | versionOne(1) 11 | | + +-----------------+---------------------------------+---------------+ + + Table 11: Elliptic Curves used in Composite Constructions + + +===========+=================================+===============+ + | HashID | OID | Specification | + +===========+=================================+===============+ + | id-sha256 | joint-iso-itu-t(2) country(16) | [RFC6234] | + | | us(840) organization(1) | | + | | gov(101) csor(3) | | + | | nistAlgorithms(4) hashAlgs(2) 1 | | + +-----------+---------------------------------+---------------+ + | id-sha512 | joint-iso-itu-t(2) country(16) | [RFC6234] | + | | us(840) organization(1) | | + | | gov(101) csor(3) | | + | | nistAlgorithms(4) hashAlgs(2) 3 | | + +-----------+---------------------------------+---------------+ + + Table 12: Hash algorithms used in Composite Constructions + +Appendix B. Component AlgorithmIdentifiers for Public Keys and + Signatures + + 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. + + 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. + +B.1. ML-DSA-44 + +B.1.1. AlgorithmIdentifier of Public Key and Signature + + 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 + +B.2. ML-DSA-65 + +B.2.1. AlgorithmIdentifier of Public Key and Signature + + 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 + +B.3. ML-DSA-87 + +B.3.1. AlgorithmIdentifier of Public Key and Signature + + 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 + +B.4. RSA PSS 2048 + +B.4.1. AlgorithmIdentifier of Public Key + + 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 + +B.4.2. AlgorithmIdentifier of Signature + + 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 + +B.5. RSA PSS 3072 & 4096 + +B.5.1. AlgorithmIdentifier of Public Key + + 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 + +B.5.2. AlgorithmIdentifier of Signature + + 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 + +B.6. RSA PKCS 1.5 2048 + +B.6.1. AlgorithmIdentifier of Public Key + + 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 + +B.6.2. AlgorithmIdentifier of Signature + + 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 + +B.7. RSA PKCS 1.5 3072 & 4096 + +B.7.1. AlgorithmIdentifier of Public Key + + 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 + +B.7.2. AlgorithmIdentifier of Signature + + 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 + +B.8. EC NIST 256 + +B.8.1. AlgorithmIdentifier of Public Key + + 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 + +B.8.2. AlgorithmIdentifier of Signature + + 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 + +B.9. EC NIST-384 + +B.9.1. AlgorithmIdentifier of Public Key + + 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 + +B.9.2. AlgorithmIdentifier of Signature + + 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 + +B.10. EC Brainpool-256 + +B.10.1. AlgorithmIdentifier of Public Key + + 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 + +B.10.2. AlgorithmIdentifier of Signature + + 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 + +B.11. EC Brainpool-384 + +B.11.1. AlgorithmIdentifier of Public Key + + 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 + +B.11.2. AlgorithmIdentifier of Signature + + 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 + +B.12. Ed25519 + +B.12.1. AlgorithmIdentifier of Public Key + + ASN.1: + + algorithm AlgorithmIdentifier ::= { + algorithm id-Ed25519 -- (1.3.101.112) + } + + DER: + + 30 05 06 03 2B 65 70 + +B.12.2. AlgorithmIdentifier of Signature + + ASN.1: + + signature AlgorithmIdentifier ::= { + algorithm id-Ed25519 -- (1.3.101.112) + } + + DER: + + 30 05 06 03 2B 65 70 + +B.13. Ed448 + +B.13.1. AlgorithmIdentifier of Public Key + + ASN.1: + + algorithm AlgorithmIdentifier ::= { + algorithm id-Ed448 -- (1.3.101.113) + } + + DER: + + 30 05 06 03 2B 65 71 + +B.13.2. AlgorithmIdentifier of Signature + + ASN.1: + + signature AlgorithmIdentifier ::= { + algorithm id-Ed448 -- (1.3.101.113) + } + + DER: + + 30 05 06 03 2B 65 71 + +Appendix C. Samples + +C.1. Explicit Composite Signature Examples + +C.1.1. MLDSA44-ECDSA-P256-SHA256 Public Key + + -----BEGIN PUBLIC KEY----- + MIIFfzANBgtghkgBhvprUAgBBAOCBWwAMIIFZwSCBSAA9DTYoQys3PVrayi9zTam + kTzpqf6vuNI5+UaMENvnrq3Rps5LmiQ5gSXaQMu0HYjVpCEQVQWl/8nbJavELelk + gCVn528ndGBQUChAnffxhRdxgaFmOb2SEySTnHIh6QO1UFPO2kGiGx9zU6F9xZGK + FZFBm8B076UvRHCbaw+BTvu4o+Kg1irOFRPI3hLN4ku3si2nwWSZNhDoiLaPTfJe + 7TRziBznEyrnSV3I2Xn7QdKxIWUFOwPXWBnnk/FGG/A2HdxGpiqIWxZ0gNLNcb+j + Cz6CWZSJhoOLoJWdOD5zyojPPrH5iFIGM96p0PZ4mv5PhmZDPA/RTIg/PcG1rywn + OJYqAsazntGyEhHEFLRe8QYOVEbiBuv20tNzkFaaulQRdW+boStcW8NefSkKG/9D + FgGnyR87W4Z/ieHEyIva4FBamvRm60xrblAyI0Z7II4l7LTStDzL/ghFq06RVria + au+mY5laq8rAGmRbWkUxNeKeGOVHxjGFYB3uaAkHef0o7tSMMkCSSjiDQlNk5ReQ + xgJMkuTRE7YRN1bDXv/0uPPjg7zfa3M0tMCD9wTXFhIk04HDLVV5WAsH0EK6Nytd + gqnsjGCwfZb2+Fw/QytBei50DUBHpIG3da4dBrxcaRTMiQPzPzL8FaDascE0ZIJM + 9ilKvxgq02ryEHLGALFN8eZD1r6zq43KFlRzaynWBWqJ27MiUzK2dk8oC+dH5cz6 + +xGXAhLJ+MipoO9k9dLg8re3dOAufsKaY5DLuuluo7dO6IF7rG9xblbiIzWpyfu3 + 7kJvUdwk36QzsQNGsxpELk65LaWYnaebV7wKyIaaniLysuNCG0dIcAicxRNLgpX9 + jic5pi+BzlJI1IuPk+DqOG57pNnU7lTg3op08MUslNyeUH5yaag8DNsLG7uZHzvx + jcqffaqcqS+v6FVmbV2tDF07jn8a754Fnn/QNgsNcdfw9Ov4w7Ty+q5nT2wg2Lsg + bAuzN6b6FiWEuHHMw/I5aIL5cLj2GUpjHtlUHL4KEHpxZ2J5jbBgeqpTWEy1TuPQ + R34lryVASmue/kmk2liah6wNK5RXlGa8uidBm7RT8b5SkIMsrosLx9KpC5lKobzn + 8ttK1NSy0ZuMDw9wtnePUbROGjEuw5Na/K1VgO68dATj/7rscvz7C+ZuQORrt88X + +OZmoyw+fEDWAocDnhzI6rJIHLPB0p+rSJ8iSKZpFZYeIy+CD0t6E98RJQHll8BJ + lLyJiMT0xAyelOMzrCJayHxD01aLw6LLOddFbiIRMq4lni5Ha4noWmdO2C80xy3A + jskUEK5sbD8KFl910JUHwaGvb/gDCqW+n10mRa9+cB0tRVjo5OZeSiB01Bkagu7a + f+bRv2i8cBa2ZoGVyW3xFFFhIkHzLgHaU+RLaGwJDe0qxKtwKYz5c/YpAsH+lodM + NV2E/PzHtNY+sg0PijblN6IVO+yiLkxJspKIjf0I1+s8hczhz3QkLRed7dU2nvID + puJQfgraKyS6rawlqLyWo66/PDtdd3tngw50wnDNZik0hz/usDc6o7IN5J9ha7XO + 0vZQluMb9R5l+W6RLD2nRd4mlKVqm/Yfq0R8PKoIh8f7uLVk1kbN4prkfpsokvqR + rli5h4URG7WCNvp4bg/i1Ix/CEEjH56LRj83dhVB0O6WXorrZMAChQShMhwnEgeS + USaB5au7xRAM+9fWvF9cmju3hXSTT1zv0owyoSgp36OHcy2HzwZXxA7YWtRDbhMX + BEEEkSZvSVDhZlBXhAkaTBxlrRt624URpHlDVrd0njnPiR92XNs+NTjjvAImETMh + EPbQ/KPspugi6gkrLFhcmy/OiA== + -----END PUBLIC KEY----- + +C.1.2. MLDSA44-ECDSA-P256 Private Key + + -----BEGIN PRIVATE KEY----- + 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 + pugi6gkrLFhcmy/OiA== + -----END PRIVATE KEY----- + +C.1.3. MLDSA44-ECDSA-P256 Self-Signed X509 Certificate + + -----BEGIN CERTIFICATE----- + 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 + 1nbSe/5A4mF87n0= + -----END CERTIFICATE----- + +Appendix D. Implementation Considerations + +D.1. FIPS certification + + 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. + + 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. + + 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. + +D.2. Backwards Compatibility + + 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. + + 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 [RFC8446] and IKEv2 + [RFC7296], to non-negotiated asynchronous protocols such as S/MIME + signed email [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 + [RFC5652] signed structures. Composite simplifies the protocol + design work because it can be implemented as a signature algorithm + that fits into existing systems. + +D.2.1. Hybrid Extensions (Keys and Signatures) + + 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. + +Appendix E. Intellectual Property Considerations + + The following IPR Disclosure relates to this draft: + + https://datatracker.ietf.org/ipr/3588/ + +Appendix F. Contributors and Acknowledgements + + 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: + + 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) and 林邦曄 (Austin Lin, Chunghwa Telecom) + + We especially want to recognize the contributions of Dr. Britta Hale + who has helped immensly with strengthening the signature combiner + construction, and with analyzing the scheme with respect to EUF-CMA + and Non-Separability properties. + + 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. + + 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" - + [RFC8411]. + +F.1. Making contributions + + Additional contributions to this draft are welcome. Please see the + working copy of this draft at, as well as open issues at: + + https://github.com/lamps-wg/draft-composite-sigs + +Authors' Addresses + + Mike Ounsworth + Entrust Limited + 2500 Solandt Road – Suite 100 + Ottawa, Ontario K2K 3G5 + Canada + Email: mike.ounsworth@entrust.com + + + John Gray + Entrust Limited + 2500 Solandt Road – Suite 100 + Ottawa, Ontario K2K 3G5 + Canada + Email: john.gray@entrust.com + + + Massimiliano Pala + OpenCA Labs + New York City, New York, + United States of America + Email: director@openca.org + + + Jan Klaussner + Bundesdruckerei GmbH + Kommandantenstr. 18 + 10969 Berlin + Germany + Email: jan.klaussner@bdr.de + + + Scott Fluhrer + Cisco Systems + Email: sfluhrer@cisco.com diff --git a/6-CompactPrivateKey/index.html b/6-CompactPrivateKey/index.html new file mode 100644 index 0000000..28558da --- /dev/null +++ b/6-CompactPrivateKey/index.html @@ -0,0 +1,45 @@ + + + + lamps-wg/draft-composite-sigs 6-CompactPrivateKey preview + + + + +

Editor's drafts for 6-CompactPrivateKey branch of lamps-wg/draft-composite-sigs

+ + + + + + +
PQ Composite ML-DSAplain textsame as main
+ + + diff --git a/index.html b/index.html index 5bd58c5..c37d47b 100644 --- a/index.html +++ b/index.html @@ -64,6 +64,14 @@

Preview for branch integrate_issue35_w diff with main +

Preview for branch 6-CompactPrivateKey

+ + + + + + +
PQ Composite ML-DSAplain textdiff with main

Preview for branch mikeo_digicert_feedback