Example 9.1: in 𝔽₁₀₁ˣ, 3^24 ≡ 37 (mod 101), witnessing log₃ 37 = 24.
The multiplicative group (ZMod 101)ˣ has order 100 = φ(101).
Example 9.2: in 𝔽₁₀₁⁺, 46 · 3 ≡ 37 (mod 101), witnessing log₃ 37 = 46.
The additive group ZMod 101 has cardinality 101.
101 is prime, so ZMod 101 is a field and 3 is invertible there.
Computation: log₃ 37 = 34 · 37 = 46 in ZMod 101, matching Example 9.2 via inversion.
Probability that the first n steps of a random walk on a set of size N
all land on distinct vertices (the birthday-product ∏_{i<n} (1 - (i+1)/N)).
Instances For
Expected value of the rho-length for a random walk on a set of size N,
expressed as ∑_{n<N} birthdayProb N n. Theorem 9.3 shows this is asymptotic to √(πN/2).
Instances For
Base case: the empty product is 1, so birthdayProb N 0 = 1.
Recursive relation: appending the (n+1)-th step multiplies by 1 - (n+1)/N.
birthdayProb N n is strictly positive whenever n < N.
birthdayProb N n ≤ 1 whenever n < N (as a product of factors in [0, 1)).
Closed-form for the shifted arithmetic sum: ∑_{i<n} (i+1) = n(n+1)/2.
Exponential upper bound on birthdayProb N n, obtained by summing log(1 - x) ≤ -x.
Quadratic exponential bound: birthdayProb N n ≤ exp(-n²/(2N)), the more
convenient form used in the Gaussian comparison.
The Riemann sum ∑_{n<N} exp(-n²/(2N)) is asymptotic to the Gaussian integral
√(πN/2). This is the analytic engine behind Theorem 9.3.
expectedRho N is bounded above by the Gaussian Riemann sum, term-by-term.
The expected rho-length expectedRho N is asymptotically equivalent to the
Gaussian sum ∑_{n<N} exp(-n²/(2N)) (via matching upper and lower bounds on each birthdayProb).
Theorem 9.3 (Sutherland): the expected rho-length for a random walk on a set
of size N satisfies E[ρ] ~ √(πN/2) as N → ∞.
A triple is valid for cfg when γ = a • α + b • β, i.e. it tracks the correct
linear combination.
Instances For
One step of the Pollard-ρ iteration: identify the class i = h(γ) and add
(c i, d i, δ i) to the triple.
Instances For
Under PartitionValid, a single pollardRhoStep preserves the invariant
γ = a • α + b • β.
Collision relation: if two valid triples have the same group element γ,
then (a₁ - a₂) • α = (b₂ - b₁) • β. This is the linear identity that the
discrete log is extracted from.
DLP extraction (Algorithm 9.5, step 4): if b₂ - b₁ is invertible in ℤ/Nℤ,
solve the collision relation for β = ((b₂ - b₁)⁻¹ (a₁ - a₂)) • α, recovering log_α β.
Iterate pollardRhoStep starting from t₀ for n steps.
Instances For
Iterating preserves the invariant γ = a • α + b • β under PartitionValid.
The γ-component of pollardRhoIter depends only on the initial γ, not on the
initial scalar coordinates (a, b).
Squared form of Corollary 9.8: if a deterministic generic DLP algorithm succeeds
on every t ∈ ZMod p (i.e., the collision set is everything) using s group operations,
then s² ≥ 2p.
Group-theoretic form of Corollary 9.8: for a finite cyclic group G of prime order N,
every deterministic generic DLP algorithm uses at least √2 · √|G| operations.
Squared group-theoretic form of Corollary 9.8: s² ≥ 2 |G|.
Corollary 9.9 (Sutherland): every generic Monte Carlo DLP algorithm in a cyclic
group of prime order p that uses o(√p / log p) random group elements still requires
at least (1 + o(1))√p group operations. The lemma extracts the quantitative
inequalities √p ≤ s and √p - √p/log p < s - r.
The largest prime factor of N > 1, used by Shoup's bound to express the
generic-group lower bound in terms of the hardest prime-order subgroup.
Instances For
The largest prime factor of N > 1 is itself prime.
The largest prime factor divides N.
Any prime factor of N is bounded above by the largest prime factor.
When p is itself prime, its largest prime factor is p.
The largest prime factor is positive.
Shoup's bound applied to the largest prime factor of N: the success probability
of a DLP attack restricted to the prime-order subgroup of order lp(N) is at most
s²/(2·lp(N)).
Theorem 9.7 (Shoup) for general modulus N: reducing to the largest prime factor
gives a success-probability bound of s²/(2 · lp(N)) for any generic DLP attack on ZMod N.
Expected-value lower bound used in Corollary 9.10: ∑_{m<M} (1 - m²/(2p)), which
bounds the expected number of group operations for a Las Vegas DLP algorithm.
Instances For
Closed form: lasVegasExpectedLB p M = M - M(M-1)(2M-1)/(12 p).
When M² ≤ 2p and M ≥ 1, the expected-LB satisfies lasVegasExpectedLB p M ≥ 2M/3.
Corollary 9.10 (Sutherland), explicit form: given Shoup's bound cdf s ≤ s²/(2p)
on the success probability, the expected number of operations of a Las Vegas DLP
algorithm is at least (2√2/3) √p - 2/3, giving the (2√2/3 + o(1))√N lower bound.
Tail-sum identity: ∑_{m<M} |{x : m < f x}| ≤ ∑_x f x, used to convert a
collection of tail counts into a sum of integer-valued data.
Quantitative form of Corollary 9.11: real-valued lower bound on the expected
work (∑ w t)/p in terms of (⌊√p⌋ + 1)(p/2)/p.
Corollary 9.11 (Sutherland): every generic Las Vegas DLP algorithm in a cyclic
group of prime order p uses an expected Ω(√p) group operations, with the explicit
constant √2/2 · √p.
Configuration for Pollard-ρ with distinguished points (Algorithm 9.6): extends
PollardRhoConfig with a boolean predicate B : G → Bool identifying distinguished
group elements that get logged for collision detection.
Instances For
A triple is distinguished when its γ-component is flagged by B.
Instances For
Two distinguished-point triples are a "DP collision" when both are distinguished
and have the same γ (only then does the algorithm record a useful collision).
Instances For
The collision relation (a₁ - a₂) • α = (b₂ - b₁) • β for the distinguished-points
variant, derived from the ordinary Pollard-ρ collision relation.
DLP extraction for the distinguished-points variant of Pollard-ρ:
β = ((b₂ - b₁)⁻¹ (a₁ - a₂)) • α when b₂ - b₁ is invertible in ZMod N.
Iterating the underlying Pollard-ρ step in the DP setting preserves the validity
invariant γ = a • α + b • β.
End-to-end correctness of Pollard-ρ with distinguished points (Algorithm 9.6):
once a DP collision occurs at iteration indices j, k and b_k - b_j is invertible
in ZMod N, the algorithm correctly recovers β as a multiple of α, hence log_α β.
Degenerate sanity check: if the distinguishing predicate B always returns true,
then every triple is distinguished (so Algorithm 9.6 reduces to ordinary Pollard-ρ).