3 ms·
Why are things like Mersenne Twister or linear congruential generators platform dependent? To me, there are three classes of reasons you would need random numb
by fryguy 12y ago
Why are things like Mersenne Twister or linear congruential generators platform dependent?
To me, there are three classes of reasons you would need random numbers:
1. Simulation. Things like Monte Carlo. In this case, only the statistical quality of the numbers matters.
2. Repeatable simulation. Things like fuzzing tests or benchmarks, where you want them to be repeatable. In this case, you care about determinism and the statistical quality of the numbers.
3. Resource allocation. In this case, you have a set of things that you want to be unique, but to either make them unpredictable (process numbers, invoice numbers) or unique without sharing state (guids). You care about the statistical quality and unpredictability here.
The problem is that 2 and 3 are at odds with each other. 3 requires a constant source of entropy, and 2 requires there to be no entropy.
I think the following slides are relevant: http://www.openbsd.org/papers/hackfest2014-arc4random/mgp00001.html http://www.openbsd.org/papers/hackfest2014-arc4random/mgp000...
- nitrogen 12y agoI would add a #4: cryptography. You don't need to add entropy for #3. If a CSPRNG with n bits of initial entropy as a seed can satisfy #4, then it's also good enough for #3.
- fryguy 12y agoMy understanding is that the way cryptography is done is by having hardware entropy source in the CPU fed into some sort of hashing algorithm. Having a CSPRNG with only n bits of initial entropy either exposes the problem of if an attacker can somehow get the state of the CSPRNG, then they can predict future random numbers that are generated (and previous ones, depending on implementation). Constantly reseeding with entropy means that it's not possible to do that.
- bmm6o 12y agoI meant that "true" random numbers are platform dependent.