No, for restriction of "possible .. with" to a deterministic procedure using the PRNGPseudo RNG output as sole input, and:
- Bound to output of a single shuffled sequence per run. To generate all shuffles, $\lceil\log_2(52!)\rceil=226$ bits of PRNG internal state are required.
- Or bound to use strictly less than $\lceil\log_2(52!)\rceil-160=66$ bits of memory between output of shuffles (for appropriate account of memory).
This is proven by counting the possible states of the deterministic system consisting of the PRNG plus device running the deterministicshuffling procedure.
No. It means that a single instance of a built-in PRNG with that 160-bit limitation can't be used, should we require that the (first, or $k^\text{th}$ for fixed $k$) shuffle generated could be any of the $52!$ shuffles, say because such claim was made. If we go the simplest routeused such PRNG, irrespective of how it was seeded and security, it could be rationally proven such claim is untrue. But, for a secure and properly seeded PRNG and shuffling procedure, such proof can't be by examination of the shuffles produced (even with a 128-bit internal PRNG state). The proof must userely on the sizedesign characteristics of the PRNG. That could be the case in a code audit.
The actualdifficult problem is not making a PRNG with a large state (virtually all modern languages allow to build one). The problem is seeding the RNGit with enough entropy. This is not always possible, much less built "in" the _programming language_¹. However, many modern programming languages (most if you weight in how commonly teached or used/taught they are) allow calling libraries or external services or libraries which, depending on runtime environment, often conveniently provide entropy without a size limitation, and at a rate way more than sufficient for the application.
As long as /dev/random
appropriately re-seeds itself using true entropy, being based on a 160-bit hash or even having a 160-bit state does not imply the (theoretical anyway) limitation of being a PRNG with a 160-bit state. This generator promises to reseed with fresh entropy as needed, and wait when it lacks entropy. It is not (or not supposed to be) a PRNG, that is deterministic after seeding. From this standpoint, /dev/random
gives a stronger insurance than /dev/urandom
.