Two popular example dynamical systems for PRNG are
- LFSRs, basically the orbit $(x^ks)_{k>0}$ for some non-zero seed $s$ and (primitive) $x$ in $GF(2^n)^{\times}$
- CTR_DRBG, say with AES128 and 256-bit seed covering the key and initial counter block (i.e. $N+2$ AES encryptions, $N$ for output and one each for updating the key and ICB).
But what about something in between? Something more efficient than "standard" CSPRNG but with better cryptographic properties than LFSRs? One could write down ad hoc constructions all day, but is there anything "good" and well-studied? My application would be high-volume hardware PRNG, so something made from small parallelizable units would be nice.
In an attempt to give one possible answer to the question, how about some hybrid approach with two pieces:
- Smaller, slower crypto blocks, periodically reseeded (e.g. three instances of AES-128 encryption in counter mode, one to update the key for all instances, one to update an ICB for plaintext to the instances, and one to produce 128 bits of pseudorandom every X cycles).
- A good statistical PRNG seeded by the "crypto" portion, reseeded every X cycles.
The "statistical" part may not have great "cryptographic" properties in between reseedings, but it is reseeded often. The goal then would be to find a "good" statistical portion, something smaller than using a purely "cryptographic" solution (e.g. $N+2$ parallel pipelined AES-128 instances to produce $128N$ pseudorandom bits/cycle).