Designing RNGs for crypto use is a finicky thing and making so much as a single mistake can render the entire crypto system useless. 

If you're just doing this for post hangover fun then cool :) 

If you're serious about it then I'd suggest finding an existing team and look to contribute to their efforts. 

These guys are cool. 


as are these guys. 

Both those projects would love collaborators and have the technical ability to peer review contributions 

Have fun!


On Saturday, 23 May 2015, Nathan Ward <> wrote:
Hi all,

As we all know, random numbers are an important part of cryptography, which is required for tools that are important to network operators like the widely deployed RPKI. Most systems today generate random numbers using a PRNG, rather than a dedicated hardware random number generator. A PRNG is only as good as its entropy source - if you have a small amount of entropy, an attacker can start to predict the output of your system’s PRNG, which is obviously bad.

There are a number of existing tools for generating entropy:
- HAVEGE implementations (i.e.
- Audio/video sources (audio_entropyd and video_entropyd)
- Some other things like mouse/keyboard input (i.e. when you wiggle your mouse over that window in whatever that app was that generated keys, puttygen maybe?)
- Network interrupts is also a common source

A week or two back I was a little hungover and didn’t want to do any real work, and decided to write my own entropy harvesting tool, and have the code available at the below URL:

I strongly encourage you NOT to run this on production systems, until it has been certified (a good standard to shoot for would be NIST SP 800-90B perhaps), but I would like to get feedback, so please read the code and suggest improvements. Perhaps you have some additional sources of entropy data that would be useful.

I would particularly like a good way to “boil down” the entropy generated. The Linux kernel by default can take up to 4096 bits, and this provides far, far more than that, which just seems like a bit of overkill. Please feel free to submit pull requests with ideas for that - it would be a great project to learn a bit of Python.

Generally, entropy should not be sourced from a system you don’t control, or sourced over a network you don’t control, for obviously reasons. However, the quality of the data is so good in this case that I believe it negates those concerns. The data is also fetched with HTTPS, so as long as the source doesn't also starting using this as their entropy source (known as entroception) we should be OK - see my recommendation about production systems.

Nathan Ward
(opinions all my own, blah blah blah)
NZNOG mailing list