<?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.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-lamps-dilithium-certificates-10" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="ML-DSA in Certificates">Internet X.509 Public Key Infrastructure - Algorithm Identifiers for the Module-Lattice-Based Digital Signature Algorithm (ML-DSA)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-dilithium-certificates-10"/>
    <author initials="J." surname="Massimo" fullname="Jake Massimo">
      <organization>AWS</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>jakemas@amazon.com</email>
      </address>
    </author>
    <author initials="P." surname="Kampanakis" fullname="Panos Kampanakis">
      <organization>AWS</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>kpanos@amazon.com</email>
      </address>
    </author>
    <author initials="S." surname="Turner" fullname="Sean Turner">
      <organization>sn3rd</organization>
      <address>
        <email>sean@sn3rd.com</email>
      </address>
    </author>
    <author initials="B. E." surname="Westerbaan" fullname="Bas Westerbaan">
      <organization>Cloudflare</organization>
      <address>
        <email>bas@cloudflare.com</email>
      </address>
    </author>
    <date year="2025" month="May" day="22"/>
    <area>SEC</area>
    <workgroup>LAMPS WG</workgroup>
    <keyword>ML-DSA Certificate X.509 PKIX</keyword>
    <abstract>
      <?line 149?>

<t>Digital signatures are used within X.509 certificates, Certificate
Revocation Lists (CRLs), and to sign messages. This document describes
the conventions for using FIPS 204, the Module-Lattice-Based Digital
Signature Algorithm (ML-DSA) in Internet X.509 certificates and
certificate revocation lists.  The conventions for the associated
signatures, subject public keys, and private key are also described.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://lamps-wg.github.io/dilithium-certificates/#go.draft-ietf-lamps-dilithium-certificates.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-lamps-dilithium-certificates/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Limited Additional Mechanisms for PKIX and SMIME (lamps) Working Group mailing list (<eref target="mailto:spasm@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/spasm/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/spasm/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/lamps-wg/dilithium-certificates"/>.</t>
    </note>
  </front>
  <middle>
    <?line 158?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Module-Lattice-Based Digital Signature Algorithm (ML-DSA) is a
quantum-resistant digital signature scheme standardized by the US
National Institute of Standards and Technology (NIST) PQC project
<xref target="NIST-PQC"/> in <xref target="FIPS204"/>. This document
specifies the use of the ML-DSA in Public Key Infrastructure X.509 (PKIX)
certificates and Certificate Revocation Lists (CRLs) at three security
levels: ML-DSA-44, ML-DSA-65, and ML-DSA-87.</t>
      <t><xref target="FIPS204"/> defines two variants of ML-DSA: a pure and a prehash variant.
Only the former is specified in this document.
See <xref target="sec-disallow-hash"/> for the rationale.
The pure variant of ML-DSA supports the typical prehash flow. Refer to
<xref target="externalmu"/> for more details.</t>
      <t>Prior to standardisation, ML-DSA was known as Dilithium.  ML-DSA and
Dilithium are not compatible.</t>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="oids">
      <name>Identifiers</name>
      <t>The <tt>AlgorithmIdentifier</tt> type is defined in <xref target="RFC5912"/> as follows:</t>
      <artwork><![CDATA[
    AlgorithmIdentifier{ALGORITHM-TYPE, ALGORITHM-TYPE:AlgorithmSet} ::=
      SEQUENCE {
        algorithm   ALGORITHM-TYPE.id({AlgorithmSet}),
        parameters  ALGORITHM-TYPE.
                      Params({AlgorithmSet}{@algorithm}) OPTIONAL
     }
]]></artwork>
      <aside>
        <t>NOTE: The above syntax is from <xref target="RFC5912"/> and is compatible with
the 2021 ASN.1 syntax <xref target="X680"/>. See <xref target="RFC5280"/> for the 1988 ASN.1
syntax.</t>
      </aside>
      <t>The fields in AlgorithmIdentifier have the following meanings:</t>
      <ul spacing="normal">
        <li>
          <t><tt>algorithm</tt> identifies the cryptographic algorithm with an object
identifier (OID).</t>
        </li>
        <li>
          <t><tt>parameters</tt>, which are optional, are the associated parameters for the
algorithm identifier in the algorithm field.</t>
        </li>
      </ul>
      <t>The OIDs are:</t>
      <artwork><![CDATA[
   id-ml-dsa-44 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
            country(16) us(840) organization(1) gov(101) csor(3)
            nistAlgorithm(4) sigAlgs(3) id-ml-dsa-44(17) }

   id-ml-dsa-65 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
            country(16) us(840) organization(1) gov(101) csor(3)
            nistAlgorithm(4) sigAlgs(3) id-ml-dsa-65(18) }

   id-ml-dsa-87 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
            country(16) us(840) organization(1) gov(101) csor(3)
            nistAlgorithm(4) sigAlgs(3) id-ml-dsa-87(19) }
]]></artwork>
      <t>The contents of the <tt>parameters</tt> component for each <tt>algorithm</tt> <bcp14>MUST</bcp14> be
absent.</t>
    </section>
    <section anchor="ml-dsa-signatures-in-pkix">
      <name>ML-DSA Signatures in PKIX</name>
      <t>ML-DSA is a digital signature scheme built upon the
Fiat-Shamir-with-aborts framework <xref target="Fiat-Shamir"/>. The security is based
upon the hardness of lattice problems over module lattices <xref target="Dilithium"/>.
ML-DSA provides three parameter sets for the NIST PQC security categories
2, 3 and 5.</t>
      <t>Signatures are used in a number of different ASN.1 structures. As shown
in the ASN.1 representation from <xref target="RFC5280"/> below, in an X.509
certificate, a signature is encoded with an algorithm identifier in the
<tt>signatureAlgorithm</tt> attribute and a <tt>signatureValue</tt> attribute that contains
the actual signature.</t>
      <artwork><![CDATA[
  Certificate  ::=  SIGNED{ TBSCertificate }

  SIGNED{ToBeSigned} ::= SEQUENCE {
     toBeSigned           ToBeSigned,
     algorithmIdentifier  SEQUENCE {
         algorithm        SIGNATURE-ALGORITHM.
                            &id({SignatureAlgorithms}),
         parameters       SIGNATURE-ALGORITHM.
                            &Params({SignatureAlgorithms}
                              {@algorithmIdentifier.algorithm})
                                OPTIONAL
     },
     signature BIT STRING (CONTAINING SIGNATURE-ALGORITHM.&Value(
                              {SignatureAlgorithms}
                              {@algorithmIdentifier.algorithm}))
  }
]]></artwork>
      <t>Signatures are also used in the CRL list ASN.1 representation from
<xref target="RFC5280"/> below. In a X.509 CRL, a signature is encoded with an
algorithm identifier in the <tt>signatureAlgorithm</tt> attribute and a
<tt>signatureValue</tt> attribute that contains the actual signature.</t>
      <artwork><![CDATA[
   CertificateList  ::=  SIGNED{ TBSCertList }
]]></artwork>
      <t>The following <tt>SIGNATURE-ALGORITHM</tt> ASN.1 classes are for ML-DSA-44,
ML-DSA-65, and ML-DSA-87:</t>
      <artwork><![CDATA[
  sa-ml-dsa-44 SIGNATURE-ALGORITHM ::= {
    IDENTIFIER id-ml-dsa-44
    PARAMS ARE absent
    PUBLIC-KEYS { pk-ml-dsa-44 }
    SMIME-CAPS { IDENTIFIED BY id-ml-dsa-44 }
    }

  sa-ml-dsa-65 SIGNATURE-ALGORITHM ::= {
    IDENTIFIER id-ml-dsa-65
    PARAMS ARE absent
    PUBLIC-KEYS { pk-ml-dsa-65 }
    SMIME-CAPS { IDENTIFIED BY id-ml-dsa-65 }
    }

  sa-ml-dsa-87 SIGNATURE-ALGORITHM ::= {
    IDENTIFIER id-ml-dsa-87
    PARAMS ARE absent
    PUBLIC-KEYS { pk-ml-dsa-87 }
    SMIME-CAPS { IDENTIFIED BY id-ml-dsa-87 }
    }
]]></artwork>
      <aside>
        <t>NOTE: The above syntax is from <xref target="RFC5912"/> and is compatible with the
  2021 ASN.1 syntax <xref target="X680"/>. See <xref target="RFC5280"/> for the 1988 ASN.1 syntax.</t>
      </aside>
      <t>The identifiers defined in <xref target="oids"/> can be used as the
<tt>AlgorithmIdentifier</tt> in the <tt>signatureAlgorithm</tt> field in the sequence
<tt>Certificate</tt>/<tt>CertificateList</tt> and the <tt>signature</tt> field in the sequence
<tt>TBSCertificate</tt>/<tt>TBSCertList</tt> in certificates and CRLs, respectively,
<xref target="RFC5280"/>. The <tt>parameters</tt> of these signature algorithms <bcp14>MUST</bcp14> be
absent, as explained in <xref target="oids"/>. That is, the <tt>AlgorithmIdentifier</tt>
        <bcp14>SHALL</bcp14> be a <tt>SEQUENCE</tt> of one component, the OID id-ml-dsa-*.</t>
      <t>The <tt>signatureValue</tt> field contains the corresponding ML-DSA signature
computed upon the ASN.1 DER encoded <tt>tbsCertificate</tt>/<tt>tbsCertList</tt>
        <xref target="RFC5280"/>.  The optional context string (ctx) parameter
as defined in Section 5.2 of <xref target="FIPS204"/> is left to its default value:
the empty string.</t>
      <t>Conforming Certification Authority (CA) implementations <bcp14>MUST</bcp14> specify
the algorithms explicitly by using the OIDs specified in <xref target="oids"/> when
encoding ML-DSA signatures in certificates and CRLs. Conforming client
implementations that process certificates and CRLs using ML-DSA <bcp14>MUST</bcp14>
recognize the corresponding OIDs. Encoding rules for ML-DSA signature
values are specified in <xref target="oids"/>.</t>
    </section>
    <section anchor="ML-DSA-PublicKey">
      <name>ML-DSA Public Keys in PKIX</name>
      <t>In the X.509 certificate, the <tt>subjectPublicKeyInfo</tt> field has the
<tt>SubjectPublicKeyInfo</tt> type, which has the following ASN.1 syntax:</t>
      <artwork><![CDATA[
  SubjectPublicKeyInfo {PUBLIC-KEY: IOSet} ::= SEQUENCE {
      algorithm        AlgorithmIdentifier {PUBLIC-KEY, {IOSet}},
      subjectPublicKey BIT STRING
  }
]]></artwork>
      <aside>
        <t>NOTE: The above syntax is from <xref target="RFC5912"/> and is compatible with the
  2021 ASN.1 syntax <xref target="X680"/>. See <xref target="RFC5280"/> for the 1988 ASN.1 syntax.</t>
      </aside>
      <t>The fields in <tt>SubjectPublicKeyInfo</tt> have the following meaning:</t>
      <ul spacing="normal">
        <li>
          <t><tt>algorithm</tt> is the algorithm identifier and parameters for the
public key (see above).</t>
        </li>
        <li>
          <t><tt>subjectPublicKey</tt> contains the public key.</t>
        </li>
      </ul>
      <t>The <tt>PUBLIC-KEY</tt> ASN.1 types for ML-DSA are defined here:</t>
      <artwork><![CDATA[
  pk-ml-dsa-44 PUBLIC-KEY ::= {
    IDENTIFIER id-ml-dsa-44
    -- KEY no ASN.1 wrapping --
    CERT-KEY-USAGE
      { digitalSignature, nonRepudiation, keyCertSign, cRLSign }
    PRIVATE-KEY ML-DSA-44-PrivateKey }  -- defined in Section 6

  pk-ml-dsa-65 PUBLIC-KEY ::= {
    IDENTIFIER id-ml-dsa-65
    -- KEY no ASN.1 wrapping --
    CERT-KEY-USAGE
      { digitalSignature, nonRepudiation, keyCertSign, cRLSign }
    PRIVATE-KEY ML-DSA-65-PrivateKey }  -- defined in Section 6

  pk-ml-dsa-87 PUBLIC-KEY ::= {
    IDENTIFIER id-ml-dsa-87
    -- KEY no ASN.1 wrapping --
    CERT-KEY-USAGE
      { digitalSignature, nonRepudiation, keyCertSign, cRLSign }
    PRIVATE-KEY ML-DSA-87-PrivateKey }  -- defined in Section 6

  ML-DSA-44-PublicKey ::= OCTET STRING (SIZE (1312))

  ML-DSA-65-PublicKey ::= OCTET STRING (SIZE (1952))

  ML-DSA-87-PublicKey ::= OCTET STRING (SIZE (2592))

]]></artwork>
      <aside>
        <t>NOTE: The above syntax is from <xref target="RFC5912"/> and is compatible with the
  2021 ASN.1 syntax <xref target="X680"/>. See <xref target="RFC5280"/> for the 1988 ASN.1 syntax.</t>
      </aside>
      <t>Algorithm 22 in Section 7.2 of <xref target="FIPS204"/> defines the raw byte string
encoding of an ML-DSA public key. When used in a <tt>SubjectPublicKeyInfo</tt> type,
the <tt>subjectPublicKey BIT STRING</tt> contains this raw byte string encoding of the
public key.</t>
      <t>When an ML-DSA public key appears outside of a <tt>SubjectPublicKeyInfo</tt> type in an
environment that uses ASN.1 encoding, it can be encoded as an <tt>OCTET STRING</tt> by
using the <tt>ML-DSA-44-PublicKey</tt>, <tt>ML-DSA-65-PublicKey</tt>, and <tt>ML-DSA-87-PublicKey</tt> types
corresponding to the correct key size.</t>
      <t><xref target="RFC5958"/> describes the Asymmetric Key Package's <tt>OneAsymmetricKey</tt> type for
encoding asymmetric keypairs. When an ML-DSA private key or keypair is encoded as
a <tt>OneAsymmetricKey</tt>, it follows the description in <xref target="priv-key"/>.</t>
      <t>When the ML-DSA private key appears outside of an Asymmetric Key Package in an
environment that uses ASN.1 encoding, it can be encoded using one of the
the <tt>ML-DSA-PrivateKey CHOICE</tt> formats defined in <xref target="priv-key"/>. The <tt>seed</tt> format
is <bcp14>RECOMMENDED</bcp14> as it efficiently stores both the private and public key.</t>
      <t><xref target="examples"/> contains example ML-DSA public keys encoded using the
textual encoding defined in <xref target="RFC7468"/>.</t>
    </section>
    <section anchor="key-usage-bits">
      <name>Key Usage Bits</name>
      <t>The intended application for the key is indicated in the <tt>keyUsage</tt>
certificate extension; see <xref section="4.2.1.3" sectionFormat="of" target="RFC5280"/>. If the
<tt>keyUsage</tt> extension is present in a certificate that indicates <tt>id-ml-dsa-*</tt>
in the <tt>SubjectPublicKeyInfo</tt>, then at least one of following <bcp14>MUST</bcp14> be
present:</t>
      <artwork><![CDATA[
  digitalSignature; or
  nonRepudiation; or
  keyCertSign; or
  cRLSign.
]]></artwork>
      <t>If the <tt>keyUsage</tt> extension is present in a certificate that indicates
<tt>id-ml-dsa-*</tt> in the <tt>SubjectPublicKeyInfo</tt>, then the following <bcp14>MUST NOT</bcp14> be
present:</t>
      <artwork><![CDATA[
   keyEncipherment; or
   dataEncipherment; or
   keyAgreement; or
   encipherOnly; or
   decipherOnly.
]]></artwork>
      <t>Requirements about the <tt>keyUsage</tt> extension bits defined in <xref target="RFC5280"/>
still apply.</t>
    </section>
    <section anchor="priv-key">
      <name>Private Key Format</name>
      <t><xref target="FIPS204"/> specifies two formats for an ML-DSA private key: a 32-octet
seed (xi) and an (expanded) private key. The expanded private key (and public key)
is computed from the seed using <tt>ML-DSA.KeyGen_internal(xi)</tt> (algorithm 6).</t>
      <t>"Asymmetric Key Packages" <xref target="RFC5958"/> describes how to encode a private
key in a structure that both identifies what algorithm the private key
is for and allows for the public key and additional attributes about the
key to be included as well. For illustration, the ASN.1 structure
<tt>OneAsymmetricKey</tt> is replicated below.</t>
      <artwork><![CDATA[
  OneAsymmetricKey ::= SEQUENCE {
    version                  Version,
    privateKeyAlgorithm      SEQUENCE {
    algorithm                PUBLIC-KEY.&id({PublicKeySet}),
    parameters               PUBLIC-KEY.&Params({PublicKeySet}
                               {@privateKeyAlgorithm.algorithm})
                                  OPTIONAL}
    privateKey               OCTET STRING (CONTAINING
                               PUBLIC-KEY.&PrivateKey({PublicKeySet}
                                 {@privateKeyAlgorithm.algorithm})),
    attributes           [0] Attributes OPTIONAL,
    ...,
    [[2: publicKey       [1] BIT STRING (CONTAINING
                               PUBLIC-KEY.&Params({PublicKeySet}
                                 {@privateKeyAlgorithm.algorithm})
                                 OPTIONAL,
    ...
  }
]]></artwork>
      <aside>
        <t>NOTE: The above syntax is from <xref target="RFC5958"/> and is compatible with the
  2021 ASN.1 syntax <xref target="X680"/>.</t>
      </aside>
      <t>For ML-DSA private keys, the <tt>privateKey</tt> field in <tt>OneAsymmetricKey</tt> contains one of
the following DER-encoded <tt>CHOICE</tt> structures. The <tt>seed</tt> format is a
fixed 32 byte <tt>OCTET STRING</tt> (34 bytes total with the <tt>0x8020</tt> tag and
length) for all security levels, while the <tt>expandedKey</tt> and <tt>both</tt> formats
vary in size by security level:</t>
      <artwork><![CDATA[
ML-DSA-44-PrivateKey ::= CHOICE {
  seed [0] OCTET STRING (SIZE (32)),
  expandedKey OCTET STRING (SIZE (2560)),
  both SEQUENCE {
      seed OCTET STRING (SIZE (32)),
      expandedKey OCTET STRING (SIZE (2560))
      }
  }

ML-DSA-65-PrivateKey ::= CHOICE {
  seed [0] OCTET STRING (SIZE (32)),
  expandedKey OCTET STRING (SIZE (4032)),
  both SEQUENCE {
      seed OCTET STRING (SIZE (32)),
      expandedKey OCTET STRING (SIZE (4032))
      }
  }

ML-DSA-87-PrivateKey ::= CHOICE {
  seed [0] OCTET STRING (SIZE (32)),
  expandedKey OCTET STRING (SIZE (4896)),
  both SEQUENCE {
      seed OCTET STRING (SIZE (32)),
      expandedKey OCTET STRING (SIZE (4896))
      }
  }
]]></artwork>
      <aside>
        <t>NOTE: The above syntax is from <xref target="RFC5912"/> and is compatible with the
  2021 ASN.1 syntax <xref target="X680"/>. See <xref target="RFC5280"/> for the 1988 ASN.1 syntax.</t>
      </aside>
      <t>The <tt>CHOICE</tt> allows three representations of the private key:</t>
      <ol spacing="normal" type="1"><li>
          <t>The <tt>seed</tt> format (tag <tt>[0]</tt>) contains just the 32-byte seed value (xi)
from which both the expanded private key and public key can be derived
using <tt>ML-DSA.KeyGen_internal(xi)</tt>.</t>
        </li>
        <li>
          <t>The <tt>expandedKey</tt> format contains the expanded private key that was
derived from the seed.</t>
        </li>
        <li>
          <t>The <tt>both</tt> format contains both the seed and expanded private key, allowing for
for interoperability; some may want to use and retain the seed and
others may only support expanded private keys.</t>
        </li>
      </ol>
      <t>When encoding an ML-DSA private key in a <tt>OneAsymmetricKey</tt> object, any of
these three formats may be used, though the seed format is <bcp14>RECOMMENDED</bcp14>
for storage efficiency.</t>
      <t>The <tt>privateKeyAlgorithm</tt> field uses the <tt>AlgorithmIdentifier</tt> structure with
the appropriate OID as defined in <xref target="oids"/>. If present, the <tt>publicKey</tt>
field will hold the encoded public key as defined in <xref target="ML-DSA-PublicKey"/>.</t>
      <t>NOTE: While the private key can be stored in multiple formats, the seed-only
format is <bcp14>RECOMMENDED</bcp14> as it is the most compact representation. Both the
expanded private key and the public key can be deterministically derived
from the seed using <tt>ML-DSA.KeyGen_internal(xi)</tt>. Alternatively, the public
key can be generated from the private key. While the <tt>publicKey</tt> field
and <tt>expandedKey</tt> format are technically redundant when using the seed-only
format, they <bcp14>MAY</bcp14> be included to enable keypair consistency checks during
import operations.</t>
      <t>When parsing the private key, the ASN.1 tag explicitly indicates which
variant of <tt>CHOICE</tt> is present. Implementations should use the context-specific tag <tt>IMPLICIT [0]</tt>
(raw value <tt>0x80</tt>) for <tt>seed</tt>, <tt>OCTET STRING</tt> (<tt>0x04</tt>) for <tt>expandedKey</tt>, and
<tt>SEQUENCE</tt> (<tt>0x30</tt>) for <tt>both</tt> to parse the private key, rather than any
other heuristic like length of the enclosing <tt>OCTET STRING</tt>.</t>
      <t><xref target="examples"/> contains example ML-DSA private keys encoded using the
textual encoding defined in <xref target="RFC7468"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>For the ASN.1 module in <xref target="asn1"/>, IANA is requested to assign an object
identifier (OID) for the module identifier (TBD1) with a Description
of "id-mod-x509-ml-dsa-2025". The OID for the module should be
allocated in the "SMI Security for PKIX Module Identifier" registry
(1.3.6.1.5.5.7.0).</t>
    </section>
    <section anchor="implementation-considerations">
      <name>Implementation Considerations</name>
      <t>An <tt>ML-DSA.KeyGen seed (xi)</tt> represents the <bcp14>RECOMMENDED</bcp14> format for storing
and transmitting ML-DSA private keys. This format is explicitly permitted
by <xref target="FIPS204"/> as an acceptable representation of a keypair. In particular,
generating the seed in one cryptographic module and then importing or
exporting it into another cryptographic module is allowed. The internal
key generation function <tt>ML-DSA.KeyGen_internal(xi)</tt> can be accessed for
this purpose.</t>
      <t>Note also that unlike other private key compression methods in other algorithms,
expanding a private key from a seed is a one-way function, meaning that once a
full key is expanded from seed and the seed discarded, the seed cannot be
re-created even if the full expanded private key is available. For this reason
it is <bcp14>RECOMMENDED</bcp14> that implementations retain and export the seed,
even when also exporting the expanded private key. ML-DSA seed extraction can be
implemented by including the seed xi randomly generated at line 1 of Algorithm 1
<tt>ML-DSA.KeyGen</tt> in the returned output.</t>
    </section>
    <section anchor="private-key-consistency-testing">
      <name>Private Key Consistency Testing</name>
      <t>When receiving a private key that contains both the seed and the
expandedKey, the recipient <bcp14>SHOULD</bcp14> perform a seed consistency check to
ensure that the sender properly generated the private key. Recipients
that do not perform this seed consistency check avoid keygen
and compare operations, but are unable to ensure that the <tt>seed</tt> and
<tt>expandedKey</tt> match.</t>
      <t>If the check is done and the <tt>seed</tt> and the <tt>expandedKey</tt> are not consistent,
the recipient <bcp14>MUST</bcp14> reject the private key as malformed.</t>
      <t>The seed consistency check consists of regenerating the expanded form from
the seed via <tt>ML-DSA.KeyGen_internal</tt> and ensuring it is bytewise equal to
the value presented in the private key.</t>
      <t><xref target="example-bad"/> includes some examples of inconsistent seeds and expanded private
keys.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The Security Considerations section of <xref target="RFC5280"/> applies to this
specification as well.</t>
      <t>The ML-DSA signature scheme is strongly unforgeable under chosen message
attacks (SUF-CMA). For the purpose of estimating security strength, it has
been assumed that the attacker has access to signatures for no more
than 2^{64} chosen messages.</t>
      <t>ML-DSA depends on high quality random numbers that are suitable for
use in cryptography.  The use of inadequate pseudo-random number
generators (PRNGs) to generate such values can significantly undermine
various security properties. For instance, using an inadequate PRNG
for key generation, might allow an attacker to efficiently recover
the private key by trying a small set of possibilities, rather than
brute force search the whole keyspace.  The generation of random
numbers of a sufficient level of quality for use in cryptography
is difficult, and <xref target="RFC4086"/> offers important guidance in this
area.</t>
      <t>In the design of ML-DSA, care has been taken to make side-channel
resilience easier to achieve. For instance, ML-DSA does not depend
on Gaussian sampling. Implementations must still take great care
not to leak information via various side channels. While deliberate
design decisions such as these can help to deliver a greater ease
of secure implementation - particularly against side-channel
attacks - it does not necessarily provide resistance to more
powerful attacks such as differential power analysis. Some amount
of side-channel leakage has been demonstrated in parts of the
signing algorithm (specifically the bit-unpacking function), from
which a demonstration of key recovery has been made over a large
sample of signatures. Masking countermeasures exist for
ML-DSA, but come with a performance overhead.</t>
      <t>ML-DSA offers both deterministic and randomized signing. Signatures
generated with either mode are compatible and a verifyer can't tell
them apart. In the deterministic case, a signature only depends
on the private key and the message to be signed. This makes
the implementation easier to test and does not require
a randomness source during signing. In the randomized case,
signing mixes in a 256-bit random string from an approved random bit
generator (RBG). When randomized, ML-DSA is easier to harden
against fault and hardware side-channel attacks.</t>
      <t>A security property also associated with digital
signatures is non-repudiation. Non-repudiation refers to the
assurance that the owner of a signature key pair that was
capable of generating an existing signature corresponding to
certain data cannot convincingly deny having signed the data,
unless its private key was compromised.
The digital signature scheme ML-DSA possess three security
properties beyond unforgeability, that are associated with
non-repudiation. These are exclusive ownership, message-bound
signatures, and non-resignability. These properties are based
tightly on the assumed collision resistance of the hash
function used (in this case SHAKE-256). A full discussion
of these properties in ML-DSA can be found at <xref target="CDFFJ21"/>.</t>
      <section anchor="sec-disallow-hash">
        <name>Rationale for disallowing HashML-DSA</name>
        <t>The HashML-DSA mode defined in Section 5.4 of <xref target="FIPS204"/> <bcp14>MUST NOT</bcp14> be
used; in other words, public keys identified by
<tt>id-hash-ml-dsa-44-with-sha512</tt>, <tt>id-hash-ml-dsa-65-with-sha512</tt>, and
<tt>id-hash-ml-dsa-87-with-sha512</tt> <bcp14>MUST NOT</bcp14> be in X.509 certificates used for
CRLs, OCSP, certificate issuance and related PKIX protocols. This restriction
is primarily to increase interoperability.</t>
        <t>ML-DSA and HashML-DSA are incompatible algorithms that require
different <tt>Verify()</tt> routines. This introduces the complexity of
informing the verifier whether to use <tt>ML-DSA.Verify()</tt> or
<tt>HashML-DSA.Verify()</tt>. Additionally, since
the same OIDs are used to identify the ML-DSA
public keys and ML-DSA signature algorithms, an implementation would
need to commit a given public key to be either of type <tt>ML-DSA</tt> or
<tt>HashML-DSA</tt> at the time of certificate creation. This is anticipated
to cause operational issues in contexts where the operator does not
know whether the key will need to produce pure or pre-hashed signatures
at key generation time. The External Mu mode described in <xref target="externalmu"/>
avoids all of these operational concerns.</t>
        <t>A minor security reason for disallowing HashML-DSA is that the design of the
ML-DSA algorithm provides enhanced resistance against collision attacks,
compared with HashML-DSA or conventional RSA or ECDSA signature algorithms.
Specifically, ML-DSA prepends the SHAKE256 hash of the public key (<tt>tr</tt>)
to the message to-be-signed prior to hashing, as described in
line 6 of Algorithm 7 of <xref target="FIPS204"/>. This means that in the unlikely
discovery of a collision attack against the SHA-3 family, an attacker
would have to perform a public-key-specific collision search in order
to find message pairs such that <tt>H(tr || m1) = H(tr || m2)</tt> since a
direct hash collision <tt>H(m1) = H(m2)</tt> will not suffice.
HashML-DSA removes this enhanced security property.
In spite of its lack of targeted collision protection, the practical
security risk of using HashML-DSA in X.509 signatures would be
immaterial. That is because a hash of the issuing CA's public key
is already included in the Authority Key Identifier (AKI) extension which
is signed as part of the tbsCertificate structure.
Even when it is a SHA-1 hash, general second pre-images against
the AKI hash of existing issuing CAs would be impractical.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="X680" target="https://www.itu.int/rec/T-REC-X.680">
          <front>
            <title>Information Technology -- Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.680"/>
          <seriesInfo name="ISO/IEC" value="8824-1:2021"/>
        </reference>
        <reference anchor="X690" target="https://www.itu.int/rec/T-REC-X.690">
          <front>
            <title>Information Technology -- Abstract Syntax Notation One (ASN.1): ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.690"/>
          <seriesInfo name="ISO/IEC" value="8825-1:2021"/>
        </reference>
        <reference anchor="FIPS204" target="https://csrc.nist.gov/projects/post-quantum-cryptography">
          <front>
            <title>Module-Lattice-based Digital Signature Standard</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2023" month="August"/>
          </front>
          <seriesInfo name="FIPS PUB" value="204"/>
        </reference>
        <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="RFC5912">
          <front>
            <title>New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>The Public Key Infrastructure using X.509 (PKIX) certificate format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5912"/>
          <seriesInfo name="DOI" value="10.17487/RFC5912"/>
        </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="RFC5958">
          <front>
            <title>Asymmetric Key Packages</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document defines the syntax for private-key information and a content type for it. Private-key information includes a private key for a specified public-key algorithm and a set of attributes. The Cryptographic Message Syntax (CMS), as defined in RFC 5652, can be used to digitally sign, digest, authenticate, or encrypt the asymmetric key format content type. This document obsoletes RFC 5208. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5958"/>
          <seriesInfo name="DOI" value="10.17487/RFC5958"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="Dilithium" target="https://pq-crystals.org/dilithium/data/dilithium-specification-round3-20210208.pdf">
          <front>
            <title>CRYSTALS-Dilithium Algorithm Specifications and Supporting Documentation</title>
            <author initials="S." surname="Bai">
              <organization/>
            </author>
            <author initials="L." surname="Ducas">
              <organization/>
            </author>
            <author initials="T." surname="Lepoint">
              <organization/>
            </author>
            <author initials="V." surname="Lyubashevsky">
              <organization/>
            </author>
            <author initials="P." surname="Schwabe">
              <organization/>
            </author>
            <author initials="G." surname="Seiler">
              <organization/>
            </author>
            <author initials="D." surname="Stehlé">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="Fiat-Shamir" target="https://www.iacr.org/archive/asiacrypt2009/59120596/59120596.pdf">
          <front>
            <title>Fiat-Shamir with aborts: Applications to lattice and factoring-based signatures</title>
            <author initials="V." surname="Lyubashevsky">
              <organization/>
            </author>
            <date year="2009"/>
          </front>
          <seriesInfo name="International Conference on the Theory and Application of Cryptology and Information Security" value=""/>
        </reference>
        <reference anchor="CDFFJ21" target="https://eprint.iacr.org/2020/1525.pdf">
          <front>
            <title>BUFFing signature schemes beyond unforgeability and the case of post-quantum signatures</title>
            <author initials="C." surname="Cremers">
              <organization/>
            </author>
            <author initials="S." surname="Düzlü">
              <organization/>
            </author>
            <author initials="R." surname="Fiedler">
              <organization/>
            </author>
            <author initials="M." surname="Fischlin">
              <organization/>
            </author>
            <author initials="C." surname="Janson">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
          <seriesInfo name="In Proceedings of the 42nd IEEE Symposium on Security and Privacy" value=""/>
        </reference>
        <reference anchor="NIST-PQC" target="https://csrc.nist.gov/Projects/post-quantum-cryptography">
          <front>
            <title>Post-Quantum Cryptography Project</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2016" month="December" day="20"/>
          </front>
        </reference>
        <reference anchor="FIPS204-ExternalMuFAQ" target="https://csrc.nist.gov/csrc/media/Projects/post-quantum-cryptography/documents/faq/fips204-sec6-03192025.pdf">
          <front>
            <title>FIPS 204 Section 6 FAQ</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2025"/>
          </front>
        </reference>
        <reference anchor="RFC7468">
          <front>
            <title>Textual Encodings of PKIX, PKCS, and CMS Structures</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="S. Leonard" initials="S." surname="Leonard"/>
            <date month="April" year="2015"/>
            <abstract>
              <t>This document describes and discusses the textual encodings of the Public-Key Infrastructure X.509 (PKIX), Public-Key Cryptography Standards (PKCS), and Cryptographic Message Syntax (CMS). The textual encodings are well-known, are implemented by several applications and libraries, and are widely deployed. This document articulates the de facto rules by which existing implementations operate and defines them so that future implementations can interoperate.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7468"/>
          <seriesInfo name="DOI" value="10.17487/RFC7468"/>
        </reference>
        <reference anchor="RFC4086">
          <front>
            <title>Randomness Requirements for Security</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="J. Schiller" initials="J." surname="Schiller"/>
            <author fullname="S. Crocker" initials="S." surname="Crocker"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts. However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities. The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult. This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities. It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications. 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="106"/>
          <seriesInfo name="RFC" value="4086"/>
          <seriesInfo name="DOI" value="10.17487/RFC4086"/>
        </reference>
        <reference anchor="RFC3647">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate Policy and Certification Practices Framework</title>
            <author fullname="S. Chokhani" initials="S." surname="Chokhani"/>
            <author fullname="W. Ford" initials="W." surname="Ford"/>
            <author fullname="R. Sabett" initials="R." surname="Sabett"/>
            <author fullname="C. Merrill" initials="C." surname="Merrill"/>
            <author fullname="S. Wu" initials="S." surname="Wu"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>This document presents a framework to assist the writers of certificate policies or certification practice statements for participants within public key infrastructures, such as certification authorities, policy authorities, and communities of interest that wish to rely on certificates. In particular, the framework provides a comprehensive list of topics that potentially (at the writer's discretion) need to be covered in a certificate policy or a certification practice statement. This document supersedes RFC 2527.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3647"/>
          <seriesInfo name="DOI" value="10.17487/RFC3647"/>
        </reference>
      </references>
    </references>
    <?line 719?>

<section anchor="asn1">
      <name>ASN.1 Module</name>
      <t>This appendix includes the ASN.1 module <xref target="X680"/> for the ML-DSA.  Note that
as per <xref target="RFC5280"/>, certificates use the Distinguished Encoding Rules; see
<xref target="X690"/>. This module imports objects from <xref target="RFC5912"/>.</t>
      <sourcecode markers="true"><![CDATA[
{::include X509-ML-DSA-2025.asn}
]]></sourcecode>
    </section>
    <section anchor="security-strengths">
      <name>Security Strengths</name>
      <t>Instead of defining the strength of a quantum algorithm
in a traditional manner using the imprecise notion of bits
of security, NIST has instead elected to define security
levels by picking a reference scheme, which NIST expects
to offer notable levels of resistance to both quantum and
classical attack. To wit, an algorithm that achieves NIST PQC
security level 1 must require computational resources to
break the relevant security property, which are greater than
those required for a brute-force key search on AES-128.
Levels 3 and 5 use AES-192 and AES-256 as reference respectively.
Levels 2 and 4 use collision search for SHA-256 and SHA-384
as reference.</t>
      <t>The parameter sets defined for NIST security levels 2, 3 and 5
are listed in the Figure 1, along with the resulting signature
size, public key, and private key sizes in bytes.
Note that these are the sizes of the raw keys, not including
ASN.1 encoding overhead from OneAsymmetricKey and SubjectPublicKeyInfo
wrappers. Private key sizes are shown for both the seed format
and expanded format.</t>
      <figure anchor="ML-DSAParameters">
        <name>ML-DSA Parameters</name>
        <artwork><![CDATA[
|=======+=======+=====+========+========+==========+==========|
| Level | (k,l) | eta |  Sig.  | Public | Private  | Private  |
|       |       |     |  (B)   | Key(B) | Seed(B)  | Expand(B)|
|=======+=======+=====+========+========+==========+==========|
|   2   | (4,4) |  2  |  2420  |  1312  |    32    |   2560   |
|   3   | (6,5) |  4  |  3309  |  1952  |    32    |   4032   |
|   5   | (8,7) |  2  |  4627  |  2592  |    32    |   4896   |
|=======+=======+=====+========+========+==========+==========|
]]></artwork>
      </figure>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>This appendix contains examples of ML-DSA private keys, public keys,
certificates, and inconsistent seed and expanded private keys.</t>
      <section anchor="example-private">
        <name>Example Private Keys</name>
        <t>The following examples show ML-DSA private keys in different formats,
all derived from the same seed <tt>000102...1e1f</tt>. For each security level,
we show the seed-only format (using a context-specific <tt>[0]</tt> primitive
tag with an implicit encoding of <tt>OCTET STRING</tt>), the <tt>expanded</tt> format,
and <tt>both</tt> formats together.</t>
        <t>NOTE: All examples use the same seed value, showing how the same seed
produces different expanded private keys for each security level.</t>
        <section anchor="ml-dsa-44-private-key-examples">
          <name>ML-DSA-44 Private Key Examples</name>
          <t>Each of the examples includes the textual encoding <xref target="RFC7468"/> followed by
the so-called "pretty print"; the private keys are the same.</t>
          <section anchor="seed-format">
            <name>Seed Format</name>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-44-seed.priv}
]]></artwork>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-44-seed.priv.txt}
]]></artwork>
          </section>
          <section anchor="expanded-format">
            <name>Expanded Format</name>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-44-expanded.priv}
]]></artwork>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-44-expanded.priv.txt}
]]></artwork>
          </section>
          <section anchor="both-format">
            <name>Both Format</name>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-44-both.priv}
]]></artwork>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-44-both.priv.txt}
]]></artwork>
          </section>
        </section>
        <section anchor="ml-dsa-65-private-key-examples">
          <name>ML-DSA-65 Private Key Examples</name>
          <t>Each of the examples includes the textual encoding <xref target="RFC7468"/> followed by
the so-called "pretty print"; the private keys are the same.</t>
          <section anchor="seed-format-1">
            <name>Seed Format</name>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-65-seed.priv}
]]></artwork>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-65-seed.priv.txt}
]]></artwork>
          </section>
          <section anchor="expanded-format-1">
            <name>Expanded Format</name>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-65-expanded.priv}
]]></artwork>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-65-expanded.priv.txt}
]]></artwork>
          </section>
          <section anchor="both-format-1">
            <name>Both Format</name>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-65-both.priv}
]]></artwork>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-65-both.priv.txt}
]]></artwork>
          </section>
        </section>
        <section anchor="ml-dsa-87-private-key-examples">
          <name>ML-DSA-87 Private Key Examples</name>
          <t>Each of the examples includes the textual encoding <xref target="RFC7468"/> followed by
the so-called "pretty print"; the private keys are the same.</t>
          <section anchor="seed-format-2">
            <name>Seed Format</name>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-87-seed.priv}
]]></artwork>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-87-seed.priv.txt}
]]></artwork>
          </section>
          <section anchor="expanded-format-2">
            <name>Expanded Format</name>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-87-expanded.priv}
]]></artwork>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-87-expanded.priv.txt}
]]></artwork>
          </section>
          <section anchor="both-format-2">
            <name>Both Format</name>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-87-both.priv}
]]></artwork>
            <artwork><![CDATA[
{::include ./examples/ML-DSA-87-both.priv.txt}
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="example-public">
        <name>Example Public Keys</name>
        <t>The following is the ML-DSA-44 public key corresponding to the private
key in the previous section. The textual encoding <xref target="RFC7468"/> is
followed by the so-called "pretty print"; the public keys are the same.</t>
        <artwork><![CDATA[
{::include ./examples/ML-DSA-44.pub}
]]></artwork>
        <artwork><![CDATA[
{::include ./examples/ML-DSA-44.pub.txt}
]]></artwork>
        <t>The following is the ML-DSA-65 public key corresponding to the private
key in the previous section.  The textual encoding <xref target="RFC7468"/> is
followed by the so-called "pretty print"; the public keys are the same.</t>
        <artwork><![CDATA[
{::include ./examples/ML-DSA-65.pub}
]]></artwork>
        <artwork><![CDATA[
{::include ./examples/ML-DSA-65.pub.txt}
]]></artwork>
        <t>The following is the ML-DSA-87 public key corresponding to the private
key in the previous section.  The textual encoding <xref target="RFC7468"/> is
followed by the so-called "pretty print"; the public keys are the same.</t>
        <artwork><![CDATA[
{::include ./examples/ML-DSA-87.pub}
]]></artwork>
        <artwork><![CDATA[
{::include ./examples/ML-DSA-87.pub.txt}
]]></artwork>
      </section>
      <section anchor="example-certificates">
        <name>Example Certificates</name>
        <aside>
          <t>The example certificates in this section have key usage bits set to
<tt>digitalSignature</tt>, <tt>keyCertSign</tt>, and <tt>cRLSign</tt> to lessen the number of
examples, i.e., brevity. Certificate Policies (CPs) <xref target="RFC3647"/>
for production CAs should consider whether this combination is
appropriate.</t>
        </aside>
        <t>The following is a self-signed certificate for the ML-DSA-44 public key in the
previous section. The textual encoding <xref target="RFC7468"/> is followed by the
so-called "pretty print"; the certificates are the same.</t>
        <artwork><![CDATA[
{::include ./examples/ML-DSA-44.crt}
]]></artwork>
        <artwork><![CDATA[
{::include ./examples/ML-DSA-44.crt.txt}
]]></artwork>
        <t>The following is a self-signed certificate for the ML-DSA-65 public key in the
previous section. The textual encoding <xref target="RFC7468"/> is followed by the
so-called "pretty print"; the certificates are the same.</t>
        <artwork><![CDATA[
{::include ./examples/ML-DSA-65.crt}
]]></artwork>
        <artwork><![CDATA[
{::include ./examples/ML-DSA-65.crt.txt}
]]></artwork>
        <t>The following is a self-signed certificate for the ML-DSA-87 public key in the
previous section. The textual encoding <xref target="RFC7468"/> is followed by the
so-called "pretty print"; the certificates are the same.</t>
        <artwork><![CDATA[
{::include ./examples/ML-DSA-87.crt}
]]></artwork>
        <artwork><![CDATA[
{::include ./examples/ML-DSA-87.crt.txt}
]]></artwork>
      </section>
      <section anchor="example-bad">
        <name>Example Inconsistent Seed and Expanded Private Keys</name>
        <aside>
          <t>WARNING: These private keys are purposely bad do not use them in
  production systems.</t>
        </aside>
        <t>The following examples demonstrate inconsistent seed and expanded private keys.</t>
        <t>Three <tt>ML-DSA-44-PrivateKey</tt> examples of inconsistent seed and
expanded private keys follow:</t>
        <ol spacing="normal" type="1"><li>
            <t>The first <tt>ML-DSA-PrivateKey</tt> example includes the <tt>both CHOICE</tt> , i.e., both <tt>seed</tt> and <tt>expandedKey</tt> are included. The <tt>seed</tt> and <tt>expanded</tt> values can be checked for inconsistencies.</t>
          </li>
          <li>
            <t>The second <tt>ML-DSA-PrivateKey</tt> example includes only <tt>expandedKey</tt>.  The public key fails to match the <tt>tr</tt> hash value in the private key.</t>
          </li>
          <li>
            <t>The third <tt>ML-DSA-PrivateKey</tt> example also includes only <tt>expandedKey</tt>. The private <tt>s_1</tt> and <tt>s_2</tt> vectors imply a <tt>t</tt> vector whose private low bits do not match the <tt>t_0</tt> vector portion of the private key (its high bits <tt>t_1</tt> are the primary content of the public key).</t>
          </li>
        </ol>
        <t>The second and third examples would not be detected by implementations
that do not regenerate the public key from the private key, or neglect to
then check consistency of <tt>tr</tt> or <tt>t_0</tt>.</t>
        <t>The following is the first example:</t>
        <artwork><![CDATA[
{::include ./examples/bad-ML-DSA-44-1.priv}
]]></artwork>
        <t>The following is the second example:</t>
        <artwork><![CDATA[
{::include ./examples/bad-ML-DSA-44-2.priv}
]]></artwork>
        <t>The following is the third example:</t>
        <artwork><![CDATA[
{::include ./examples/bad-ML-DSA-44-3.priv}
]]></artwork>
      </section>
    </section>
    <section anchor="externalmu">
      <name>Pre-hashing (ExternalMu-ML-DSA)</name>
      <t>Some applications require pre-hashing that ease operational
requirements around large or inconsistently-sized payloads.
When signing with pre-hashing, the signature generation
process can be separated into a pre-hash step requiring only the message
and other public information, and a core signature
step which uses the public key.</t>
      <t>In the context of ML-DSA, pre-hashing can be performed with
the HashML-DSA algorithm defined in Section 5.4 of <xref target="FIPS204"/>.
ML-DSA itself supports a External Mu pre-hashing mode which
externalizes the message pre-hashing originally performed inside
the signing operation. This mode is also laid out in
<xref target="FIPS204-ExternalMuFAQ"/>. This document specifies
only the use of ML-DSA's External Mu mode, and not HashML-DSA,
in PKIX for reasons laid out in <xref target="sec-disallow-hash"/>.</t>
      <t>Implementations of ML-DSA using the External Mu pre-hashing mode requires the following
algorithms, which are modified versions of the algorithms presented in <xref target="FIPS204"/>.
The nomenclature used here has been modified from the NIST FAQ <xref target="FIPS204-ExternalMuFAQ"/>
for clarity.</t>
      <t>Pre-hash operation:</t>
      <figure anchor="fig-externalmu-ml-dsa-external">
        <name>ComputeMu prehash operation</name>
        <artwork><![CDATA[
ComputeMu(pk, M, ctx):

  # Referred to as 'ExternalMu-ML-DSA.Prehash(pk, M, ctx)'
  # in the FIPS 204 FAQ.
  # M is the message, a bit-string
  # mu and ctx are byte-strings.
  # ctx is the context string, which defaults to the empy string.

  mu = H(BytesToBits(H(pk, 64) || IntegerToBytes(0, 1) ||
                IntegerToBytes(|ctx|, 1) || ctx) || M, 64)
  # The functions `BytesToBits` and `IntegerToBytes` are defined in FIPS 204.
  return mu
]]></artwork>
      </figure>
      <t>Sign operations:</t>
      <figure anchor="fig-externalmu-ml-dsa-internal">
        <name>The operations for signing mu</name>
        <artwork><![CDATA[
SignMu(sk, mu):

  # Referred to as 'ExternalMu-ML-DSA.Sign(sk, mu)'
  # in the FIPS 204 FAQ.

  if |mu| != 64 then
    return error  # return an error indication if the input mu is not
                  # 64 bytes.
  end if

  rnd = rand(32)  # for the optional deterministic variant,
                  # set rnd to all zeroes
  if rnd = NULL then
    return error  # return an error indication if random bit
                  # generation failed
  end if

  sigma = SignMu_internal(sk, mu, rnd, isExternalMu=true)
  return sigma

ML-DSA.SignMu_internal(sk, M', rnd, isExternalMu=false):
    # mu can be passed as an argument instead of M'
    # defaulting is ExternalMu to false means that
    # this modified version of Sign_internal can be used
    # in place of the original without interfering with
    # functioning of pure ML-DSA mode.
    # ... identical to FIPS 204 Algorithm 7, but with Line 6 replaced with
  6: if (isExternalMu):
       mu = M'
     else:
       mu = H(BytesToBits(tr) || M', 64)
]]></artwork>
      </figure>
      <t>There is no need to specify an External Mu <tt>Verify()</tt> routine because
this is identical to the original <tt>ML-DSA.Verify()</tt>. This makes External
Mu mode simply an internal optimization of the signer, and
allows an ML-DSA key to sometimes be used with the "one-shot" <tt>Sign()</tt>
API and sometimes the External Mu API without any interoperability concens.</t>
      <t>The External Mu mode requires the <tt>ComputeMu</tt> routine to have access to the
hash of the signer's public key which may not be available in some architectures,
or require fetching it. That may allow for mismatches between <tt>tr</tt> and <tt>sk</tt>.
At worst, this will produce a signature which will fail to verify under the
intended public key since a compliant <tt>Verify()</tt> routine will
independently compute <tt>tr</tt> from the public key. That
is not believed to be a security concern since <tt>mu</tt> is never used as-is
within <tt>ML-DSA.Sign_internal()</tt> (Algorithm 7 in <xref target="FIPS204"/>). Rather,
it is hashed with values unknown to an attacker on lines 7 and 15.
Thus, a signing oracle exposing <tt>SignMu()</tt> does not leak any bits of the secret
key. The External Mu mode also requires SHAKE256 to be available to the
<tt>ComputeMu</tt> routine.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors wish to thank the following people for their contributions
to this document: Corey Bonnell, Dierdre Connolly, Viktor Dukhovni, Russ Housley,
Alicja Kario, Mike Ounsworth, and Daniel Van Geest.</t>
      <t>In addition, we would like to thank those who contributed to the private
key format discussion: Tony Arcieri, Bob Beck, Dmitry Belyavskiy, David
Benjamin, Daniel Bernstein, Uri Blumenthal, Theo Buehler, Stephen Farrell,
Jean-Pierre Fiset, Scott Fluhrer, Alex Gaynor, John Gray, Peter Gutmann,
David Hook, Tim Hudson, Paul Kehrer, John Kemp, Watson Ladd, Adam Langley,
John Mattsson, Damien Miller, Robert Relyea, Michael Richardson,
Markku-Juhani O. Saarinen, Rich Salz, Roland Shoemaker, Sophie Schmieg,
Simo Sorce, Michael St. Johns, Falko Strenzke, Filippo Valsorda, Loganaden
Velvindron, Carl Wallace, and Wei-Jun Wang.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
