High-Entropy Symbol Generator
ABSTRACT: We discuss the principles of a High-Entropy Randomness
Generator (also called a Hardware Random Number Generator,
or True Random Number Generator) that
is suitable for a wide range of applications, including cryptography
and other high-stakes adversarial applications. It harvests entropy
from physical processes, and uses that entropy efficiently. The
hash saturation principle is used to distill the data,
resulting in virtually 100% entropy density. This is calculated, not
statistically estimated, and is provably correct under mild
assumptions. In contrast to a Pseudo-Random Number Generator, it has
no internal state to worry about, and does not depend on unprovable
assumptions about ``one-way functions''. We also describe a low-cost
high-performance implementation, using the computer's audio I/O
You can view the full paper,
which covers the theoretical principles and engineering features,
including installation instructions.
You can download turbid.tgz source.
You can have a look at the main program, turbid.c
The code is in "beta" status. People are using it. There are no
open bug reports.
Request: I would like to be able to ship configuration and
calibration info for a wider range of soundcards. Therefore: If you
calibrate a card, please send me <email@example.com> the resulting .ctl
file, and the values for the
-Q -R -B and
- 3 May 2005 -- Tweaked things to compile cleanly against
the latest version of ALSA (the version that ships with Debian
Sarge) under the latest compilers.
- 3 Dec 2002 -- Updated things to work with the latest ALSA
release (rc6). This release perpetrated an undocumented
incompatibility in the card ID strings, such as appear in the files
read and written by alsactl. I managed to divine the new IDs for many
cards, but not the es1370. If you have the latter card, you will have
to edit es1370.ctl and replace the word "card0" with whatever alsactl
wants. (Run alsactl -f foo.ctl store and look at the first line of
- 3 Dec 2002 Minor cleanups of the makefiles et cetera.
- 12 Nov 2002 -- Added support for the
Crystal cs4236 or cs4239 sound-chip on the IBM Thinkpad.
- 12 Nov 2002 -- Updated the patch-file to work cleanly on the
current ALSA release (rc5).
- 12 Nov 2002 -- Tried to get Extigy working. Alas, ALSA
apparently supports at most 16 bits at 48000 frames per second for USB
devices, which defeats the purpose of buying a nice 24-bit soundcard
that can produce 96000 frames per second. It would be nice if omebody
who knows about ALSA drivers would fix this.
- 16 October 2002 -- Patched the ALSA drivers to support
O_EXCL exclusive access to the mixer control device.
- 15 October 2002 -- Added init.d/turbid ... Also made the
installation and calibration instructions more explicit.
- 14 October 2002 -- Added mkwav.c to generate .wav files,
thereby providing another way to calibrate things.
- 1 August 2002 -- Clarified relationship of information-theory
arguments to computational-feasibility arguments. Objectives and Non-Objectives
- 1 August 2002 -- Added discussion of how to construct hash
emit all hashcodes uniformly.
- 26 July 2002 -- Revised abstract to separate theoretical
principles from engineering features.
- 26 July 2002 -- Added error concealment section.
- 27 June 2002 -- Added
Pseudo-Random Symbol Generator.
- 24 June 2002 -- Added code to
- 4 June 2002 -- Added measurement of bandwidth (during calibration phase).
- 4 June 2002 -- Tidied up the references section a bit.
- 4 June 2002 -- Implemented the channel-mask feature.
- 1 June 2002 -- Added double buffering
- 29 May 2002 -- Initial version.
Copyright © 2002 jsd