CRYSTALS-Dilithium & Falcon Signatures
Compare lattice-based digital signature schemes standardized by NIST.
CRYSTALS-Dilithium & Falcon Signatures is a free Cryptology Academy lesson on CoddyKit. This is lesson 3 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Cryptology Academy learning path, and your progress syncs across the web and the CoddyKit app. The Cryptology Academy course includes 4 lessons in total.
Post-Quantum Signatures Need
RSA and ECDSA signatures are broken by Shor's algorithm. Post-quantum signatures must replace them for: TLS certificates, code signing, email signing (S/MIME, PGP), and software update authentication. NIST standardized two lattice-based schemes: ML-DSA and FN-DSA.
CRYSTALS-Dilithium (ML-DSA)
Dilithium is based on the hardness of Module-LWE and Module-SIS (Short Integer Solution). Security proof in the QROM (Quantum Random Oracle Model). Three variants: Dilithium2 (~128-bit), Dilithium3 (~192-bit), Dilithium5 (~256-bit). Simple, rejection-sampling-free sign path.
Dilithium Signing
Private key: secret matrices s1, s2. Public key: t = As1 + s2. Sign: sample random y; compute w = Ay; compute challenge c = H(mu || w1) where w1 = HighBits(w); compute z = y + cs1; if ||z|| or ||r0|| is too large, reject and retry. Output (z, c, hint).
Dilithium Verification
Verify (z, c, hint): check ||z|| is small; compute w' = Az - ct; use hint to recover w1; verify c == H(mu || w1). The hint is a small number of bits from MakeHint(). Rejection ensures z does not leak s1 — the security argument is a "aborts-then-uniform" argument.
Dilithium Key/Signature Sizes
ML-DSA-65 (Dilithium3, 192-bit security): public key 1952 bytes, private key 4000 bytes, signature 3293 bytes. Compare: ECDSA-P256: 64-byte public key, 64-byte signature. Dilithium is ~40-50x larger in signatures but quantum-safe.
Falcon (FN-DSA)
Falcon is based on NTRU lattices and uses a Gaussian sampler over the NTRU lattice. Signatures are significantly smaller than Dilithium but signing requires a floating-point Gaussian sampler — harder to implement in constant time and more complex to code securely.
Falcon Key/Signature Sizes
Falcon-512 (128-bit security): public key 897 bytes, signature 666 bytes — much smaller than Dilithium. Trade-off: Falcon is harder to implement securely (Gaussian sampling susceptible to timing attacks). Suitable for constrained bandwidth but requires careful implementation.
SPHINCS+ (SLH-DSA)
SPHINCS+ is a hash-based signature scheme — conservative choice with no structural algebraic assumptions. Security relies only on hash function security. Signature size: ~8-50 KB (large). Slow signing. Used where long-term trust is critical and performance is secondary.
Choosing Between Schemes
ML-DSA (Dilithium): general purpose, simple implementation, good for TLS certificates and code signing. FN-DSA (Falcon): bandwidth-constrained environments (IoT, LPWAN). SLH-DSA (SPHINCS+): ultra-conservative, long-lived roots (CA offline keys, software root of trust).
Implementation Concerns
Dilithium: rejection sampling may leak branch timing — use constant-time comparison. Falcon: Gaussian sampler uses floating-point — ensure FP determinism. Both: avoid side-channels in polynomial arithmetic. Use reference implementations from NIST submission packages.
FIPS Standards
NIST FIPS 204: ML-DSA (Dilithium). NIST FIPS 205: SLH-DSA (SPHINCS+). NIST FIPS 206: FN-DSA (Falcon). All published August 2024. Libraries: OpenSSL 3.x, BoringSSL, liboqs (Open Quantum Safe project) implement all three.
Quick Check
What is the main advantage of Falcon over Dilithium?
Recap
ML-DSA (Dilithium): lattice-based, simple, ~3 KB signatures. FN-DSA (Falcon): NTRU-based, ~700-byte signatures, complex implementation. SLH-DSA (SPHINCS+): hash-based, conservative, large. All standardized in FIPS 204/205/206. Next: migrating to PQC with hybrid approaches.
Learn Cryptology Academy with an AI tutor — free
Write and run real code in your browser, get instant help from a 24/7 AI tutor, and pick up where you left off on the web or in the app.
- Courses
- 67
- Lessons
- 261
Frequently Asked Questions
Is the “CRYSTALS-Dilithium & Falcon Signatures” lesson free?
Yes — the full text of “CRYSTALS-Dilithium & Falcon Signatures” is free to read here on the web. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Cryptology Academy course, upgrade to CoddyKit PRO. The Cryptology Academy course includes 4 lessons in total.
What will I learn in “CRYSTALS-Dilithium & Falcon Signatures”?
Compare lattice-based digital signature schemes standardized by NIST. You practise Cryptology Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Cryptology Academy?
No prior experience is required. Cryptology Academy on CoddyKit is structured for beginners through advanced learners, so you can start here or from the beginning and move at your own pace. This is lesson 3 of 4.
How long does the “CRYSTALS-Dilithium & Falcon Signatures” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Cryptology Academy lesson?
Yes. Every Cryptology Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Shor's & Grover's Algorithms Explained
- CRYSTALS-Kyber: Lattice-Based KEM
- CRYSTALS-Dilithium & Falcon Signatures
- Migration to PQC: Hybrid Approaches