I have been doing some design and testing of a super-simple hardware RNG solution for Arduino projects. There's a lot of these out there, but I find most of them either too complicated, lacking in any sound theory or analysis, or both. Here's mine:
http://1474orchard.ca/projects/?x=entry:entry120926-185104Some of my objectives are:
- a hardware solution with some basis in believable, verifiable theory of operation
- minimal interfacing requirements -- just one pin, no interrupts or timers, no strange register configs
- very simple and foolproof so that even a beginner can bodge it together -- no exotic chips, just normal parts-bin items, and something you can test without a 'scope
- does not depend on environmental factors or user input or sensors
- can work with any old Arduino, not depending on internal features or implementation details of a specific AVR chip
- very low memory requirements -- no eeprom
- able to generate 64 bits of random goodness in less than the blink of an eye
- able to run in a setup() and give good results right at power-on
- software is able to validate that the hardware is working right, if the calling sketch cares
The writeup I've done so far really just covers the hardware. I will follow up with some more analysis of a simple whitening algorithm and, if I have the patience to wait long enough, I will generate enough data for a Diehard analysis. The requirement to be able to generate good data right after power on limits the rate that I can generate test data, and Diehard need a fair slog of test data.