This code demonstrates fault injection analysis (FIA) attacks and countermeasures on Module Lattice Digital Signature Algorithm (ML-DSA). ML-DSA is based on Dilithium.
- Install your favorite distribution of Python (e.g., Python)
- This code was tested using Python 3.11.4 and 3.12.3
- Install your favorite text editor or IDE (e.g., Jupiter, PyCharm)
- Clone this repository
git clone --recurse-submodules https://github.com/intel/ml-dsa-fia-demo.git
- Install the required packages
pip install -r requirements.txt
- Run the notebooks
jupyter notebook demo/demo-attacker.ipynb
jupyter notebook demo/demo-signer.ipynb
- Go to binder
- Paste the link to this repository (i.e.,
https://github.com/intel/ml-dsa-fia-demo) in theGitHub repository name or URLfield - Click on
launch
- The provided code does not work, but it can be made to work with a few changes. Follow the instructions and fix the code in demo/demo-attacker.ipynb and demo/demo-signer.ipynb.
- Alternatively, you can use and modify the code in demo/attacker.py and demo/signer.py. You can run the scripts or the notebooks demo/attacker.ipynb and demo/signer.ipynb.
- Loop-Abort Faults on Lattice-Based Fiat–Shamir and Hash-and-Sign Signatures, SAC 2016
- CRYSTALS-Dilithium: A Lattice-Based Digital Signature Scheme, TCHES 2018
- Differential Fault Attacks on Deterministic Lattice Signatures, TCHES 2018
- Exploiting Determinism in Lattice-based Signatures, AsiaCCS 2019
- FIPS 204 (Draft): Module-Lattice-Based Digital Signature Standard, NIST 2023
- Loop Aborts Strike Back: Defeating Fault Countermeasures in Lattice Signatures with ILP, TCHES 2023