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:

O(2cn)\mathcal{O}(2^{cn})

time and space for some constant cc. While not practical (the constant is large and the algorithm is complex), it established that SVP can be solved in single-exponential time 2O(n)2^{O(n)}, beating the 2O(nlog⁡n)2^{O(n \log n)} 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 LL of vectors and repeatedly reduces pairs:

For vectors v,w∈Lv, w \in L, if ∥v−w∥<∥v∥\|v - w\| < \|v\| or ∥v+w∥<∥v∥\|v + w\| < \|v\|, replace vv with the shorter combination. Continue until no further reductions are possible. The result is a Gauss-reduced list whose shortest element approximates λ1(Λ)\lambda_1(\Lambda).

The Gauss sieve is conjectured to run in heuristic time 20.415n+o(n)2^{0.415n + o(n)} with a list of about 20.2075n+o(n)2^{0.2075n + o(n)} vectors.

Sieving: pairwise shortening

Press Step to combine one pair of vectors, or Run to let the sieve work until nothing can be shortened.

shortest
list size
40
reductions
0
longest (circle radius)
9.18
shortest found / λ₁
0.91 / 0.85

40 random lattice vectors sampled. Press Step to shorten one.

What to notice: A sieve never looks for the shortest vector directly. It keeps a big list and keeps replacing a vector by v − w or v + w whenever that is shorter, so the whole list shrinks toward the origin. In 2D forty vectors are plenty; in dimension d the list needs about 20.2075d vectors, and BDGL finds the useful pairs in about 20.292d time. That memory wall is why sieving is limited by RAM, not just CPU.

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 23.2n2^{3.2n} time). The heuristic 2-sieve idea, from Nguyen–Vidick: sample about N=20.2075nN = 2^{0.2075n} lattice vectors of length around RR, then find all pairs within distance RR of each other:

v,w∈L,∥v−w∥≤R  ⟹  v−w is a candidatev, w \in L,\quad \|v - w\| \leq R \implies v - w \text{ is a candidate}

Replace both vv and ww with v−wv - w if it is shorter. Repeat. Heuristically, the list converges to a shortest vector in 20.415n2^{0.415n} time and 20.2075n2^{0.2075n} space.

The BDGL Sieve (2016)

Becker, Ducas, Gama, and Laarhoven’s 2016 sieve reduced the exponent to approximately 0.292n0.292n using angular locality-sensitive hashing (LSH). This is currently the best known classical algorithm:

TBDGL=20.292n+o(n),MBDGL=20.208n+o(n)T_{\text{BDGL}} = 2^{0.292n + o(n)}, \quad M_{\text{BDGL}} = 2^{0.208n + o(n)}

The idea: instead of checking all O(N2)\mathcal{O}(N^2) 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 v,wv, w produce a short combination when:

⟨v,w⟩>12∥v∥∥w∥\langle v, w \rangle > \frac{1}{2}\|v\|\|w\|

i.e., the angle between them is less than 60°60°. 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:

Tquantum=20.2653n+o(n)T_{\text{quantum}} = 2^{0.2653n + o(n)}

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 20.2653β2^{0.2653\beta} 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-β\beta with large β\beta, the local SVP oracle is solved by a sieve in the projected β\beta-dimensional sublattice. For β≥80\beta \geq 80, 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 NN lattice vectors sampled uniformly from a ball of radius RR, the sieve finds all pairs (v,w)(v, w) such that ∥v−w∥≤R\|v - w\| \leq R 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 nn, two vectors v,wv, w of length about RR satisfy ∥v−w∥≤R\|v-w\| \leq R exactly when their angle is at most 60°, which for random directions happens with probability:

P[∥v−w∥≤R]≈(sin⁡60∘)n=(32)n≈2−0.2075nP[\|v-w\| \leq R] \approx \left(\sin 60^\circ\right)^n = \left(\tfrac{\sqrt{3}}{2}\right)^n \approx 2^{-0.2075n}

To ensure each output vector has expected one productive partner — so the list self-reduces — we need N⋅P≈1N \cdot P \approx 1, giving list size:

N=20.2075n+o(n)N = 2^{0.2075n + o(n)}

Checking all N2/2N^2 / 2 pairs naively then dominates the running time:

TNV=20.415n+o(n),MNV=20.2075n+o(n)T_{\text{NV}} = 2^{0.415n + o(n)}, \quad M_{\text{NV}} = 2^{0.2075n + o(n)}

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 kk vectors. The kk-sieve (Bai–Laarhoven–Stehlé, 2016; Herold–Kirshanova, 2017) finds tuples (v1,…,vk)(v_1, \dots, v_k) such that ∑i=1kϵivi\sum_{i=1}^k \epsilon_i v_i is shorter than all viv_i, for signs ϵi∈{±1}\epsilon_i \in \{\pm 1\}.

The key improvement: a kk-tuple reduces vectors that no 2-subset can reduce. The 3-sieve (implemented in g6k) achieves heuristic complexity:

T3-sieve≈20.37n+o(n),M3-sieve=20.1887n+o(n)T_{3\text{-sieve}} \approx 2^{0.37n + o(n)}, \quad M_{3\text{-sieve}} = 2^{0.1887n + o(n)}

The 3-sieve is slower than BDGL (which achieves 20.292n2^{0.292n}). Its advantage is memory: a list of 20.1887n2^{0.1887n} vectors instead of 20.2075n2^{0.2075n}. 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 kk lowers the memory exponent further but raises the time, and the combinatorial cost of managing kk-tuples grows rapidly, making k=3k = 3 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 20.208n2^{0.208n} vectors, BDGL achieves T=20.292nT = 2^{0.292n}. 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 2802^{80} 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

  1. Q1. When does subtracting one list vector from another give a shorter vector?

  2. Q2. What problem does locality-sensitive hashing solve in the BDGL sieve?

  3. Q3. Why might an attacker prefer a slightly slower sieve that needs much less memory?

  4. Q4. Why do quantum computers only modestly affect lattice security, unlike RSA?