<?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.34 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-connolly-cfrg-ml-dsa-security-considerations-02" category="info" consensus="true" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title abbrev="ML-DSA Security Considerations">Security Considerations for ML-DSA</title>
    <seriesInfo name="Internet-Draft" value="draft-connolly-cfrg-ml-dsa-security-considerations-02"/>
    <author fullname="Deirdre Connolly">
      <organization>Oracle</organization>
      <address>
        <email>durumcrustulum@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="March" day="19"/>
    <area>IRTF</area>
    <workgroup>Crypto Forum</workgroup>
    <keyword>ML-DSA</keyword>
    <abstract>
      <?line 132?>

<t>NIST standardized ML-DSA as FIPS 204 in August 2024. This document discusses
how to use ML-DSA within protocols - that is, what problem it solves,
and what you need to do to use it securely.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://dconnolly.github.io/draft-connolly-cfrg-ml-dsa-security-considerations/draft-connolly-cfrg-ml-dsa-security-considerations.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-connolly-cfrg-ml-dsa-security-considerations/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Crypto Forum Research Group mailing list (<eref target="mailto:cfrg@irtf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cfrg/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cfrg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/dconnolly/draft-connolly-cfrg-ml-dsa-security-considerations"/>.</t>
    </note>
  </front>
  <middle>
    <?line 138?>

<section anchor="intro">
      <name>Introduction</name>
      <t>Digital signatures are a standardized class of cryptographic scheme that can
be used in protocols to detect unauthorized modifications to data and to
authenticate the identity of the signer.</t>
      <t>Post-quantum (PQ) cryptographic algorithms are based on problems that are
considered to be resistant to attacks that are efficient on a
cryptographically-relevant quantum computer (CRQC), a quantum computer
powerful (QC) enough to break schemes based on traditional cryptographic
assumptions such as factoring, finite field or elliptic curve Diffie-Hellman
(DH). While it is not believed that a CRQC exists at the time of this
writing, there remains the possibility that an adversary could forge
signatures on critical messages, or that long-lived public verifying keys
will need to remain trustworthy well into the era when CRQCs may exist.</t>
      <t>Unlike the case for key agreement and encryption, where an adversary can
record ciphertexts now and decrypt them later when a CRQC becomes available
("harvest now, decrypt later"), the threat model for digital signatures is
different. An adversary with a CRQC could forge signatures to impersonate a
signer whose public verifying key is still trusted. This is a particular
concern for:</t>
      <ul spacing="normal">
        <li>
          <t>Long-lived code signing keys</t>
        </li>
        <li>
          <t>Certificate authority root keys and the time needed to establish new ones</t>
        </li>
        <li>
          <t>Firmware signing keys</t>
        </li>
        <li>
          <t>Digital contract signing keys</t>
        </li>
        <li>
          <t>Any public verifying key that will be in use while an active CRQC is a
threat</t>
        </li>
      </ul>
      <t>Because of this threat, NIST has published FIPS 204 <xref target="FIPS204"/>, which
standardizes ML-DSA (Module-Lattice-Based Digital Signature Algorithm), a
digital signature scheme that is considered resistant to quantum
attacks. ML-DSA is based on structured lattices, specifically reducing to the
Module Learning with Errors problem, and is derived from the
CRYSTALS-Dilithium scheme.</t>
      <t>ML-DSA is a digital signature scheme, where a signer generates a key pair
consisting of a private signing key and a public verifying key. The signer
uses the signing key to produce a signature on a message, and anyone with the
verifying key can verify that the signature is valid for that message. An
adversary without the signing key cannot produce a valid signature, even if
they have access to a CRQC (see <xref target="security-considerations"/>).</t>
    </section>
    <section anchor="using-ml-dsa">
      <name>Using ML-DSA</name>
      <t>As a digital signature scheme, ML-DSA is comprised of three algorithms:</t>
      <section anchor="keygen">
        <name>Key Generation</name>
        <t>The first step for the signer is to generate a key pair.</t>
        <t>In FIPS 204, the key generation function is <tt>ML-DSA.KeyGen()</tt> (see section
6.1 of <xref target="FIPS204"/>). It internally calls the random number generator for a
32-byte seed (<tt>xi</tt>, <tt>ξ</tt> in FIPS 204) and produces both a public verifying key
<tt>pk</tt>and a private signing key <tt>sk</tt>.</t>
        <t>FIPS 204 supports two signing key formats: the 32-byte seed used as input to
key generation serves as a compact signing key format with significant
security advantages; the full expanded signing key can be deterministically
regenerated from this seed at any time. Using the seed as the signing key
format makes it impossible to create a malformed key: the key generation
algorithm enforces the correct mathematical distributions for all derived key
components <xref target="SCHMIEG25"/>. Further, the whole value of the seed contributes
equally to the derived key material; changing a single bit of the seed
changes the values of the expanded keypair in its entirety, making it
impossible to independently choose parts of the signing key.</t>
        <t>The expanded signing key components (<tt>rho</tt>, <tt>K</tt>, <tt>tr</tt>, <tt>s1</tt>, <tt>s2</tt>, <tt>t0</tt>), may
be cached in memory for the duration of signing operations to avoid
re-running key generation on each signature (<tt>rho</tt> is <tt>ρ</tt> in FIPS 204). This
cached expanded key material requires the same protections as the seed
signing key and benefits from being securely deleted when no longer needed.</t>
        <t>The public verifying key can be freely published; verifiers will need it to
verify signatures. However, the signing key material needs to be kept secret
and protected from modification.</t>
        <t>ML-DSA key generation is very fast. The signing key components are sampled
from a uniform distribution, making key generation straightforward and not a
significant computational burden.</t>
      </section>
      <section anchor="signing">
        <name>Signing</name>
        <t>The second step is for the signer to produce a signature on a message.</t>
        <t>To do this, the signer would perform what FIPS 204 calls <tt>ML-DSA.Sign(sk, M,
ctx)</tt> (see section 6.2 of <xref target="FIPS204"/>). This takes as input the signing key
<tt>sk</tt>, a message <tt>M</tt>, and an optional context string <tt>ctx</tt> (up to 255 bytes),
and produces a signature <tt>sigma</tt> (<tt>σ</tt> in FIPS 204).</t>
        <t>Internally, the signing process uses rejection sampling: the raw signing
procedure is not always successful on the first attempt, and is repeated
until a valid signature is produced. This is normal behavior and not an
indication of error, resulting from the construction of ML-DSA from
Fiat-Shamir with Aborts <xref target="Lyubashevsky09"/>. On average, signing requires a
small number of iterations. However, this does mean that signing time has
some variance.</t>
        <section anchor="hedged-vs-deterministic">
          <name>Hedged vs. Deterministic Signing</name>
          <t>ML-DSA supports two modes of signing:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Hedged (randomized) signing</strong> (the default): Fresh randomness is
incorporated into the signing process alongside the signing key material
and the message. This is the mode specified by <tt>ML-DSA.Sign()</tt>.</t>
            </li>
            <li>
              <t><strong>Deterministic signing</strong>: The randomness input (<tt>rnd</tt>) is set to all
zeros, making the signature a deterministic function of the signing key and
message. This is specified by <tt>ML-DSA.Sign()</tt> with <tt>rnd</tt> set to 32 zero
bytes.</t>
            </li>
          </ul>
          <t>There is no reason to prefer deterministic signing over hedged signing;
hedged signing is the safer default in all environments, and is essential
where fault injection or side-channel attacks are a concern. See
<xref target="fault-injection"/> for details.</t>
          <t>The hedged variant degrades gracefully: if the random number generator
provides no entropy (all zeros), the hedged variant produces the same output
as the deterministic variant.</t>
        </section>
        <section anchor="context-strings">
          <name>Context Strings</name>
          <t>ML-DSA supports an optional context string (<tt>ctx</tt>) of up to 255 bytes. The
context string is incorporated into the signed message and provides domain
separation between different applications or uses of the same key pair.</t>
          <t>If a context string is used during signing, the same context string is
required during verification. Defining a fixed context string for a given
protocol's use case prevents cross-protocol attacks.</t>
        </section>
      </section>
      <section anchor="verification">
        <name>Verification</name>
        <t>The third step is for the verifier to check a signature against a message and
public verifying key.</t>
        <t>To perform this step, the verifier would perform what FIPS 204 calls
<tt>ML-DSA.Verify(pk, M, sigma, ctx)</tt> (see section 6.3 of <xref target="FIPS204"/>). This
takes the verifying key <tt>pk</tt>, the message <tt>M</tt>, the signature <tt>sigma</tt>, and the
optional context string <tt>ctx</tt>, and returns whether the signature is valid as
a boolean value.</t>
        <t>Verification is deterministic and does not require access to any secret key
material. It is also computationally straightforward and does not involve
rejection sampling unlike signing.</t>
        <t>The verifier needs to ensure that the public verifying key <tt>pk</tt> being used is
authentic— that is, it genuinely belongs to the claimed signer. ML-DSA like
all signature schemes provides no authentication of the verifying key itself;
this is the responsibility of the protocol (e.g., via a certificate or other
trust mechanism) or is out of band/scope.</t>
      </section>
      <section anchor="params">
        <name>Parameter Sets</name>
        <t>FIPS 204 specifies three parameter sets: ML-DSA-44, ML-DSA-65, and
ML-DSA-87. The names refer to the module ranks (<tt>k</tt>, <tt>l</tt>) used in each
parameter set. It is assumed that the signer and verifier both know which
parameter set is in use (either by negotiation or by having one selection
fixed in a protocol).</t>
        <t><xref target="par-sets"/> shows the sizes of the cryptographic material of ML-DSA for
each parameter set, as well as their relative cryptographic strength:</t>
        <table anchor="par-sets">
          <name>vk = public verifying key, sk = signing key (seed form), expanded sk = signing key components cached for signing, sig = signature, all lengths in bytes</name>
          <thead>
            <tr>
              <th align="left"> </th>
              <th align="right">vk size</th>
              <th align="right">sk size</th>
              <th align="right">expanded sk size</th>
              <th align="right">sig size</th>
              <th align="center">NIST Level (~as strong as)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ML-DSA-44</td>
              <td align="right">1312</td>
              <td align="right">32</td>
              <td align="right">2560</td>
              <td align="right">2420</td>
              <td align="center">2 (~SHA(3)-256)</td>
            </tr>
            <tr>
              <td align="left">ML-DSA-65</td>
              <td align="right">1952</td>
              <td align="right">32</td>
              <td align="right">4032</td>
              <td align="right">3309</td>
              <td align="center">3 (~AES-192)</td>
            </tr>
            <tr>
              <td align="left">ML-DSA-87</td>
              <td align="right">2592</td>
              <td align="right">32</td>
              <td align="right">4896</td>
              <td align="right">4627</td>
              <td align="center">5 (~AES-256)</td>
            </tr>
          </tbody>
        </table>
        <t>All three parameter sets store the signing key as a 32-byte seed. The
expanded signing key components can be deterministically regenerated
from this seed and cached in memory as needed for signing
operations.</t>
        <!-- As can be seen from {{par-sets}}, ML-DSA has significantly larger -->
<!-- verifying keys and signatures than ECDSA or EdDSA, but comparable or -->
<!-- better computational performance as shown in {{par-perf}}. -->

</section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="security-considerations-sigs">
        <name>Digital Signature Security Considerations</name>
        <t>This section pertains to digital signature schemes in general, including
ML-DSA.</t>
        <t>A digital signature scheme requires a high-quality source of entropy during
key pair generation. If an adversary can recover the random bits used during
key generation, they can recover the signing key. ML-DSA additionally
requires randomness during signing (in hedged mode); if an adversary can
recover these random bits, they may be able to recover the signing key. The
random bytes need to be generated securely <xref target="RFC4086"/>.</t>
        <t>Standard cryptographic analysis assumes that the adversary has access only to
the public verifying key, messages, and signatures. Depending on the
deployment scenario, the adversary may have access to various side channels,
such as the amount of time taken during the signing process, or possibly the
power consumption or electromagnetic emissions of the signing device. The
implementor will need to assess this possibility and possibly use an
implementation that is resistant to such leakage.</t>
        <t>The signer needs to keep the signing key secret and protected from
modification. Zeroizing the signing key when the signer has no further need
of it prevents later compromise.</t>
        <t>A digital signature scheme (including ML-DSA) does not authenticate the
verifying key. The verifier needs some means of trusting that the public
verifying key belongs to the claimed signer. This is typically accomplished
through a Public Key Infrastructure (PKI) such as X.509 certificates, or
through other trust mechanisms.</t>
      </section>
      <section anchor="security-considerations-mldsa">
        <name>ML-DSA Security Considerations</name>
        <t>This section pertains specifically to ML-DSA, and may not be true of digital
signature schemes in general.</t>
        <t>The fundamental security property of ML-DSA is that someone with the public
verifying key and access to signatures cannot forge a signature on a new
message, and this is true even if the adversary has access to a CRQC. ML-DSA
is EUF-CMA (Existentially Unforgeable under Chosen Message Attack) secure;
that is, it remains secure (infeasible to forge verifibale signatures under
the public verifying key) even if an adversary can request signatures on
arbitrary messages of their choosing. The adversary still cannot produce a
valid signature on any message that was not previously signed.</t>
        <t>ML-DSA requires that a source of randomness with security strength greater
than or equal to the security strength of the ML-DSA parameter set be used
during <tt>ML-DSA.KeyGen()</tt> and during <tt>ML-DSA.Sign()</tt> (in the default hedged
mode). The cryptographic library that implements ML-DSA may access this
source of randomness internally. A fresh string of random bytes is needed for
every invocation of key generation and signing.</t>
        <t>The signer needs to keep their signing key both secret and protected from
modification. Modification of the signing key could result in signatures that
leak information about the key material.</t>
        <t>It is secure to use a single key pair for signing many messages. That is, the
signer may generate a key pair once and use it to sign many messages over the
lifetime of the key pair. ML-DSA does not degrade in security with the number
of signatures produced, under the standard security model.</t>
        <section anchor="fault-injection">
          <name>Signing and Fault Resistance</name>
          <t>ML-DSA's signing process involves computing a nonce-like commitment value
(<tt>y</tt>) as part of each signing attempt. In deterministic mode, this value is a
deterministic function of the signing key and the message.</t>
          <t>Without mitigation, this creates a vulnerability to fault injection attacks:
if an attacker can cause a fault during the signing process and obtain both a
correct and a faulted signature on the same message, they can potentially
recover the signing key. This is because the deterministic mode will produce
the same intermediate value <tt>y</tt> when signing the same message twice, and
comparing correct and faulted outputs can reveal the signing key <xref target="KPLG24"/>.</t>
          <t>The default hedged (randomized) signing mode mitigates this by incorporating
fresh randomness into the computation of <tt>y</tt>, so that repeated signing of the
same message produces different intermediate values. This prevents the
nonce-reuse scenario that fault attacks exploit.</t>
          <t>Fault injection attacks against ML-DSA are an active area of research
<xref target="KosXag25"/>. Notably, the fault attack surface extends to operations such as
public parameter generation that are not sensitive to side-channel attacks
and therefore might be left unprotected in some implementations.</t>
          <t>The deterministic variant of ML-DSA is vulnerable to fault injection attacks,
making it unsuitable for platforms where such attacks are a concern. Even in
environments where fault injection is not considered a practical threat,
hedged signing provides an additional layer of protection.</t>
          <t>Section 3.6.1 of <xref target="FIPS204"/> notes that while the signing randomness <tt>rnd</tt>
should ideally be generated by an approved RBG, other methods for generating
fresh random values may be used. Because the primary purpose of <tt>rnd</tt> is to
mitigate side-channel and fault attacks on deterministic signatures, even a
weak or non-NIST-approved source of randomness is preferable to the fully
deterministic variant. Implementations on constrained platforms that lack
access to a full-strength RBG should still use whatever randomness source
is available for <tt>rnd</tt> rather than falling back to deterministic signing.</t>
        </section>
        <section anchor="rejection-sampling">
          <name>Rejection Sampling and Signing Time</name>
          <t>ML-DSA's signing algorithm uses rejection sampling: candidate signatures are
generated and checked against bounds, and the process repeats until a valid
signature is found. This means:</t>
          <ul spacing="normal">
            <li>
              <t>Signing time is variable. On average, only a small number of iterations
are needed, but in the worst case, more iterations may be required.</t>
            </li>
            <li>
              <t>The number of iterations is not secret-dependent in the default hedged mode
(it depends on the random commitment value). Care is warranted to avoid
introducing timing side channels in other parts of the signing process.</t>
            </li>
            <li>
              <t>Imposing a fixed upper bound on the number of iterations that causes
signing to fail is unnecessary and harmful. The probability of requiring
a very large number of iterations is negligible (see
<xref target="signing-loop-bounds"/>).</t>
            </li>
          </ul>
        </section>
        <section anchor="key-format">
          <name>Signing Key Format</name>
          <t>FIPS 204 permits two representations of the ML-DSA signing key:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Seed signing key format (32 bytes)</strong>: The random seed used as input to
<tt>ML-DSA.KeyGen_internal()</tt>. The full expanded signing key can be
deterministically regenerated from this seed at any time. NIST considers a
<tt>ML-DSA.KeyGen_internal()</tt> seed to be an acceptable alternative format for
a signing key, including for generation in one cryptographic module and
import/export to another <xref target="NIST-PQC-FAQ"/>. The seed signing key format
inherently prevents malformed keys, since the key generation algorithm
ensures that all derived values satisfy the required mathematical
properties. Every bit of the seed contributes equally to the derived key
material, making it impossible to independently choose parts of the signing
key <xref target="SCHMIEG25"/>.</t>
            </li>
            <li>
              <t><strong>Expanded signing key components</strong>: The full output of <tt>ML-DSA.KeyGen()</tt>,
containing (<tt>rho</tt>, <tt>K</tt>, <tt>tr</tt>, <tt>s1</tt>, <tt>s2</tt>, <tt>t0</tt>). This format avoids the
need to re-run key generation before each signing operation. The expanded
form is useful as an in-memory cache for performance during signing
operations, while the seed signing key format serves as the canonical
stored representation. The expanded format admits the possibility of
malformed keys if the components are modified or constructed outside of the
key generation algorithm.</t>
            </li>
          </ul>
          <t>Implementations that store only the seed and regenerate (or cache) the
expanded key as needed are inherently protected against malformed key
attacks. Implementations that accept or store expanded signing keys benefit
from validating that the key components are well-formed before use.</t>
          <t>When both formats are present, the expanded key needs to be the output of
running <tt>ML-DSA.KeyGen_internal()</tt> with the corresponding
seed. Inconsistencies between the two representations could lead to undefined
behavior <xref target="SCHMIEG25"/>.</t>
        </section>
        <section anchor="external-mu">
          <name>External <tt>Mu</tt> (<tt>μ</tt>)</name>
          <t>ML-DSA's signing algorithm (Algorithm 7 of <xref target="FIPS204"/>) computes a fixed-size
(64-byte) message representative <tt>mu</tt> (<tt>μ</tt> in FIPS 204) as the first step,
derived from the hash of the public verifiying key <tt>tr</tt> and the message <tt>M</tt>,
before any private signing key material is involved. All subsequent signing
operations use only <tt>mu</tt>, not the original message. This structure means that
<tt>mu</tt> can be pre-computed in a separate cryptographic module from the one that
holds the signing key, and NIST has explicitly confirmed this is permitted by
FIPS 204 <xref target="NIST-PQC-ExtMu"/>.</t>
          <t>This "external mu" approach solves the use cases that HashML-DSA
(<xref target="hashmldsa"/>) was intended to address:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Large messages</strong>: The module computing <tt>mu</tt> can stream arbitrarily
large messages through SHAKE256. The signing module only ever receives
the fixed-size 64-byte <tt>mu</tt>, regardless of message size.</t>
            </li>
            <li>
              <t><strong>HSM and remote signing</strong>: An application computes <tt>mu</tt> from the
public verifying key and the message, then sends only <tt>mu</tt> to a
signing module such as an HSM. The signing module generates its own
<tt>rnd</tt> internally and produces the signature.</t>
            </li>
            <li>
              <t><strong>No verification ambiguity</strong>: The resulting signatures are standard
ML-DSA signatures. Verifiers do not need to know whether <tt>mu</tt> was
computed locally or externally.</t>
            </li>
          </ul>
          <t>The module computing <tt>mu</tt> needs a validated implementation of SHAKE256 to be
FIPS-compliant. The signing module needs to implement the ML-DSA signing
algorithm from <tt>mu</tt> onward, including its own random number generation for
<tt>rnd</tt> <xref target="NIST-PQC-ExtMu"/>.</t>
        </section>
        <section anchor="hashmldsa">
          <name>HashML-DSA</name>
          <t>FIPS 204 defines HashML-DSA, a variant that signs a hash of the message
rather than the message directly, intended for cases where the full
message cannot be transmitted to the signer. However, HashML-DSA
conflates a protocol-level decision with the cryptographic primitive,
introducing several problems <xref target="SCHMIEG24"/>:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Verification ambiguity</strong>: A HashML-DSA signature differs from an
ML-DSA signature on the same message. The verifier needs to know which
variant was used, which requires protocol-level resolution anyway,
defeating the purpose of building this into the primitive.</t>
            </li>
            <li>
              <t><strong>Algorithm confusion risk</strong>: HashML-DSA requires hash algorithm
identifiers and parameters to be transmitted alongside the signature.
If these are carried through untrusted channels, this introduces
algorithm confusion risks similar to those seen with JSON Web Tokens.</t>
            </li>
          </ul>
          <t>The external <tt>mu</tt> approach described in <xref target="external-mu"/> solves the same
use cases without these drawbacks, and NIST has explicitly blessed it
for use with FIPS-validated modules <xref target="NIST-PQC-ExtMu"/>.</t>
        </section>
        <section anchor="non-issues">
          <name>Issues that are likely not a concern</name>
          <t>This section contains issues that you may have heard of, but are quite
unlikely to be a concern in your use case. This section is here to discuss
them, and show why they are not practical issues. If you have not heard of
them, you may ignore this.</t>
          <section anchor="constant-time">
            <name>ML-DSA operations not being constant time</name>
            <t>During key generation and verification, the public seed <tt>rho</tt> is expanded to
form the matrix <tt>A</tt>, and this involves rejection sampling of SHAKE256 output
to achieve coefficient values that are uniformly distributed. This means that
a rote implementation will perform a variable number of SHAKE256 calls, and
expansion is not constant time.</t>
            <t>However, the public seed <tt>rho</tt> is part of the public verifying key and is
therefore publicly known. The timing variation during matrix expansion does
not leak any information about the signing key.</t>
            <t>Signing also involves rejection sampling to generate the commitment vector
<tt>y</tt> and to check signature bounds. In the default hedged mode, these values
depend on fresh randomness and do not leak signing key information through
timing. In deterministic mode, the timing could in theory leak information
about the deterministic nonce, though this is a much less practical concern
than the fault injection attacks described in <xref target="fault-injection"/>.</t>
          </section>
          <section anchor="signing-loop-bounds">
            <name>Signing loop bounds and probability of failure</name>
            <t>ML-DSA's signing algorithm (Algorithm 7 of <xref target="FIPS204"/>) uses a rejection
sampling loop as part of the Fiat-Shamir with Aborts construction
<xref target="Lyubashevsky09"/>: each iteration computes a candidate signature, and checks
whether it satisfies several norm bounds. If any check fails, the candidate
is discarded and the loop repeats with fresh randomness and an incremented
counter.</t>
            <t>It may appear that this loop could run for a very long time, or that
implementations need to guard against the possibility of the loop failing to
terminate: in practice, this is not a concern. The expected number of
iterations is small: 4.25 for ML-DSA-44, 5.1 for ML-DSA-65, and 3.85 for
ML-DSA-87 (Table 1 of <xref target="FIPS204"/>).  Each iteration independently succeeds
with probability at least 1/5.1 (the worst case across all parameter sets),
so the probability of requiring more than <tt>n</tt> iterations is at most ((5.1 -
1) / 5.1)^n where n, which decreases exponentially. Appendix C of <xref target="FIPS204"/>
shows that the probability of needing more than 814 iterations is less than
2^-256 for all parameter sets — that is, it likely will not happen before the
heat death of the universe. A great majority of signing operations complete
in fewer than 10 iterations.</t>
            <t>To remain FIPS 204 compliant, implementations should not (equivalent to
'SHOULD NOT') impose a fixed upper bound on the number of signing loop
iterations. If an implementation does impose a limit, FIPS 204 requires that
it shall not (equiv. to 'MUST NOT') be lower than 814, and that the signing
algorithm shall (equiv. to 'MUST') return an error, produce no other output,
and destroy the candidate results of the unsuccessful signing attempts
(Appendix C of <xref target="FIPS204"/>). An artificially low iteration limit is more
likely to cause problems than it is to prevent them: it could cause signing
to fail for valid keys under normal operation, and in deterministic mode
could introduce a detectable failure mode that leaks information about the
signing key.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="FIPS204" target="https://doi.org/10.6028/NIST.FIPS.204">
          <front>
            <title>Module-Lattice-Based Digital Signature Standard</title>
            <author>
              <organization/>
            </author>
            <date year="2024" month="August"/>
          </front>
          <seriesInfo name="NIST" value="FIPS 204"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="KPLG24" target="https://eprint.iacr.org/2024/138">
          <front>
            <title>Correction Fault Attacks on Randomized CRYSTALS-Dilithium</title>
            <author initials="E." surname="Krahmer" fullname="Elisabeth Krahmer">
              <organization/>
            </author>
            <author initials="P." surname="Pessl" fullname="Peter Pessl">
              <organization/>
            </author>
            <author initials="G." surname="Land" fullname="Georg Land">
              <organization/>
            </author>
            <author initials="T." surname="Guneysu" fullname="Tim Güneysu">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="KosXag25" target="https://eprint.iacr.org/2025/904">
          <front>
            <title>The Security of ML-DSA against Fault-Injection Attacks</title>
            <author initials="H." surname="Kosuge" fullname="Haruhisa Kosuge">
              <organization/>
            </author>
            <author initials="K." surname="Xagawa" fullname="Keita Xagawa">
              <organization/>
            </author>
            <date year="2025"/>
          </front>
        </reference>
        <reference anchor="Lyubashevsky09" target="https://doi.org/10.1007/978-3-642-10366-7_35">
          <front>
            <title>Fiat-Shamir with Aborts: Applications to Lattice and Factoring-Based Signatures</title>
            <author initials="V." surname="Lyubashevsky" fullname="Vadim Lyubashevsky">
              <organization/>
            </author>
            <date year="2009"/>
          </front>
          <seriesInfo name="DOI" value="10.1007/978-3-642-10366-7_35"/>
        </reference>
        <reference anchor="NIST-PQC-FAQ" target="https://csrc.nist.gov/Projects/post-quantum-cryptography/faqs#Rdc7">
          <front>
            <title>Post-Quantum Cryptography FAQs</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2025"/>
          </front>
        </reference>
        <reference anchor="NIST-PQC-ExtMu" target="https://csrc.nist.gov/csrc/media/Projects/post-quantum-cryptography/documents/faq/fips204-sec6-03192025.pdf">
          <front>
            <title>FAQ - FIPS 204 - Computing mu</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2025" month="March"/>
          </front>
        </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="SCHMIEG24" target="https://keymaterial.net/2024/11/05/hashml-dsa-considered-harmful/">
          <front>
            <title>HashML-DSA considered harmful</title>
            <author initials="S." surname="Schmieg" fullname="Sophie Schmieg">
              <organization/>
            </author>
            <date year="2024" month="November"/>
          </front>
        </reference>
        <reference anchor="EBATS" target="https://bench.cr.yp.to/results-sign/amd64-hertz.html">
          <front>
            <title>eBATS: ECRYPT Benchmarking of Asymmetric Systems</title>
            <author initials="D. J." surname="Bernstein" fullname="Daniel J. Bernstein">
              <organization/>
            </author>
            <author initials="T." surname="Lange" fullname="Tanja Lange">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="SCHMIEG25" target="https://keymaterial.net/2025/02/19/how-not-to-format-a-private-key/">
          <front>
            <title>How not to format a private key</title>
            <author initials="S." surname="Schmieg" fullname="Sophie Schmieg">
              <organization/>
            </author>
            <date year="2025" month="February"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 590?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7V923IbR5rmfT5FrnRhsAMFUtTBEr3eGLYOlsaSLYu0e3Yv
plkAEkA1C1XoOpCC2ZrYjX2FfZyJuZn7mXfYJ9nvP2RWVgGQ5Y5YhUMigarM
P//8D99/yHSSJKbJmtyd2XsXbtZWWbO1z8uizuauSpsMP9lFWdl3b5MXF+f3
TDqdVu4GD8sH9sA798wsbdyyrLZnNisWpTHzclaka0wzr9JFk8zKoijzfJvM
FtUyWefJvE6TWgejb6PBkpNTU7fTdVbX+LXZbjDKmw+Xrww95oq6rc9sU7XO
zDHnmQF1D01auRRU0mP3zG1ZXS+rst3gk+fVdtOU9lVZtet7pm7SYv7nNC8L
p2Nkm4p/qpvTk5NnmPnabfH+/MzYRLmAeedZsTyzP1++Sp6aG1e0mNba/VNY
KxTf++Bql1azlf2OnqMv1mmW4wtiwT9kVbOYlNWSPqen8PmqaTb12fExPUYf
ZTdukjl57Jg+OJ5W5W3tjmmAY3pxmTWrdopX556/x7+f3TRQDk7WTURDGHAi
c0yy8u8Y+u94ZbJq1vk9Y9K2WZXVmUnsos1zEaUXLqvmlSPZ4/FAOFiTFtmv
/O6Z/bFKZ7nDx05YPW+xJTPa3DZv1/+wpE8ns3JtTFFWa7x0g43E46/evL84
PXlEm4rtS6ulAy8CK8qMd+DByeTJyenT4x/eXFxO6I0JXpE3RKHelfM2d8nb
tGmymUv+mNZubl9kYGCa24tsWaRNC+ovSAbTas6v1q7KXE0qI5Nbe4/Gv4et
oCksprjHX7Cs2/N2icXg09NHxtBb8Sq+f//2u1O/CNXx52VVuRlxx75K27yx
502Tzq5riw8+gI5ynf0KKp9/+O8Xl+dvL5IXWY79zkSQd3nhNlVWNJMsnVXM
EyLk+MHDpxGJTBv96ndQlpXovxb2Afr7cmK/r9LV2lXhc9njl3lWp1PXrAbf
D95/P7HvXV3ng7ffu8ZVvW8G7303sW+x7MFr3zksJv5i8NblxH7XFm5bt4MX
L7O1/e7f/1W+oi0o639Kl6eP+5twuXKd4SwXalZsukwxeiMbk7wp/qIbpVv0
xTvw+PiZCmLYgce/vQOvJ0Rtu3SDJb1Oq3aFPeh/O3j5+4nFOtPbdPDy9w7C
7r/Cd2+37TStV+6mvt6ePOtz5VWWNsnFKl1nlb2F0NnzaVk1GPx8s8mzmToj
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
H+imU1/OaQAA

-->

</rfc>
