[Python-ideas] Globally configurable random number generation

Sturla Molden sturla.molden at gmail.com
Mon Sep 14 16:21:11 CEST 2015

On 14/09/15 15:43, Stefan Krah wrote:

> These are sane, unambiguously named APIs. I wish Python had more
> of those.  If people must have their CSPRNG, please let's leave
> the random module alone and introduce a crypto module like Go.

In a perfect world, every programmer would know the difference between 
PRNGs for numerical simulation and entropy sources for cryptography.

Those that do will still use os.urandom or just read from /dev/urandom 
or /dev/random for cryptography.

Those that do know the need for mathematical precision when simulating 
samples from a given distribution. Those that do know the need for a 
fixed seed because a Monte Carlo simulation should be exactly 
reproducible in a scientific context.

The problem is users who have no idea that the Mersenne Twister is 
constructed for producing random deviates that are great for numerical 
simulation -- and that the Mersenne Twister is very weak for cryptography.

Using os.urandom as default entropy source has the opposite effect. It 
is not constructed for being mathematically precise, it is slow, and it 
does not allow for a fixed seed and exact reproducibility.

Whatever we do there are someone who are going to shoot their leg off.

A crypto module would perhaps be great, but it does not solve anything. 
Someone who uses random.random instead of os.urandom is likely to use 
random.random instead of a PRNG in a crypto module as well. Mostly this 
is about propagating knowledge of random number generators to new 
developers and science students.


More information about the Python-ideas mailing list