Skip to content

Back to the catalog

A Systematic Evaluation of Fault Attacks and Countermeasures on ML-DSA Rejection Sampling
eprint.iacr.orgpaper

A Systematic Evaluation of Fault Attacks and Countermeasures on ML-DSA Rejection Sampling

Systematic evaluation of fault attacks on ML-DSA (FIPS 204) rejection sampling and of proposed countermeasures. It proves the "third rejection test" of patent WO2025261784A1 re-verifies what check 2 already guarantees, and shows that 30,000 fault injections never detect a skipped z-norm check. The author fully recovers s1 against a third-check-protected implementation under randomized signing. Third check and sign-then-verify are complementary; overhead is 0.04–0.05% on x86-64 and 0.83% on Cortex-M4 for the third check.

TL;DR Shows fault attacks that recover the ML-DSA signing key despite the patented third-check countermeasure, and recommends combining it with sign-then-verify.
Document

What it is

A preprint by Yulong Meng (IACR ePrint 2026/2567, approved 21 October 2026) that evaluates fault attacks on ML-DSA (FIPS 204) rejection sampling and the countermeasures proposed against them. It tests the "third rejection test" of patent WO2025261784A1 against sign-then-verify across three fault models and two implementation variants (the reference implementation and a second variant the abstract does not name).

How it works

The proof uses the identity Az − ct = Ay − c·s2 = r. The value the third check compares is exactly r1, which signing already computes. Check 2 passing is what implies r1 = w1, so the third check re-verifies a condition check 2 already guarantees. The patent's six embodiments reduce to two independent conditions, and both cover only skips of check 2.

The z-norm check is the route that directly recovers the signing key s1. In 30,000 fault injections, all six embodiments detected a skipped z-norm check at a rate of zero. Using this gap, the author recovered s1 in full (all 1024 coefficients across four polynomials) from a third-check-protected implementation under randomized signing, the FIPS 204 default.

flowchart TD
    A[Fault in rejection sampling] --> B{Which check is skipped?}
    B -->|Check 2| C[Third check detects it]
    B -->|Check 2| D[Sign-then-verify misses it on reference code]
    B -->|z-norm check| E[Third check detects nothing]
    B -->|z-norm check| F[Sign-then-verify detects it]

What to do

The paper recommends deploying both the third check and sign-then-verify. Either one alone leaves a complete attack path open, and together they cover every path the author evaluated.

Countermeasurex86-64 overheadCortex-M4 overhead
Cheapest third-check embodiment0.04–0.05%0.83%
Sign-then-verify22–24%40.0%

The third check is about 460–590 times cheaper than sign-then-verify on x86-64 and about 48 times cheaper on Cortex-M4. The combined cost is almost entirely that of sign-then-verify.

Caveats

  • Sign-then-verify fails entirely against a check 2 skip on the reference implementation: every faulty signature passes verification.
  • The cheapest third-check embodiment detects every exploitable signature from a check 2 skip, but it never detects a z-check skip.
  • The page is a preprint with no stated peer review. It gives no details of the fault injection setup, and the abstract does not say whether the faults were simulated or physical.

Organisations named here

  • FIPS 204
  • ML-DSA
  • sign-then-verify
  • WO2025261784A1

Technologies named here

  • ML-DSA
  • Patent WO2025261784A1 third rejection test countermeasure
  • Sign-then-verify
  • Fault injection experiment
  • x86-64 and Cortex-M4 platforms
  • Cortex-M4