<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-chen-lamps-fndsa-composite-sigs-00" category="std" consensus="true" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="Composite FN-DSA">==Composite FN-DSA for use in X.509 Public Key Infrastructure==</title>
    <seriesInfo name="Internet-Draft" value="draft-chen-lamps-fndsa-composite-sigs-00"/>
    <author initials="M." surname="Chen" fullname="Meiling Chen">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <city>BeiJing</city>
          <country>China</country>
        </postal>
        <email>chenmeiling@chinamobile.com</email>
      </address>
    </author>
    <author initials="M." surname="Zhang" fullname="Mengyuan Zhang">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <city>BeiJing</city>
          <country>China</country>
        </postal>
        <email>zhangmengyuanwl@chinamobile.com</email>
      </address>
    </author>
    <author initials="X." surname="Song" fullname="Xueyan Song">
      <organization>ZTE Corp.</organization>
      <address>
        <email>song.xueyan2@zte.com.cn</email>
      </address>
    </author>
    <date year="2026" month="October" day="23"/>
    <area>Security</area>
    <workgroup>LAMPS</workgroup>
    <keyword>Post-Quantum</keyword>
    <keyword>PQC</keyword>
    <keyword>Composite Signature</keyword>
    <keyword>Hybrid Signature</keyword>
    <keyword>X.509</keyword>
    <keyword>PKIX</keyword>
    <keyword>FN-DSA</keyword>
    <keyword>Falcon</keyword>
    <abstract>
      <?line 55?>

<t>To facilitate a robust and secure transition to post-quantum cryptography, this document defines a method for creating composite signature algorithms by combining the Fast-Fourier Transform over NTRU-Lattice-Based Digital Signature Algorithm (FN-DSA) with modern classical signature algorithms. These composite algorithms are treated as new, atomic primitives.</t>
      <t>This document specifies algorithm identifiers, public key structures, and signature formats for using these composite algorithms within the Internet X.509 Public Key Infrastructure. The methodology is designed to align with modern cryptographic practices, including a principle of strict security level alignment, ensuring a consistent and predictable security posture for all defined algorithms.</t>
    </abstract>
  </front>
  <middle>
    <?line 61?>

<section anchor="introduction">
      <name>1. Introduction</name>
      <t>The Fast-Fourier Transform over NTRU-Lattice-Based Digital Signature Algorithm (FN-DSA) <xref target="FIPS206"/>, formerly known as Falcon, is a post-quantum signature scheme standardized by the U.S. National Institute of Standards and Technology (NIST). The conventions for using standalone FN-DSA in X.509 certificates are specified in <xref target="I-D.turner-lamps-fn-dsa-certificates"/>.</t>
      <t>During the transition to post-quantum cryptography, regulatory guidance and organizational security policies may call for post-quantum/traditional (PQ/T) hybrid signatures [RFC9794]. Combining FN-DSA with a traditional signature algorithm can support these requirements while providing protection against quantum computing threats and potential unforeseen weaknesses in FN-DSA.</t>
      <t>To support interoperable deployment in existing public key infrastructures, this document specifies a set of composite signature algorithms that combine FN-DSA with selected traditional signature algorithms to ensure that the overall security is at least as strong as that of the stronger component. Each composite algorithm presents a single public key and signature value to applications and is used as a single signature algorithm. The combinations use the pure variant of FN-DSA and follow a <strong>Strict Security Level Alignment</strong> policy, under which each FN-DSA parameter set is paired with a traditional algorithm and parameter set of a corresponding NIST security level. </t>
      <t>To enable interoperable use of these algorithms in X.509 certificates and CRLs <xref target="RFC5280"/>, this document specifies the encodings for composite public keys and signatures, assigns Object Identifiers (OIDs) to the composite algorithms, and defines the associated PKI conventions.</t>
      <section anchor="terminology">
        <name>2. Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC8174">RFC2119</xref>.</t>
        <t>Readers are expected to be familiar with the terms and concepts described in X.509 <xref target="RFC5280"/> and FN-DSA <xref target="FIPS206"/>. This document follows the terminology for post-quantum/traditional (PQ/T) hybrid schemes defined in [RFC9794] and uses the following terms:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Composite FN-DSA:</strong> A PQ/T hybrid composite signature scheme that combines FN-DSA with a traditional signature algorithm and exposes the combination through a single signature-scheme interface.</t>
          </li>
          <li>
            <t><strong>Composite Signature:</strong> A signature value produced by a Composite FN-DSA scheme, incorporating an FN-DSA signature value and a traditional signature value.</t>
          </li>
          <li>
            <t><strong>Composite Public Key:</strong> A public key of a Composite FN-DSA scheme, incorporating an FN-DSA public key and the corresponding traditional public key.</t>
          </li>
          <li>
            <t><strong>Security Level:</strong> A NIST classification of post-quantum cryptographic security based on the computational resources required to attack specified reference primitives.</t>
          </li>
          <li>
            <t><strong>Classical Security Strength:</strong> An estimate, expressed in bits, of the computational effort required to break a cryptographic algorithm using classical computing resources.</t>
          </li>
        </ul>
      </section>
      <section anchor="composite-signature-algorithms-and-security-levels">
        <name>3. Composite Signature Algorithms and Security Levels</name>
        <t>This document standardizes algorithms for two distinct security targets:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Level 1 (128-bit security):</strong> For broad, general-purpose use.</t>
          </li>
          <li>
            <t><strong>Level 5 (256-bit security):</strong> For high-security, long-term applications.</t>
          </li>
        </ul>
        <t>The following table summarizes the standardized algorithms and their component alignment.</t>
        <artwork><![CDATA[
+-----------+---------------------------------+---------------------+
| Security  | Composite Algorithm             | Component Alignment |
| Level     |                                 | (PQC + Traditional) |
+-----------+---------------------------------+---------------------+
|           |                                 |                     |
| Level 1   | fndsa512-ecdsa-p256-sha256      | L1 + 128 bits       |
|           |                                 |                     |
|           | fndsa512-ed25519-sha256         | L1 + ≈128 bits      |
|           |                                 |                     |
|           | fndsa512-rsa3072-pss-sha256     | L1 + 128 bits       |
|           |                                 |                     |
|           | fndsa512-rsa3072-pkcs15-sha256  | L1 + 128 bits       |
|           |                                 |                     |
+-----------+---------------------------------+---------------------+
|           |                                 |                     |
| Level 5   | fndsa1024-ecdsa-p521-sha512     | L5 + 256 bits       |
|           |                                 |                     |
|           | fndsa1024-ed448-sha512          | L5 + 224 bits       |
|           |                                 |                     |
+-----------+---------------------------------+---------------------+

      Table 1: Defined Composite Algorithms
]]></artwork>
        <t>Combinations with significant security level mismatches, such as pairing a Level 5 post-quantum algorithm with a Level 2 classical algorithm (e.g., RSA-4096), are explicitly <strong>NOT RECOMMENDED</strong> and are excluded from this standard to maintain a robust security model. For legacy compatibility reasons, other profiles MAY define a composite with <tt>rsa-2048</tt>, but this is discouraged. <tt>fndsa512-rsa3072-pss-sha256</tt> is the RECOMMENDED Level 1 RSA-based composite.</t>
      </section>
      <section anchor="algorithm-identifiers-and-parameters">
        <name>4. Algorithm Identifiers and Parameters</name>
        <t>Each composite signature algorithm defined in this document is identified by a distinct Object Identifier (OID). These OIDs are used in the algorithm field of the AlgorithmIdentifier structure defined in <xref target="RFC5280"/>:</t>
        <t><tt>
AlgorithmIdentifier ::= SEQUENCE {
    algorithm   OBJECT IDENTIFIER,
    parameters  ANY DEFINED BY algorithm OPTIONAL
}
</tt></t>
        <t>Each composite algorithm OID identifies a fixed combination of component algorithms, component parameters, a pre-hash function (PH), and a domain-separation label.</t>
        <t>All FN-DSA components use the pure variant. The pre-hash function listed for each composite algorithm is applied at the composite layer and does not select the pre-hash variant of FN-DSA. Any hashing performed internally by a component signature algorithm remains part of that component algorithm.</t>
        <t>The following algorithms and parameters are defined:</t>
        <ul spacing="normal">
          <li>
            <t><strong>id-fndsa512-ecdsa-p256-sha256</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>OID: TBD1</t>
              </li>
              <li>
                <t>Label: COMPSIG-FNDSA512-ECDSA-P256-SHA256</t>
              </li>
              <li>
                <t>Pre-hash function (PH): SHA256</t>
              </li>
              <li>
                <t>FN-DSA parameter set: FN-DSA-512</t>
              </li>
              <li>
                <t>Traditional algorithm: ECDSA
      - Traditional signature algorithm: ecdsa-with-SHA256
          - Elliptic curve: secp256r1</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>id-fndsa512-ed25519-sha256</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>OID: TBD2</t>
              </li>
              <li>
                <t>Label: COMPSIG-FNDSA512-ED25519-SHA256</t>
              </li>
              <li>
                <t>Pre-hash function (PH): SHA256</t>
              </li>
              <li>
                <t>FN-DSA parameter set: FN-DSA-512</t>
              </li>
              <li>
                <t>Traditional algorithm: Ed25519
      - Traditional signature algorithm: id-Ed25519</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>id-fndsa512-rsa3072-pss-sha256</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>OID: TBD3</t>
              </li>
              <li>
                <t>Label: COMPSIG-FNDSA512-RSA3072-PSS-SHA256</t>
              </li>
              <li>
                <t>Pre-hash function (PH): SHA256</t>
              </li>
              <li>
                <t>FN-DSA parameter set: FN-DSA-512</t>
              </li>
              <li>
                <t>Traditional Algorithm: RSA
      - Traditional signature algorithm: id-RSASSA-PSS
      - RSA size: 3072
      - ==RSASSA-PSS message hash: id-sha256==
      - ==Mask generation function: MGF1 with SHA-256==
      - ==Salt length: 32 octets==
      - ==Trailer field: 1, corresponding to the trailer octet 0xBC==</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>id-fndsa1024-ecdsa-p521-sha512</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>OID: TBD4</t>
              </li>
              <li>
                <t>Label: COMPSIG-FNDSA1024-ECDSA-P521-SHA512</t>
              </li>
              <li>
                <t>Pre-hash function (PH): SHA-512</t>
              </li>
              <li>
                <t>FN-DSA parameter set: FN-DSA-1024</t>
              </li>
              <li>
                <t>Traditional Algorithm: ECDSA
      - Traditional Signature Algorithm: ecdsa-with-SHA512
      - ECDSA curve: secp521r1</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>id-fndsa1024-ed448-sha512</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>OID: TBD5</t>
              </li>
              <li>
                <t>Label: COMPSIG-FNDSA1024-Ed448-SHA512</t>
              </li>
              <li>
                <t>Pre-hash function (PH): SHA-512</t>
              </li>
              <li>
                <t>FN-DSA parameter set: FN-DSA-1024</t>
              </li>
              <li>
                <t>Traditional Algorithm: Ed448
      - Traditional signature algorithm: Ed448</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each Label is the ASCII encoding of the exact string listed above, without a terminating NUL octet.</t>
        <t>The Ed25519 and Ed448 components MUST use the pure variants defined in <xref target="RFC8032"/>. Ed25519ph, Ed25519ctx, and Ed448ph MUST NOT be used. The Ed448 component MUST use an empty context string.</t>
        <t>The RSASSA-PSS component requires additional parameters as defined in <xref target="RFC8017"/>. For id-fndsa512-rsa3072-pss-sha256, these parameters MUST have the following values:</t>
        <table>
          <thead>
            <tr>
              <th align="left">RSASSA-PSS-params field</th>
              <th align="left">Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">hashAlgorithm</td>
              <td align="left">id-sha256</td>
            </tr>
            <tr>
              <td align="left">maskGenAlgorithm.algorithm</td>
              <td align="left">id-mgf1</td>
            </tr>
            <tr>
              <td align="left">maskGenAlgorithm.parameters</td>
              <td align="left">AlgorithmIdentifier identifying SHA-256</td>
            </tr>
            <tr>
              <td align="left">saltLength</td>
              <td align="left">32</td>
            </tr>
            <tr>
              <td align="left">trailerField</td>
              <td align="left">1</td>
            </tr>
          </tbody>
        </table>
        <t>The <tt>parameters</tt> field of <tt>AlgorithmIdentifier</tt> MUST be absent for all composite algorithm identifiers defined in this section. It MUST NOT contain an ASN.1 <tt>NULL</tt> value. This requirement also applies to composites using RSASSA-PSS: the RSASSA-PSS parameters are fixed by the composite algorithm identifier, and no <tt>RSASSA-PSS-params</tt> structure is carried in the <tt>parameters</tt> field.</t>
        <t>The OID values are pending assignment. TBD1 through TBD5 are editorial placeholders and are not valid OID values.</t>
      </section>
      <section anchor="composite-fn-dsa-signature-scheme">
        <name>5. Composite FN-DSA Signature Scheme</name>
        <t>This section specifies the serialization and deserialization of composite keys and signature values, together with the key generation, signature generation, and signature verification operations.</t>
        <t>Each operation is instantiated for a composite algorithm identifier defined in Section 4. The identifier determines the FN-DSA parameter set, the traditional signature algorithm and its parameters, the composite-layer pre-hash function PH, and the domain-separation Label. These values are fixed for that identifier and are not independently selectable by the caller.</t>
        <section anchor="serialization-and-deserialization">
          <name>5.1. Serialization and Deserialization</name>
          <t>The functions in this section convert component keys and signatures to and from composite octet strings. Each function is instantiated for a composite algorithm identifier defined in Section 4, which determines the component algorithms, parameters, and encodings.</t>
          <t>Deserialization returns ERROR if the input is malformed or does not conform to the requirements for the selected composite algorithm. Each component decoder MUST consume its entire assigned input; trailing octets MUST NOT be ignored.</t>
          <ul empty="true">
            <li>
              <t>EDITOR'S NOTE: The FN-DSA seed length, encoding, and key reconstruction procedure are to be confirmed against the finalized <xref target="FIPS206"/>. This note is to be removed when those dependencies are resolved.</t>
            </li>
          </ul>
          <section anchor="public-keys">
            <name>5.1.1. Public Keys</name>
            <t>The public-key serialization and deserialization functions are:</t>
            <t><tt>
Composite-FN-DSA.SerializePublicKey(pk_fndsa, pk_trad) -&gt; pk
Composite-FN-DSA&lt;OID&gt;.DeserializePublicKey(pk) 
        -&gt; (pk_fndsa, pk_trad) or ERROR
</tt></t>
            <t><tt>OID</tt> is one of the composite algorithm OIDs defined in Section 4 and determines the component algorithms and parameters.</t>
            <t>The serialized public key is:</t>
            <t><tt>
pk = pk_fndsa || pk_trad
</tt></t>
            <t><tt>pk_fndsa</tt> is the raw FN-DSA public-key encoding specified in <xref target="FIPS206"/>, without an ASN.1 wrapper. Its length is 897 octets for FN-DSA-512 and 1793 octets for FN-DSA-1024.</t>
            <t><tt>pk_trad</tt> MUST be encoded as follows:</t>
            <ul spacing="normal">
              <li>
                <t><strong>ECDSA P-256:</strong> The 65-octet uncompressed point encoding <tt>0x04 || X || Y</tt>, with each coordinate encoded in 32 octets, as specified in [RFC5480].</t>
              </li>
              <li>
                <t><strong>ECDSA P-521:</strong> The 133-octet uncompressed point encoding <tt>0x04 || X || Y</tt>, with each coordinate encoded in 66 octets, as specified in [RFC5480].</t>
              </li>
              <li>
                <t><strong>Ed25519:</strong> The 32-octet public-key encoding specified in <xref target="RFC8032"/>.</t>
              </li>
              <li>
                <t><strong>Ed448:</strong> The 57-octet public-key encoding specified in <xref target="RFC8032"/>.</t>
              </li>
              <li>
                <t><strong>RSA-3072:</strong> The DER encoding of the <tt>RSAPublicKey</tt> structure specified in <xref target="RFC8017"/>, containing a modulus of exactly 3072 bits and its public exponent.</t>
              </li>
            </ul>
            <t>Compressed and hybrid ECDSA point encodings MUST NOT be used.</t>
            <t>Deserialization determines the FN-DSA public-key length <tt>L</tt> from the parameter set identified by <tt>OID</tt> and splits the input as follows:</t>
            <t><tt>
pk_fndsa = pk[0:L]
pk_trad  = pk[L:]
</tt></t>
            <t>The input MUST contain both components. Each component MUST have the required encoding and satisfy the public-key validation requirements of the selected algorithm.</t>
          </section>
          <section anchor="private-keys">
            <name>5.1.2. Private Keys</name>
            <t>The private-key serialization and deserialization functions are:</t>
            <t><tt>
Composite-FN-DSA.SerializePrivateKey(seed_fndsa, sk_trad) -&gt; sk
Composite-FN-DSA.DeserializePrivateKey(sk) 
        -&gt; (seed_fndsa, sk_trad)
</tt></t>
            <t>The serialized private key is:</t>
            <t><tt>
sk = seed_fndsa || sk_trad
</tt></t>
            <t><tt>seed_fndsa</tt> is the 32-octet FN-DSA key-generation seed, included directly without an ASN.1 wrapper.</t>
            <t><tt>sk_trad</tt> MUST be encoded as follows:</t>
            <ul spacing="normal">
              <li>
                <t><strong>ECDSA P-256:</strong> The private scalar <tt>d</tt> encoded as a 32-octet unsigned, big-endian integer.</t>
              </li>
              <li>
                <t><strong>ECDSA P-521:</strong> The private scalar <tt>d</tt> encoded as a 66-octet unsigned, big-endian integer.</t>
              </li>
              <li>
                <t><strong>Ed25519:</strong> The 32-octet private-key seed specified in <xref target="RFC8032"/>.</t>
              </li>
              <li>
                <t><strong>Ed448:</strong> The 57-octet private-key seed specified in <xref target="RFC8032"/>.</t>
              </li>
              <li>
                <t><strong>RSA-3072:</strong> The DER encoding of the two-prime <tt>RSAPrivateKey</tt> structure specified in <xref target="RFC8017"/>, with <tt>version</tt> equal to 0 and all CRT fields present.</t>
              </li>
            </ul>
            <t>For ECDSA, leading zero octets needed to obtain the required length MUST be retained, and the scalar MUST satisfy <tt>1 &lt;= d &lt; n</tt>, where <tt>n</tt> is the selected curve's base-point order. No <tt>ECPrivateKey</tt> wrapper is included. For EdDSA, the encoding contains only the seed, without an appended public key or expanded signing representation.</t>
            <t>Serialization encodes the component private-key material as specified above and concatenates it in the indicated order.</t>
            <t>Deserialization requires an input longer than 32 octets and splits it as follows:</t>
            <t><tt>
seed_fndsa = sk[0:32]
sk_trad    = sk[32:]
</tt></t>
            <t>The traditional component MUST have the required encoding and satisfy the private-key validation requirements of the selected algorithm.</t>
          </section>
          <section anchor="signature-values">
            <name>5.1.3. Signature Values</name>
            <t>The signature serialization and deserialization functions are:</t>
            <t><tt>
Composite-FN-DSA.SerializeSignatureValue(sig_fndsa, sig_trad) -&gt; sig
Composite-FN-DSA&lt;OID&gt;.DeserializeSignatureValue(sig) 
        -&gt; (sig_fndsa, sig_trad) or ERROR
</tt></t>
            <t>The serialized signature is:</t>
            <t><tt>
sig = sig_fndsa || sig_trad
</tt></t>
            <ul empty="true">
              <li>
                <t>EDITOR'S NOTE: This document assumes a fixed-length FN-DSA signature encoding. The encoding and lengths are to be confirmed against the finalized <xref target="FIPS206"/>. This note is to be removed once that specification is finalized and the corresponding definitions in this document have been updated.</t>
              </li>
            </ul>
            <t><tt>sig_fndsa</tt> MUST use the signature encoding specified in <xref target="FIPS206"/> for the selected parameter set, including any required padding. Its encoded length MUST be between 1 and 65535 octets and MUST satisfy any tighter limits imposed by that specification.</t>
            <t><tt>sk_trad</tt> MUST be encoded as follows:</t>
            <ul spacing="normal">
              <li>
                <t><strong>ECDSA:</strong> The DER encoding of <tt>Ecdsa-Sig-Value</tt> specified in [RFC3279], containing the signature integers <tt>r</tt> and <tt>s</tt>.</t>
              </li>
              <li>
                <t><strong>Ed25519:</strong> The 64-octet signature encoding specified in <xref target="RFC8032"/>.</t>
              </li>
              <li>
                <t><strong>Ed448:</strong> The 114-octet signature encoding specified in <xref target="RFC8032"/>.</t>
              </li>
              <li>
                <t><strong>RSASSA-PSS with RSA-3072:</strong> The 384-octet signature encoding specified in <xref target="RFC8017"/>, retaining any leading zero octets.</t>
              </li>
            </ul>
            <t>Deserialization determines the FN-DSA signature length <tt>L</tt> from the parameter set identified by <tt>OID</tt> and splits the input as follows:</t>
            <t><tt>
sig_fndsa = sig[:L]
sig_trad  = sig[L:]
</tt></t>
            <t>Each resulting component MUST have the required encoding. Fixed-length traditional signatures MUST have exactly the specified length.</t>
            <t>Successful deserialization does not establish signature validity. Both component signatures MUST subsequently be verified as specified in Section 5.4.</t>
          </section>
        </section>
        <section anchor="key-generation">
          <name>5.2. Key Generation</name>
          <t>The <tt>KeyGen()</tt> function for a given Composite FN-DSA algorithm represented by <tt>OID</tt> is defined as:</t>
          <t><tt>
Composite-ML-DSA&lt;OID&gt;.KeyGen() -&gt; (pk, sk) or ERROR
</tt></t>
          <t><tt>OID</tt> MUST identify one of the composite algorithms defined in Section 4.</t>
          <t>The operation proceeds as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>==Generate an FN-DSA key pair== <tt>pk_fndsa</tt> for the selected parameter set according to <xref target="FIPS206"/>, retaining the key-generation seed required by Section 5.1.2.（因为标准没出无法展开写）</t>
            </li>
            <li>
              <t>==Generate a traditional key pair== <tt>pk_trad</tt> according to the selected traditional signature algorithm and its parameter requirements.</t>
            </li>
            <li>
              <t>Compute the composite public key and private key:
     <tt>
     pk = SerializePublicKey(alg, pk_fndsa, pk_trad)
     sk = SerializePrivateKey(alg, seed_fndsa, sk_trad)
                </tt></t>
            </li>
            <li>
              <t>Return <tt>(pk, sk)</tt>. If either component key generation or serialization fails, return <tt>ERROR</tt> and do not return a partial composite key pair.</t>
            </li>
          </ol>
        </section>
        <section anchor="signature-generation">
          <name>5.3. Signature Generation</name>
          <t>The composite signature-generation operation accepts a message <tt>M</tt>, a composite private key <tt>sk</tt>, and an optional context string <tt>ctx</tt>. If no context is supplied, <tt>ctx</tt> is the empty octet string.</t>
          <t>The <tt>Sign()</tt> function for a given Composite FN-DSA algorithm represented by <tt>OID</tt> is defined as:</t>
          <t><tt>
Composite-FN-DSA&lt;OID&gt;.Sign(sk, M, ctx) -&gt; sig
</tt></t>
          <t>The message and context are octet strings. Their interpretation by an application is outside the scope of this section. The context string MUST be at most 255 octets long. An implementation MUST reject a longer context; it MUST NOT truncate it.</t>
          <t>The operation proceeds as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Compute the Message representative <tt>M'</tt>:
     <tt>
     M' = Prefix || Label || len(ctx) || ctx || PH(M)
                </tt></t>
            </li>
            <li>
              <t>Deserialize the input composite private key:
 <tt>
 (seed_fndsa, sk_trad) = DeserializePrivateKey(sk)
</tt></t>
            </li>
            <li>
              <t>==Reconstruct the FN-DSA signing key== <tt>sk_fndsa</tt> from <tt>seed_fndsa</tt>.</t>
            </li>
            <li>
              <t>Generate the two component signatures independently over the same <tt>M'</tt> according to their algorithm specifications:
 <tt>
 sig_fndsa = FNDSA.Sign(sk_fndsa, M', fndsa_ctx="")
 sig_trad = Trad.Sign(sk_trad, M')
</tt></t>
            </li>
            <li>
              <t>Serialize the component signatures:
 <tt>
 sig = SerializeSignatureValue(alg, sig_fndsa, sig_trad)
</tt></t>
            </li>
            <li>
              <t>Return <tt>sig</tt>. If either component signing operation or serialization fails, return <tt>ERROR</tt>. A partial composite signature MUST NOT be returned.</t>
            </li>
          </ol>
          <t>The fields used to construct <tt>M'</tt> in Step 1 are defined as follows:</t>
          <ul spacing="normal">
            <li>
              <t><tt>Prefix</tt> is the ASCII encoding of the exact string <tt>CompositeFNDSASignatures2026</tt>.</t>
            </li>
            <li>
              <t><tt>Label</tt> is the ASCII-encoded domain-separation label assigned to each <tt>OID</tt> in Section 4.</t>
            </li>
            <li>
              <t><tt>len(ctx)</tt> is the length of <tt>ctx</tt> in octets, encoded as a single unsigned octet.</t>
            </li>
            <li>
              <t><tt>ctx</tt> is the context string supplied to the composite signature-generation operation to bind the signature to an application context.</t>
            </li>
            <li>
              <t><tt>PH(M)</tt> is the result of applying the pre-hash function assigned to <tt>OID</tt> in Section 4 to the complete message <tt>M</tt>.</t>
            </li>
          </ul>
          <t>The component signing operations receive the complete <tt>M'</tt>. The composite-layer pre-hash does not replace hashing performed by a component signature algorithm.</t>
          <t>All randomness required by component signature generation MUST be generated and used according to the respective component specifications. Random values, including signature nonces and salts, MUST NOT be reused across component algorithms.</t>
        </section>
        <section anchor="signature-verification">
          <name>5.4. Signature Verification</name>
          <t>The composite signature-verification operation accepts a message <tt>M</tt>, a composite public key <tt>pk</tt>, a composite signature <tt>sig</tt>, and an optional context string <tt>ctx</tt>. If no context is supplied, <tt>ctx</tt> is the empty octet string.</t>
          <t>The <tt>Verify()</tt> function for a given Composite FN-DSA algorithm represented by <tt>OID</tt> is defined as:</t>
          <t><tt>
Composite-FN-DSA&lt;OID&gt;.Verify(pk, M, sig, ctx) -&gt; VALID or INVALID
</tt></t>
          <t>The component algorithms and parameters are determined by <tt>OID</tt> as specified in Section 4. The verifier MUST use the same context octets as the signer; the context is not recovered from the signature.</t>
          <t>The operation proceeds as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>If <tt>len(ctx) &gt; 255</tt>, return <tt>INVALID</tt>.</t>
            </li>
            <li>
              <t>Deserialize the input composite public key and signature:
 <tt>
 (pk_fndsa, pk_trad) = Composite-FN-DSA&lt;OID&gt;.DeserializePublicKey(pk)
 (sig_fndsa, sig_trad) = 
         Composite-FN-DSA&lt;OID&gt;.DeserializeSignatureValue(sig)
</tt>
 If either deserialization operation returns <tt>ERROR</tt>, return <tt>INVALID</tt>.</t>
            </li>
            <li>
              <t>Reconstruct the message representative <tt>M'</tt> using the construction and field definitions specified in Section 5.3:
 <tt>
 M' = Prefix || Label || len(ctx) || ctx || PH(M)
</tt></t>
            </li>
            <li>
              <t>Verify the two component signatures independently over the same <tt>M'</tt> according to their algorithm specifications:
 <tt>
 valid_fndsa = FNDSA.Verify(pk_fndsa, M', sig_fndsa, fndsa_ctx="")
 valid_trad = Trad.Verify(pk_trad, M', sig_trad)
</tt></t>
            </li>
            <li>
              <t>Return <tt>VALID</tt> if and only if both component verifications succeed. Otherwise, return <tt>INVALID</tt>. Any component processing error MUST result in <tt>INVALID</tt>.</t>
            </li>
          </ol>
          <t>An implementation MAY return <tt>INVALID</tt> as soon as a failure is established, without performing the remaining operations.</t>
        </section>
      </section>
      <section anchor="pkix-profile">
        <name>6. PKIX Profile</name>
        <t>This section provides a profile for the use of composite FN-DSA signature algorithms in the Internet X.509 PKI <xref target="RFC5280"/>.</t>
        <section anchor="certificate-signaturealgorithm-field">
          <name>6.1. Certificate <tt>signatureAlgorithm</tt> Field</name>
          <t>The <tt>signatureAlgorithm</tt> field in a certificate that is signed with a composite algorithm MUST contain the OID of the composite algorithm used.</t>
        </section>
        <section anchor="subject-public-key-info">
          <name>6.2. Subject Public Key Info</name>
          <t>The <tt>subjectPublicKeyInfo</tt> field in a certificate containing a composite public key MUST be populated as follows:
*   The <tt>algorithm</tt> field MUST contain the OID of the composite algorithm.
*   The <tt>subjectPublicKey</tt> field MUST contain the <tt>BIT STRING</tt> representation of the <tt>CompositePublicKey</tt> as defined in Section 5.1.</t>
        </section>
        <section anchor="key-usage">
          <name>6.3. Key Usage</name>
          <t>The <tt>keyUsage</tt> extension in a certificate containing a composite public key SHOULD be marked as <tt>critical</tt>. The <tt>digitalSignature</tt> and/or <tt>nonRepudiation</tt> bits MUST be set. If the key is used to sign certificates, the <tt>keyCertSign</tt> bit MUST be set. If it is used to sign CRLs, the <tt>cRLSign</tt> bit MUST be set.</t>
        </section>
      </section>
      <section anchor="iana-considerations">
        <name>7. IANA Considerations</name>
        <t>This document requests the assignment of five Object Identifiers from a suitable OID arc for the composite signature algorithms defined in Section 4. These OIDs identify the new signature algorithms and are intended for use in X.509 certificates and other cryptographic protocols.</t>
      </section>
      <section anchor="security-considerations">
        <name>8. Security Considerations</name>
        <t>The primary security goal of this specification is to provide <strong>hybrid security</strong>. A composite signature's security is intended to be at least as high as the security of its strongest component. An attacker must break <em>both</em> the FN-DSA component and the classical component to forge a composite signature.</t>
        <t><strong>Security Level Alignment</strong>: This specification mandates the pairing of algorithms with matching or near-matching NIST security levels. This provides a clear and predictable security posture for each composite algorithm, preventing "unbalanced" pairings where one component is significantly weaker than the other. Implementers SHOULD follow this principle when considering extensions.</t>
        <t><strong>Domain Separation</strong>: The domain separation mechanism described in Section 5.2.1 is critical. It ensures that a signature component created for this composite scheme cannot be misinterpreted as a valid standalone signature in another context. Implementers MUST follow the message preparation steps exactly.</t>
        <t><strong>Modern Algorithm Preference</strong>: This specification RECOMMENDS the use of modern elliptic curve algorithms (ECDSA, EdDSA) over RSA. This is due to their superior performance, smaller key and signature sizes, and better resistance to certain types of implementation errors.</t>
        <t><strong>Implementation Security</strong>: All security considerations from the component algorithm specifications (<xref target="FIPS206"/>, <xref target="RFC8017"/>, <xref target="RFC8032"/>, etc.) apply. Implementations must protect against side-channel attacks for all component algorithms.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC5280">
        <front>
          <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
          <author fullname="D. Cooper" initials="D." surname="Cooper"/>
          <author fullname="S. Santesson" initials="S." surname="Santesson"/>
          <author fullname="S. Farrell" initials="S." surname="Farrell"/>
          <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
          <author fullname="R. Housley" initials="R." surname="Housley"/>
          <author fullname="W. Polk" initials="W." surname="Polk"/>
          <date month="May" year="2008"/>
          <abstract>
            <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5280"/>
        <seriesInfo name="DOI" value="10.17487/RFC5280"/>
      </reference>
      <reference anchor="RFC8017">
        <front>
          <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
          <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
          <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
          <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
          <author fullname="A. Rusch" initials="A." surname="Rusch"/>
          <date month="November" year="2016"/>
          <abstract>
            <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
            <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
            <t>This document also obsoletes RFC 3447.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8017"/>
        <seriesInfo name="DOI" value="10.17487/RFC8017"/>
      </reference>
      <reference anchor="RFC8032">
        <front>
          <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
          <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
          <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
          <date month="January" year="2017"/>
          <abstract>
            <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8032"/>
        <seriesInfo name="DOI" value="10.17487/RFC8032"/>
      </reference>
      <reference anchor="I-D.turner-lamps-fn-dsa-certificates">
        <front>
          <title>Internet X.509 Public Key Infrastructure -- Algorithm Identifiers for the Fast-Fourier Transform over NTRU-Lattice-Based Digital Signature Algorithm (FN-DSA)</title>
          <author fullname="Jake Massimo" initials="J." surname="Massimo">
            <organization>AWS</organization>
          </author>
          <author fullname="Panos Kampanakis" initials="P." surname="Kampanakis">
            <organization>AWS</organization>
          </author>
          <author fullname="Sean Turner" initials="S." surname="Turner">
            <organization>sn3rd</organization>
          </author>
          <author fullname="Bas Westerbaan" initials="B." surname="Westerbaan">
            <organization>Cloudflare</organization>
          </author>
          <date day="4" month="November" year="2025"/>
          <abstract>
            <t>   Digital signatures are used within X.509 certificates and Certificate
   Revocation Lists (CRLs), and to sign messages.  This document
   specifies the conventions for using, the forthcoming, FIPS 206, the
   Fast-Fourier Transform over NTRU-Lattice-Based Digital Signature
   Algorithm (FN-DSA), in Internet X.509 certificates and CRLs.  The
   conventions for the associated signatures, subject public keys, and
   private key are also described.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-turner-lamps-fn-dsa-certificates-00"/>
      </reference>
      <reference anchor="FIPS206" target="https://www.nist.gov/news- events/news/2024/08/nist-releases-first-3-finalized-post- quantum-encryption-standards">
        <front>
          <title>FIPS 206, Fast-Fourier-Transform-based Digital Signature Algorithm</title>
          <author>
            <organization>National Institute of Standards and Technology (NIST)</organization>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA81cW3MbR3Z+x6/okh9McjEQAZK6YJeupUjK5i5J0QS1Za9L
ZQwGTWCiwQx2ekCKipLK015+wFYqlRflJyR5SW3tk39KKvbr/oWcS18HA5Hy
dVVlC5rL6dOnz+U7p890FEUtVcX5+Ms4K3LZF1W5kK10XtIvVfU2Nx9v9lpJ
XPWFqsYttRjNUqXSIq9u5vD40eHF01ZcyrgvBjJZlGl107qe9MXx3snZoNUa
F0kez+C5cRlfVlEylXmUxbO5ii7zsYqjpJjNC5VWMlLpREWbm61WlVYZvLC7
u2/uiaen0cFgT1wWpVgoKdJcfNbZ2XwszhajLE3Er+WNOMovy1gBy0m1KOXu
bisejUp51Rd1Kq0szoE/mbdeXvdbQkTirFBV9OkizqvFjC98uk9/u1cH6SSP
kTBd/+RmVKbj2kXiiF//9dFn9EMPSD/jLCnyViteVNOi7LciwWI5kWmW5hOx
D4KBB4sSWNufpnksTopRmiHpBETaF09k+it4EP9dLPKqvNHPwQU5i9OsL1C2
Myb3ywRvzYhCB0TsDZdPbmCm4rfTmIh9lwFfI42ZpnidrRz0s4W8gSEHhRvx
txeHIN1y3nHUFNzuvKJHe798XRGJTgIiy4tyFlfplcTVOn+63+t2H+ufj7oP
t/XPnd6jTXN1s/vQ/tzq4c+j6KADK5XL0mpfROonyyq9TEG7pcLnnh6dDXqb
D/CnEFVcTiSo/bSq5qp///719XUnT1XVmRRX93N5rSJ6zP2RVzKvFN2639vs
bd/ffHQfX4hKmclYSRg2LeGfW/B3HmfpazmO5qh8NTq/Y12MZJ6UN/MKbC0i
E43LsWLO2ESQWwHstkG9gMrTAswPZnhRxrkCW5lFIxh0LA7SSVrFmdNXsZdN
CrDU6YyoGZ3kwSNeodMYx4W3jnIFwy3ACIpLMTBsCPhbXMhkmhdZMbkRa6dH
g4v1VqsVRZGIR2CIcVK1WheFuIwT0MkKJCxiURYj8Cn0skJvIcHJALMpjiWq
QpA09PQFTb6YlPF8etMW1TRVAtzJAjSuEmMJIpTAhphJ4H5MviEBN1ShNVmv
IpSdc2zmrMToBp8YpTk+W01lID5hxSeKK/jn6cX58+g4rqo0kdGT2wQq1tjo
18U1/FPMirEsc5FkMbjMBF5p4qcjLqYS3Jrj2uM1JhnBvGDcWAnQrbaIq2IG
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
ZoS8RKjVORY+yfmp8CvSpbLQ/wO+0aZ10mMAAA==

-->

</rfc>
