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 — 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, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
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.
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, and the Cryptology Academy course includes 4 lessons in total. 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.
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; this is — lesson 3 of 4, so you can start here or from the beginning and move at your own pace.
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