Hi,
Interesting article but I'm not exactly sure what target use cases you have in mind.
The abstract states:
One major problem for some hobbists is the lack of secure random number generation on the Arduino platform.
and
In this article we will explore two better methods to generate true random numbers from the Arduino that are both fast, less predictable and less prone to external attack
Unfortunately both methods are really easy to circumvent (short analog input to ground, max. out the accelerometer or spoof it with a replacement I2C source), so it is hardly secure.
Having had some experience with all sorts of RNG's over the years (my company developed gaming equipment, now part of Playtech plc), I think that trying to source entropy from any uncharacterized source is doomed to failure. A 'floating' analog input on the Arduino's processor is susceptible to the system environment it is in, the period or magnitude of any signal is not knowable for any arbitrary case.
By all means, use these (and any other) sources to accumulate entropy to seed and/or adjust an internal PRNG, but if you want 'true' random generation you really need to add some noise source hardware.
For fast generation of pseudo-random numbers, I have always found the Additive number generator from Knuth's
The Art of Computer Programming Vol.2 Seminumerical Algorithms to be excellent. Churning this based on whatever entropy you have is very little overhead.
At the very least, with the methods you currently propose, your library should include some function which attempts to provide a 'secure' random number... i.e. run the algorithm(s) and do some stats to gain a level of confidence that the sources are not compromised, then return a result.
Yours,
TonyWilk