FIPS 206 · Post-Quantum Cryptography

The Signatures Protecting Your Keys Won't Survive Quantum Computers.

We built falcon-rs — a pure Rust implementation of FN-DSA, NIST's post-quantum digital signature standard. Here's why it matters and how NTRU lattice math keeps your signatures safe.

LS
lattice-safe
·8 min read·April 2026
Scroll
The Problem

Everything You Sign Today Is Borrowed Time

Every TLS certificate, every crypto wallet, every software update signature on the planet relies on the same two mathematical assumptions: factoring large integers is hard (RSA) and solving discrete logarithms on elliptic curves is hard (ECDSA).

In 1994, Peter Shor proved that a sufficiently large quantum computer can solve both problems in polynomial time. Not faster — categorically different. A 4096-bit RSA key that would take a classical computer billions of years to crack would fall in hours.

Today's Signatures

RSA · ECDSA · EdDSA
Rely on factoring & discrete logs

Shor's

Quantum Break

All current signature schemes become forgeable in polynomial time

This isn't science fiction. NIST began its post-quantum standardization process in 2016 and finalized FIPS 206 — the FN-DSA standard (formerly Falcon) — as one of the approved replacements. The migration deadline is real: government systems must transition by 2035.

The Solution

Lattice Math That Quantum Can't Crack

Falcon — now standardized as FN-DSA (FFT over NTRU-Lattice‑Based Digital Signature Algorithm) — replaces the vulnerable math with a problem no quantum algorithm can efficiently solve: the Shortest Vector Problem (SVP) on lattices.

Think of a lattice as an infinite, regularly-spaced grid of points in high-dimensional space. Given an arbitrary target point, finding the closest lattice point is easy if you know the secret short basis vectors — but astronomically hard if you only know long public basis vectors. Even Grover's algorithm only provides a quadratic speedup, leaving the problem firmly intractable.

The key insight: Signing a message = sampling a short vector near a secret basis in an NTRU lattice using Fast Fourier Sampling. Verification = checking that the signature vector is short enough without needing the secret basis. Without the trapdoor, forging a signature requires solving SVP — which remains exponentially hard for quantum computers.
1

Key Generation

Solve the NTRU equation to find a short basis (f, g, F, G) of a lattice, then compute the public polynomial h = g/f mod q. The short basis is your private key — the public polynomial h is your public key.

2

Signing — Fast Fourier Sampling

Hash the message to a point in the lattice. Using the LDL* tree decomposition of the private basis, sample a close lattice vector via discrete Gaussian distributions — all performed in FFT domain for speed.

3

Verification

Recompute the hash-to-point polynomial, reconstruct the candidate signature vector using only the public key, and check that its L² norm is below the security bound. No private key needed.

The Implementation

falcon-rs — Pure Rust, Zero Compromise

falcon-rs is a faithful port of Thomas Pornin's C reference implementation, rewritten entirely in Rust with zero C dependencies. It passes every NIST Known Answer Test for both FN‑DSA‑512 and FN‑DSA‑1024, achieving bit-for-bit parity with the original.

main.rs
use falcon::prelude::*;

// Generate an FN-DSA-512 key pair
let kp = FnDsaKeyPair::generate(9).unwrap();

// Sign a message with domain separation
let ctx = DomainSeparation::Context(b"my-protocol-v1");
let sig = kp.sign(b"Hello, post-quantum world!", &ctx).unwrap();

// Verify with just the public key
FnDsaSignature::verify(sig.to_bytes(), kp.public_key(),
    b"Hello, post-quantum world!", &ctx).unwrap();
92
Tests Pass
164
Unsafe Audited
0
C Dependencies
666B
Signature Size
Pure Rust no_std WASM Ready Zeroize-on-Drop Constant-Time Fuzz Tested Serde Support SIMD NTT
Performance

Faster Than C — Where It Matters

Key generation — the most complex operation, involving NTRU equation solving and LDL* tree construction — is consistently 18–24% faster than the C reference on Apple Silicon. Signing and verification trade marginal speed for constant-time execution, a deliberate security choice.

OperationC Referencefalcon-rsRatio
512 KeyGen5.55 ms4.23 ms0.76× ✓
512 Sign213 µs279 µs1.31×
512 Verify14.3 µs26.6 µs1.86×
1024 KeyGen18.6 ms15.2 ms0.82× ✓
1024 Sign434 µs569 µs1.31×
1024 Verify27.8 µs54.5 µs1.96×
Why is verify slower? By design. falcon-rs uses constant-time hash-to-point logic, eliminating timing side-channels at the cost of ~2× verify time. The C reference uses variable-time code that leaks information through execution timing. We chose security over benchmarks.
Why It Matters

The Quantum Clock Is Ticking

Consider "harvest now, decrypt later" attacks: adversaries record encrypted traffic today and store it. When quantum computers arrive, they retroactively break the signatures and decrypt everything. Your data signed with ECDSA in 2026 could be forged in 2035.

FN-DSA is uniquely positioned among NIST's post-quantum standards because of its compact signatures — at 666 bytes (FN-DSA-512), it produces the smallest signatures of any lattice scheme, making it ideal for bandwidth-constrained environments: blockchain transactions, IoT devices, embedded systems, and certificate chains.

falcon-rs brings this to the Rust ecosystem with no_std support, WASM compilation, and a security-audited codebase — making post-quantum signatures accessible everywhere from cloud servers to smart cards to web browsers.

References & Further Reading

Sources & Links

Post-Quantum or Post-Mortem. Your Choice.


View on GitHub

crates.io/crates/falcon-rs · docs.rs/falcon-rs · MIT License