High quality entropy source

Posted on Thursday, January 24th, 2013 in project logs by DP

Wardy decided to build a high quality random number generator. After searching the web he stumbled upon this project which uses a laser hitting sand in an hour-glass to generate the randomness. He upgraded the project a bit by adding a servo to reset the hour glass. He is currently recording a large number of samples to test out the randomness of it all.

This entry was posted on Thursday, January 24th, 2013 at 7:00 pm and is filed under project logs. You can follow any responses to this entry through the RSS 2.0 feed. You can skip to the end and leave a response. Pinging is currently not allowed.

5 Responses to “High quality entropy source”

  1. Ian G says:

    Seems a pretty awkward way of generating random numbers when you could use a pn junction (i.e. or the random number generators in microcontrollers such as the stm32f4xxx) or you could always use an antenna to pick up cosmic background radiation. And if you wanted to generate random numbers in a weird way why not measure the time between the detection of alpha or beta particles from a radioactive source (i.e. americium found in smoke alarms or potassium in bananas).

    • erdabyz says:

      I already did that with a geiger counter xD. Only I don’t have access to any radioactive enough material to make the counter count fast enough so that I don’t have to wait for more than the battery lasts to get a decent sample of randomness xD.

      Didn’t know about bananas’ radioactivity. Must test it!.

  2. Wardy says:

    @”Ian G”: Yep, you’re right, it is very clunky and awkward… but it is actually very easy to set up with a very small pricetag. The arduino is overkill for this (just use a bare AVR or a PIC chip instead to save money), the ethernet shield it’s connected to is severe overkill for this (when you can just use one way serial data for free). But these are the parts I had lying around in my parts bin. I threw this together in a couple of hours and it passes at least some of the DieHarder tests. I’d call that a win for the casual hobby hacker :)

    For the expert, yes I also agree that a PN junction would be a better noise source but there are some tricky technical difficulties balancing things correctly in that circuit that the newbie (like me) would have some real trouble with. Ditto geiger counters… but they are expensive and fragile. My circuit can be easily reproduced with $15 of parts total.

    It’s probably not cryptographically strong randomness but it’s something that anyone can try for themselves with minimal expense.

    • erdabyz says:

      I made a geiger counter for about 10€ + tube. Cheapass geiger russian tubes run for less than $10 on ebay and are sensitive enough (only gamma and hard beta but it’s something). Most of the counter itsellf were unneccesary accesories. If you stuck to the microcontroller and the HV PSU and other tube-related stuff you could make it for less than $5 + tube.

  3. JBeale says:

    I remember reading about a random generator based on webcam images of a lava lamp. Then they found they could get much higher bandwidth randomness (more random bits per second) by just leaving the lens cap on the camera, and using the resulting image “snow” as the noise source. I guess you’d want a camera that could generate uncompressed output for that. Geiger counters do have a certain cachet though. When I need some random bits I like to use the “hotbits” page at the site.

Leave a Reply

Notify me of followup comments via e-mail. You can also subscribe without commenting.

Recent Comments

  • KH: Really? They are digital inputs driven by an MCU. The MCU GPIO probably has diode clamps and ESD protection. Have you experienced such failures? Please...
  • KH: Neither. Google "Marco Schweighauser’s 8-bit virtual Javascript CPU" and see the first result. Sounds more like a very limited feature toy CPU.
  • Alan: "8-bit x86 like CPU" - isn't that an 8080, or Z80?
  • Geoff: Is it still Sunday somewhere? If so, yes please.
  • hli: Sunday++