Let's say the system has a hardware randomness generator, generating random numbers using a proven truly random process. The distribution of the numbers though, is unknown.
Assume the randomness source generates data blocks $P_1$, $P_2$, ..., $P_n$. There is an one-way function $f(x)$. The output data blocks are $Q_1$, $Q_2$, ..., $Q_n$. There is an initialization vector $Q_0$. The length of $P_n$ blocks, $Q_n$ blocks, $Q_0$, input and output block length of function $f(x)$ are all equal.
For each output block $Q_n$, there is:
$$ Q_n = f(P_n \oplus Q_{n-1}) $$
Questions:
- Can the process above extract the randomness from the hardware source, given a proper $f(x)$ and $Q_0$?
- What is the requirement for the one-way function $f(x)$ and the initialization vector $Q_0$ for this process to work properly?
- Can I replace the $\oplus$ with something else without breaking the randomness? (Replacing it can allow me to relax the block length restriction.)
- Can I extend this method into combining multiple randomness inputs?