The Goldreich–Levin hard-core predicate #
Split a seed into two equal halves and an optional spare bit. Apply the one-way function to the first half and retain the rest. The inner product of the two halves is a hard-core predicate. Keeping the spare bit extends the construction to every seed length.
OneWayPermutation.pseudorandomGenerator completes the one-bit PRG construction, including
deterministic polynomial time and security against uniform PPT adversaries.
Main definitions #
paddedFunction,paddedPredicate: the length-total Goldreich–Levin construction.generator: append the hard-core bit to the padded image.
Main results #
padded_hardCore: every one-way function gives a hard-core predicate for its padded function.OneWayPermutation.pseudorandomGenerator: a uniform polynomial-time one-bit PRG.
References #
- O. Goldreich, L. Levin, A Hard-Core Predicate for All One-Way Functions
- S. Arora, B. Barak, Computational Complexity: A Modern Approach, Chapter 9.
Adapted from Crypto/Computational/GoldreichLevin/HardCore.lean on the cslib crypto branch
at 5ff69ca93402e7c947208dc56396d6d86203ccd8, using the shared game API and tidy TM calculus.
The inner product of the first two equal halves, ignoring an optional final bit.
Instances For
The padded function uses ordinary slicing and one call to the supplied function.
The hard-core predicate is an efficient dot product of the two halves.
Permuting the first half preserves uniform seeds of every length.
Translate a predictor for a padded seed to a parity predictor, sampling its spare bits.
Instances For
Parameter rescaling, sampling, and captured adversary calls have a uniform PPT certificate.
The padded prediction experiment is the parity experiment, for either possible spare length.
One-way permutations imply uniform polynomial-time pseudorandom generators with one-bit stretch. Goldreich–Levin supplies the hard-core predicate; uniformity supplies the ideal hybrid.