International Association for Cryptologic Research

International Association
for Cryptologic Research

Transactions on Cryptographic Hardware and Embedded Systems, Volume 2024

Correction Fault Attacks on Randomized CRYSTALS-Dilithium


README

Artifact: Correction Fault Attacks on Randomized CRYSTALS-Dilithium

This is the artifact for the paper "Correction Fault Attacks on Randomized CRYSTALS-Dilithium" by Elisabeth Krahmer, Peter Pessl, Georg Land, and Tim Güneysu published at TCHES 2024/3.
The artifact consists of three independent parts:

  1. the fault attack on the expansion of A,
  2. the lattice reduction that enables to recover the full secret key even if not all coefficients are known, and
  3. the skipping fault attack.

For convenience, all three parts can be built with running sudo docker build -t dilfaults . in this directory, and executed subsequently with sudo docker run -t dilfaults.
Alternatively, individual instructions are given below.

Correction Fault Attack on Expansion of A

Prerequisites

For the code, we the NTL and GMP libraries to be installed.
Furthermore, the machine must feature avx2 instructions (the code will fail with illegal instruction if this is not the case).

Building

make -j builds:

We tested this successfully (and without warnings) with gcc versions 11.4.0 and 13.1.0.

Running

chmod +x run.sh
./run.sh

runs for each Dilithium parameter set:

Lattice Reduction to recover s1 from known coefficients in s1hat

Prerequisites

For the code, we require the NTL, FPLLL and GMP libraries to be installed.

Building

make builds:

We tested this successfully (and without warnings) with gcc version 11.4.0.

Running

chmod +x run.sh
./run.sh

runs the lattice reduction tests

Skipping Fault Correction Attack

Prerequisites

For the code, we require the NTL and GMP libraries to be installed.

Building

make builds:

We tested this successfully (and without warnings) with gcc versions 11.4.0 and 13.1.0.
Please do not use make -j, which may not work in this directory.

Running

chmod +x run.sh
./run.sh

runs for each Dilithium parameter set: