4.3 Lattice Sieving
The fastest known approach to SVP. The algorithm that defines the concrete bit-security of every lattice scheme.
Sieving algorithms solve the Shortest Vector Problem (SVP) by maintaining a large list of lattice vectors and repeatedly combining pairs (or tuples) to produce shorter ones. Starting from an exponentially large random sample of lattice vectors, sieving distills them down to a list containing a shortest vector.
Sieving currently achieves the best known asymptotic complexity for SVP — single-exponential in dimension — and is the algorithm of choice inside BKZ for solving the local SVP oracle. The cost of sieving directly determines the security level of deployed lattice schemes.
Intuition
Imagine looking for the shortest stick in an enormous pile. Measuring every stick is hopeless. Lattice sieving takes a different route: it keeps a large collection of lattice vectors, and whenever two of them are close to each other, it replaces the longer one by their difference, which is shorter.
Repeating this shrinks the whole collection until it contains very short vectors. The price is memory: the list has to be exponentially large in the dimension. Sieving is the fastest known practical method for the shortest vector problem, so its cost is what security estimates are based on.
The AKS Sieve (2001)
Ajtai, Kumar, and Sivakumar proved in 2001 that SVP can be solved in single-exponential time and space — the first such algorithm. The AKS sieve runs in:
time and space for some constant . While not practical (the constant is large and the algorithm is complex), it established that SVP can be solved in single-exponential time , beating the of enumeration.
The Gauss Sieve (2010)
Nguyen and Vidick’s 2008 sieve was the first practical heuristic sieve; Micciancio and Voulgaris’s Gauss sieve (2010) made sieving much faster in practice. It maintains a list of vectors and repeatedly reduces pairs:
For vectors , if or , replace with the shorter combination. Continue until no further reductions are possible. The result is a Gauss-reduced list whose shortest element approximates .
The Gauss sieve is conjectured to run in heuristic time with a list of about vectors.
The 2-Sieve and ListSieve
Alongside the Gauss sieve, Micciancio and Voulgaris (2010) introduced ListSieve, a variant with provable guarantees but much larger exponents (roughly time). The heuristic 2-sieve idea, from Nguyen–Vidick: sample about lattice vectors of length around , then find all pairs within distance of each other:
Replace both and with if it is shorter. Repeat. Heuristically, the list converges to a shortest vector in time and space.
The BDGL Sieve (2016)
Becker, Ducas, Gama, and Laarhoven’s 2016 sieve reduced the exponent to approximately using angular locality-sensitive hashing (LSH). This is currently the best known classical algorithm:
The idea: instead of checking all pairs in the list, use LSH to quickly find pairs of vectors with small angle (equivalently, vectors where their sum or difference is short). Two vectors produce a short combination when:
i.e., the angle between them is less than . LSH partitions the unit sphere into caps; vectors in the same cap are likely to have a small angle and thus form a productive pair.
Quantum Sieving
The BDGL sieve can be quantized using Grover’s algorithm to speed up the pair-finding step. The quantum variant achieves:
This is why post-quantum parameters must account for this quantum speedup as well as classical sieving — the block size an attack needs has to be large enough that even stays out of reach.
Sieving in Practice
Sieving becomes practical in dimensions above roughly 70–80 (compared to enumeration, which dominates below that). Inside BKZ- with large , the local SVP oracle is solved by a sieve in the projected -dimensional sublattice. For , sieving is faster than pruned enumeration.
The g6k library (see next section) provides a production-quality implementation of these sieves and is the tool of choice for lattice challenges and security analysis.
The Nguyen–Vidick Sieve: Precise Complexity
The Nguyen–Vidick (NV) sieve (2008) was the first practically efficient sieve with a clean heuristic analysis. Given a list of lattice vectors sampled uniformly from a ball of radius , the sieve finds all pairs such that and replaces them. The list converges when no more reductions are possible.
The heuristic analysis proceeds by counting the expected number of pairs. In dimension , two vectors of length about satisfy exactly when their angle is at most 60°, which for random directions happens with probability:
To ensure each output vector has expected one productive partner — so the list self-reduces — we need , giving list size:
Checking all pairs naively then dominates the running time:
Later sieves keep the same list size and attack the quadratic pair search, which is exactly what BDGL’s locality-sensitive hashing does.
Tuple Sieving: k-Sieve for k > 2
Tuple sieves generalize pairwise sieving to combinations of vectors. The -sieve (Bai–Laarhoven–Stehlé, 2016; Herold–Kirshanova, 2017) finds tuples such that is shorter than all , for signs .
The key improvement: a -tuple reduces vectors that no 2-subset can reduce. The 3-sieve (implemented in g6k) achieves heuristic complexity:
The 3-sieve is slower than BDGL (which achieves ). Its advantage is memory: a list of vectors instead of . When memory rather than time is the bottleneck, trading extra time for a smaller list is worthwhile, which is why g6k ships a triple sieve.
Larger lowers the memory exponent further but raises the time, and the combinatorial cost of managing -tuples grows rapidly, making the practical sweet spot.
Time–Memory Trade-offs in Sieving
Sieving algorithms exhibit a fundamental time–memory trade-off: using less memory forces more computation, and vice versa. This trade-off is critical for security analysis because an adversary with a large memory budget can sieve faster.
At the extremes: with a full list of about vectors, BDGL achieves . Going below that list size means switching to tuple sieves or other low-memory variants, and the time exponent rises as the memory exponent falls; at the far end, polynomial-memory enumeration pays super-exponential time.
For attacks on NIST schemes (sieving block sizes of roughly 400 and above), BDGL’s list would hold or more vectors — far beyond any classical hardware. Memory-reducing variants are therefore more practically relevant for hardware-constrained adversaries, and cost estimates that ignore memory (such as Core-SVP) err on the conservative side.
Check Your Understanding
Q1. When does subtracting one list vector from another give a shorter vector?
Q2. What problem does locality-sensitive hashing solve in the BDGL sieve?
Q3. Why might an attacker prefer a slightly slower sieve that needs much less memory?
Q4. Why do quantum computers only modestly affect lattice security, unlike RSA?