Hard-core predicates and one-bit expansion #
A hard-core predicate is efficiently computable from a seed but unpredictable from its image. Security quantifies over uniform PPT predictors and measures absolute bias from one half, so it also rules out reliable anticorrelation. This property alone does not require the image function to be one-way or injective.
The reduction appends a fixed trial bit to the image, runs a distinguisher, and predicts the trial
on acceptance or its complement on rejection. The distinguishing gap is the average of the signed
biases of the two fixed predictors. Both are single uniform programs, with no choice depending on
the security parameter. Pr[p] is the probability, in the reals, that the program p returns
true (the scoped notation of Cslib.Probability).
Appending a hard-core predicate to an efficient length-preserving permutation gives a one-bit PRG in the existing finite-family security API. This is conditional on the hard-core predicate; the Goldreich–Levin construction is a separate step in the OWP-to-PRG reduction.
Main definitions #
Cslib.Crypto.HardCore: efficient evaluation and uniform computational unpredictability.Cslib.Crypto.hardCorePredictor: the functional distinguishing-to-prediction reduction.
Main results #
Cslib.Crypto.hardCore_advantage_le: a concrete average-prediction-bias bound.Cslib.Crypto.HardCore.indistinguishable: replace a hidden predicate by an independent bit.Cslib.Crypto.OneWayPermutation.pseudorandomGenerator_of_hardCore: conditional one-bit PRG.
References #
- S. Arora, B. Barak, Computational Complexity: A Modern Approach, Chapter 9.
- L. Trevisan, CS276 Lecture 13: Pseudorandom Generators, scribed by Siu-On Chan, Theorem 2 and its prediction reduction.
Adapted from Crypto/Computational/HardCore.lean on the cslib crypto branch at
5ff69ca93402e7c947208dc56396d6d86203ccd8, using the shared nonnegative game API and tidy machines.
A plain polynomial-time predicate whose value is computationally hidden by the image function.
- polyTime : Turing.MultiTapeTM.ComputableInPolyTime predicate Turing.MultiTapeTM.encBits Turing.MultiTapeTM.encBool
Computing the predicate from the seed uses a fixed polynomial-time machine.
- secure : Game.Indistinguishable (fun (adversary : Distinguisher) (n : ℕ) => (predictionGame f predicate adversary n).eval) (fun (x : Distinguisher) (x_1 : ℕ) => Probability.PMF.uniformOfFintype Bool) (Probability.IsPPT Turing.MultiTapeTM.encBool)
A predictor's correctness is indistinguishable from a fair coin.
Instances For
Recover the tidy presentation for proofs without changing the security contract.
The shared security property gives negligible absolute prediction bias.
Establish a hard-core predicate from efficient evaluation and negligible prediction bias.
The prediction experiment is a uniform PPT program when its ingredients are efficient.
Use acceptance of an appended trial bit to predict the hidden predicate.
Instances For
The reduction charges for constructing the extended input and executing the distinguisher.
The distinguishing gap is the average signed bias of two fixed uniform predictors.
Distinguishing the predicate from a fair bit costs at most the average prediction bias.
A hard-core predicate can be replaced by an independent fair bit in every uniform PPT test.
If the image function preserves uniform seeds, the ideal hybrid is uniform at length n+1.
An efficient length-preserving function that preserves uniform seeds gives a one-bit PRG when extended by a hard-core predicate. The later predicate construction uses one-wayness.
A one-way permutation with a hard-core predicate gives a uniform polynomial-time one-bit PRG.