OWP ⇒ PRG (Blum–Micali–Yao)
Statement
Every one-way permutation on yields a PRG of any polynomial stretch — Yao82a. With the GL89 hard-core predicate , the generator
maps bits to bits and is pseudorandom for every polynomial — GL89.
Sketch
is hard-core for , so is pseudorandom, which is the case . Since permutes , each is uniform, and a hybrid argument over the output bits, read in reverse order, turns a distinguisher with advantage into a predictor of with advantage , which GL89 decoding turns into an inverter for — standard.
\begin{algorithm}
\algname{Algorithm}
\caption{$G(x, r)$}
\begin{algorithmic}
\State $s \gets x$
\For{$i = 1, \ldots, \ell$}
\State $\sigma_i \gets \langle s, r \rangle \bmod 2$; $s \gets \pi(s)$
\EndFor
\Return $(\sigma_1, \ldots, \sigma_\ell, s, r)$
\end{algorithmic}
\end{algorithm}
Notes
- Efficiency: one evaluation of per output bit. If no circuit of size inverts with probability above , the inner products of with independent strings are simultaneously hard-core, so each evaluation can yield output bits — standard. No fully-black-box construction does better: a generator that stretches its seed by bits must query such a permutation at points — GT00.
- For the discrete-logarithm permutation, with the half-interval predicate as the hard-core bit, the construction is the Blum–Micali generator — BM84.
- For one-way functions that are not permutations, the iteration fails because need not be uniform; OWF ⇒ PRG instead builds a false-entropy generator from , pairwise-independent hashing of and the GL89 bit, and extracts its pseudoentropy by further hashing — HILL99.