<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.opencircuits.com/index.php?action=history&amp;feed=atom&amp;title=Hardware_random_number_generator</id>
	<title>Hardware random number generator - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://www.opencircuits.com/index.php?action=history&amp;feed=atom&amp;title=Hardware_random_number_generator"/>
	<link rel="alternate" type="text/html" href="http://www.opencircuits.com/index.php?title=Hardware_random_number_generator&amp;action=history"/>
	<updated>2026-07-02T04:44:09Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://www.opencircuits.com/index.php?title=Hardware_random_number_generator&amp;diff=77927&amp;oldid=prev</id>
		<title>DavidCary: rough draft.</title>
		<link rel="alternate" type="text/html" href="http://www.opencircuits.com/index.php?title=Hardware_random_number_generator&amp;diff=77927&amp;oldid=prev"/>
		<updated>2015-02-17T20:02:30Z</updated>

		<summary type="html">&lt;p&gt;rough draft.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
''Extremely rough draft''&lt;br /&gt;
&lt;br /&gt;
How do I build a good hardware random number generator?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== some applications of random numbers ===&lt;br /&gt;
&lt;br /&gt;
Perhaps the most common application of random numbers is as part of the &amp;quot;https://&amp;quot; protocol for viewing websites.&lt;br /&gt;
It, like many cryptographic protocols,&lt;br /&gt;
uses special &amp;quot;one-time&amp;quot; nonce numbers&lt;br /&gt;
that ideally are generated by a hardware random number generator.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.openssl.org/index.php/Random_Numbers]&lt;br /&gt;
&lt;br /&gt;
''After I build a hardware random number generator, what is a good way to feed the sequence of random numbers into such applications?''&lt;br /&gt;
&lt;br /&gt;
==== radio? ====&lt;br /&gt;
&lt;br /&gt;
A few [[projects#radio projects]]&lt;br /&gt;
&amp;quot;randomly&amp;quot; distribute the radio energy over a wide spectrum (spread spectrum).&lt;br /&gt;
They use something like a random number generator&lt;br /&gt;
to pick which frequency to use at any one instant.&lt;br /&gt;
However, as far as I am aware,&lt;br /&gt;
such systems never use unguessable hardware random number generators,&lt;br /&gt;
because the receiver&lt;br /&gt;
must be able to guess the sequence of frequencies used by the transmitter&lt;br /&gt;
(or vice-versa).&lt;br /&gt;
As far as I know,&lt;br /&gt;
non-military spread spectrum radios&lt;br /&gt;
don't even use a cryptographic pseudo-random sequence,&lt;br /&gt;
but (to make synchronization between receiver and transmitter easier&lt;br /&gt;
and to reduce cost and simplify the hardware)&lt;br /&gt;
always use some non-cryptographic pseudo-random sequence,&lt;br /&gt;
often a maximum-length sequence&lt;br /&gt;
(easy to construct with a linear-feedback shift register (LFSR)) or Gold code system.&lt;br /&gt;
&lt;br /&gt;
=== a few more-or-less open-source HRNG designs ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
endolith / probably_random.ino :&lt;br /&gt;
Arduino hardware true random number generator&lt;br /&gt;
[https://gist.github.com/endolith/2568571]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sergio Callegari; Riccardo Rovatti; and Gianluca Setti.&lt;br /&gt;
&amp;quot;Embeddable ADC-Based True Random Number Generator for Cryptographic Applications Exploiting Nonlinear Signal Processing and Chaos&amp;quot;&lt;br /&gt;
[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=1381779]&lt;br /&gt;
[http://www.researchgate.net/publication/3319163_Embeddable_ADC-based_true_random_number_generator_for_cryptographic_applications_exploiting_nonlinear_signal_processing_and_chaos]&lt;br /&gt;
[http://www.researchgate.net/profile/Sergio_Callegari/publication/3319163_Embeddable_ADC-based_true_random_number_generator_for_cryptographic_applications_exploiting_nonlinear_signal_processing_and_chaos/links/09e41511194d9d8d58000000.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Infinite Noise TRNG (True Random Number Generator): The world's easist TRNG to get right&amp;quot;&lt;br /&gt;
by Bill Cox, who gives credit to Peter Allan.&lt;br /&gt;
[https://github.com/waywardgeek/infnoise]&lt;br /&gt;
&lt;br /&gt;
DAV:&lt;br /&gt;
Callegari's ADC-Based True Random Number Generator looks very similar to the&lt;br /&gt;
&amp;quot;Infinite Noise TRNG&amp;quot;&lt;br /&gt;
approach.&lt;br /&gt;
What is the difference, if any?&lt;br /&gt;
&lt;br /&gt;
[http://robseward.com/itp/adv_tech/random_generator/]&lt;br /&gt;
&lt;br /&gt;
[http://www.cryogenius.com/hardware/rng/]&lt;br /&gt;
&lt;br /&gt;
[https://lwn.net/Articles/525459/]&lt;br /&gt;
&lt;br /&gt;
Whirlygig&lt;br /&gt;
[http://hackaday.com/2010/02/06/hardware-based-randomness-for-linux/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
whirlyfly&lt;br /&gt;
[https://github.com/zdavkeos/whirlyfly]&lt;br /&gt;
&lt;br /&gt;
[http://forums.parallax.com/showthread.php/93061-Real-Random-Number-Generator-Object]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some of these open-source hardware random number generators produce over 500 KBytes of high-quality randomness.&lt;br /&gt;
While pseudo-random number generators running on commodity desktop machines run many times faster, I find it hard to imagine any application for high-quality random numbers where 500 KBytes/s is &amp;quot;too slow&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://hackaday.com/2014/02/10/the-two-component-random-number-generator/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Will Ware.&lt;br /&gt;
Hardware Random Bit Generator.&lt;br /&gt;
[http://web.jfet.org/hw-rng.html]&lt;br /&gt;
&lt;br /&gt;
Hardware Random Number Generator&lt;br /&gt;
[http://iank.org/trng.html]&lt;br /&gt;
&amp;quot;(Yet Another) avalanche noise hardware random number generator&amp;quot;&lt;br /&gt;
&amp;quot; ... based upon a design by Will Ware.&amp;quot;&lt;br /&gt;
&amp;quot; ... The final device, after moving the whitening logic to firmware&lt;br /&gt;
(for completeness sake, but at a significant speed expense),&lt;br /&gt;
achieved 9 kB/sec random data.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The Hardware Random Number Generator&amp;quot; page&lt;br /&gt;
[http://www.ciphersbyritter.com/NEWS4/HARDRAND.HTM]&lt;br /&gt;
lots of discussion of theory.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;what is the best method of testing a hardware random number generator?&amp;quot;&lt;br /&gt;
[http://security.stackexchange.com/questions/47475/testing-a-hardware-random-number-generator]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I hear other people say that all modern Smart Cards contain a physical hardware random number generator&lt;br /&gt;
( [http://crypto.stackexchange.com/questions/20068/are-there-some-problems-to-use-pseudo-random-number-generator-in-smart-card] ).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== sources of entropy ===&lt;br /&gt;
&lt;br /&gt;
* noise from reverse biased transistor, which apparently is due to quantum tunneling.&lt;br /&gt;
&lt;br /&gt;
* oscillator jitter (which requires at least 2 oscillators to detect),&lt;br /&gt;
which is apparently due to thermal noise (?)&lt;br /&gt;
(How can we tell that the 2 oscillators&lt;br /&gt;
are actually independent,&lt;br /&gt;
and have not accidentally become phase-locked?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.quantiki.org/wiki/Quantum_Random_Number_Generators]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== A few notes on HRNG theory ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;As of 2004, the best random number generators have 3 parts:&lt;br /&gt;
an unpredictable nondeterministic mechanism,&lt;br /&gt;
entropy assessment, and&lt;br /&gt;
conditioner.&lt;br /&gt;
...&lt;br /&gt;
If the estimate is good, the the conditioned output bits are unbiased full-entropy bits even if the nondeterministic mechanism degrades over time.&lt;br /&gt;
In practice, the entropy assessment is the difficult part.&amp;quot;&lt;br /&gt;
--&lt;br /&gt;
[http://en.wikibooks.org/wiki/Cryptography/Random_number_generation]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With a properly implemented randomness extractor, as long as the HRNG is in a physically secure room, most conceivable &amp;quot;attacks&amp;quot; (through-the-air electromagnetic interference, through-the-power-lines electromagnetic interference, etc.) at worst merely slow down the rate at which high-quality random bits are produced; they don't reduce the quality of whatever bits are produced. (The randomness extractor automatically compensates for any reduced quality of the internal raw data samples, throwing out &amp;quot;suspicious&amp;quot; samples).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== further reading ===&lt;br /&gt;
&lt;br /&gt;
* [http://crypto.stackexchange.com/questions/tagged/random-number-generator]&lt;br /&gt;
&lt;br /&gt;
* [http://crypto.stackexchange.com/questions/tagged/pseudo-random-generator]&lt;br /&gt;
&lt;br /&gt;
* [http://electronics.stackexchange.com/questions/tagged/random-number]&lt;br /&gt;
&lt;br /&gt;
* [[Wikipedia: Hardware random number generator]]&lt;/div&gt;</summary>
		<author><name>DavidCary</name></author>
		
	</entry>
</feed>