[pycrypto] What to do about RandomPool
Dwayne C. Litzenberger
dlitz at dlitz.net
Tue Aug 5 21:48:52 CST 2008
On Tue, Jul 22, 2008 at 08:08:17AM -0700, Paul Hoffman wrote:
> Would there be any objection to replacing RandomPool with a simple
> wrapper around os.urandom? A quick benchmark shows that reading from
> /dev/urandom on Linux is about 10-50x faster than using RandomPool.
Although nobody objected here, a few people on ##crypto (irc.freenode.net)
didn't seem too thrilled with the idea, and as I work more on PyCrypto, I'm
thinking that just replacing RandomPool from under people might not be such
a great idea. For one thing, it would break the few people's code who were
actually using it correctly, which I think is somewhat unfair to them.
Instead, I think I'll just issue a DeprecationWarning when the randpool
module is imported.
Also, after looking a bit more at OS-provided random generators, I'm
starting to think that just returning their output might not be such a
great idea. There just doesn't seem to be any reason to trust them very
What I think I'll do is provide a Fortuna implementation, then provide a
proper RNG on top of Fortuna that runs in its own thread and updates itself
periodically. Furthermore, whenever its .get_bytes() method is called, it
will request random bytes from the OS and XOR them with Fortuna's output
before returning them. That way, as long as either of them produces random
numbers, the output will be random.
But first I need to recover my Fortuna implementation from an older copy,
since "bzr rebase" just deleted my current version. I have tried to be
patient with bzr, but this might be the last straw that makes me finally
switch to git.
Dwayne C. Litzenberger <dlitz at dlitz.net>
Key-signing key - 19E1 1FE8 B3CF F273 ED17 4A24 928C EC13 39C2 5CF7
Annual key (2008) - 4B2A FD82 FC7D 9E38 38D9 179F 1C11 B877 E780 4B45
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 197 bytes
Desc: Digital signature
Url : http://lists.dlitz.net/pipermail/pycrypto/attachments/20080805/75504984/attachment.pgp
More information about the pycrypto