From TheBestLinks.com
(Redirected from
Random device)
In computing, a hardware random number generator is an apparatus which generates random numbers from a physical process. Such devices are typically based on microscopic phenomena such as thermal noise or the photoelectric effect or other quantum phenomena. These processes are, in principle, completely unpredictable. A hardware random number generator typically contains an amplifier to bring the output of the physical process into the macroscopic realm, and a transducer to convert the output into a digital signal.
There are also hardware random number generators based on macroscopic phenomena, such as cards, dice, and the roulette wheel.
Although dice are mostly used for gambling, the Victorian scientist Francis Galton described a way to use dice to generate random numbers for scientific purposes. Macroscopic phenomena are not completely unpredictable, in principle. However, whether the predictability can be exploited for practical purposes (e.g., winning at craps) remains a topic of debate.
Although unpredictable, hardware random number generators may be relatively slow, and they may produce a biased sequence (that is, some numbers are more common than others). Whether a hardware random number generator is suitable for a particular application depends on the application.
Contrast with pseudo-random number generators
Most random number generators are not hardware, but are algorithms, perhaps embedded in firmware (ie, in ROM), or even 'hardwired' as digital logic. These are actually pseudo-random number generators, and cannot produce truly random outputs on the deterministic computing systems we can currently build.
There are several different informal definitions of randomness, usually based on either a lack of discernible patterns, or their unpredictability. Although output from common, easily implemented (ie, practical) random number generators is widely used, these PRNGs only appear to lack a discernible pattern. They may pass assorted statistical tests probing for non-randomness (see Knuth, Art of Programming, vol. 2, for details of many such tests), they may have very large repeat cycles in their output, and they may be found satisfactory for some purposes.
However, pseudo-random number generators always have a pattern since the algorithm that generates them has a starting state, and when run on deterministic (ie, finite state) mechanisms, will always return (eventually) to that state. As noted above, this includes all the computer systems we can build at the present time. Given the original state of the generator, and its algorithm, a pseudo-random number generator is totally predictable, and given even partial knowledge of that state, they are insecure for many purposes, if not entirely predictable.
Uses of "random" numbers
'Unpredictable' random numbers were first investigated in the context of gambling, and many randomizing devices such as dice, shuffling playing cards, and roulette wheels, were first developed for use in gambling.
'Random' numbers are also used for serious purposes such as draft lotteries, where "fairness" is approximated by randomization, and in research where some modeling and statistical methods require them.
Science
Random numbers have uses in physics (such as noise resonance studies), engineering, and operations research. Many methods of statistical analysis, such as the bootstrap method, require random numbers. Monte Carlo methods in physics and computer science require random numbers to function.
Many experiments in physics rely on a statistical analysis of their output. For example, an experiment might collect X-rays from an astronomical source and then analyze the result for periodic signals. Since random noise can be expected to appear to have very faint periodic signals embedded in it, statistical analysis is required to determine the likelihood that a given signal actually represents a genuine signal. Testing such anlysis methods requires the generation of random numbers. If the statistical method is extremely sensitive to patterns in the data (such as those used to search for binary pulsars) then very large amounts of data with no recognizable pattern are needed.
In many scientific and engineering fields, computer simulations of real phenomena are essential to understanding. When the real phenomena are affected by unpredictable processes, such as radio noise or day-to-day weather, these processes must be simulated using random or pseudo-random numbers. The hidden structure of pseudo-random numbers raises doubts about the validity of the simulation, so if inexpensive random numbers are available, they are often preferable.
Cryptography
More recently, a ubiquitous use of unpredictable random numbers is in cryptography which underlies most of the attempts to provide security (eg, confidentiality) in Internet communications (eg, electronic commerce).
For example, if a user wants to use an encryption algorithm, they must be able to select a random number as the key. These numbers must be completely unguessable to anyone else. The only way to practically manufacture such numbers is to use random numbers. If a simple linear congruential pseudo-random number generator is used, then there will only be (approximately) four billion possible keys that can be generated (for 32 bit generators) before the generator repeats itself. A suitably motivated adversary could simply test them all (if there are so few per cycle) or using knowledge of the cyclic pattern, predict the next. Even if a more sophisticated random number generator is used, if its seed might be guessed (perhaps it is the time of day when the key was generated), and then keys can be predicted. (A vulnerability of this sort was famously discovered in an early release Netscape Navigator, forcing the authors to quickly find a source of 'more random' random numbers). Thus for this application, some truly random numbers are required.
Truely random numbers are absolutely required for the only provably unbreakable encryption algorithm — the one-time pad. Furthermore, those random sequences cannot be reused and must never become available to any attacker, which implies a continuously operable generator. See Venona for an example of what happens when these requirements are violated when using a one-time pad.
For cryptographic purposes, one normally assumes some upper limit on the work an adversary can do (usually this limit is (literally) astronomically sized). If one has a pseudo-random number generator whose output is 'sufficiently difficult' to predict for an unknown seed (such as a stream cipher), one can generate true random numbers to fill the seed and then use the pseudo-random numbers in cryptographic applications. Such random number generators are called cryptographic random number generators, and several have been implemented (for example, the linux /dev/urandom device, the Yarrow server, and AT&T Bell Labs 'truerand'). As with all cryptographic software, there are subtle issues beyond those discussed here, so care is certainly indicated in actual practice. In any case, it is often impossible to avoid the need for true (ie, hardware) random number generators.
Since a requirement in cryptography is unpredictability to an attacker, any published random sequence is a poor choice as are such sequences as the digits in an irrational number such as the φ or even in transcendental numbers such as π, or e. Put another way, in cryptography, random bit streams need to be not only random, but also secret and hence unpredictable. Public or third-party sources of random values, or random values computed from publicly observable phenomena (weather, sports game results, stock prices), are almost never cryptographically acceptable, though often tempting and too often used by the unwary. They permit attacks that should never be allowed.
Since most cryptographic applications require a few thousand bits at most, slow random number generators serve well—if they are actually random. This use of random generators is important; many informed observers believe every computer should have a way to generate true random numbers.
Early attempts to generate true random numbers
One early way of producing random numbers was by a variation of the same machines used to play keno or select lottery numbers. Basically, these mixed numbered ping-pong balls with blown air, and used some method to withdraw balls from the mixing chamber. This method gives reasonable results, but the random numbers generated by this means are very expensive. The method is inherently slow, and is unusable in most mechanized situations.
[early random number tables - to be written]
An important 20th century work was the RAND Corporation million number table. It was produced in the 1950s by an electronic simulation of a roulette wheel attached to a computer, the results of which were then carefully filtered and tested before being used to generate the table. The RAND table was a significant break-through in delivering random numbers because such a large and carefully prepared table had never before been available. It was useful for simulations and modeling. But, having been published, it is not usable as cryptographic keys, or as a seed in some pseudorandom number generator. However, since it has been published already, picking its values as the random constants for initializing algorithms would demonstrate that the constants were not selected for (in B. Schneier's words) "nefarious purpose(es)." Khufu and Khafre do this, for example (ref Applied Cryptography - B. Schneier).
Physical phenomena used for random number generation
Many modern random number generators attempt to use some form of quantum-mechanical noise, widely considered to be the gold standard for randomness (but not yet proved to be so).
- People have used a radiation source (as, for instance, from some kinds of commercial smoke-alarms) to drive Geiger counters attached to a PC. The Web site HotBits (http://www.fourmilab.ch/hotbits/) claims to deliver private random numbers on demand from just such a source.
- They have also measured atmospheric noise with a radio receiver attached to a PC, as at random.org (http://www.random.org). This site also claims to deliver private random numbers on demand.
- Optical quantum random number generators have been prototyped. A group at Silicon Graphics even used digital cameras to watch Lava lamps to generate random numbers. The most interesting problem was determining whether the chaotic shapes generated were random -- the team decided that they are in properly operating Lava lamps.
- A rather more convenient form of hardware random number generator uses either thermal or quantum-mechanical noise to provide a random voltage source. The favored source of quantum mechanical noise is Johnston noise, usually generated from a reverse-biased zener diode. The thermal noise from a resistor could also be amplified and used. No Lava Lamps or barometers required!
- On March 18, 2004, The University of Geneva launched a web application allowing anyone to download random numbers of quantum origin. (See External links section.)
In nearly all cases, the acquired noise signal is amplified, filtered, and then run through a high-speed voltage comparator to produce a logic signal that alternates states at random intervals.
In some simple designs, this logic value is converted to an RS-232 level signal and sent directly to a computer's serial port. Software then sees this series of logic values as bursts of "line noise" characters on an I/O port.
More sophisticated systems may format the bit values before passing them into a computer. Because of problems with bias (see below), ordinary analog to digital converters are rarely useful.
The bit-stream from such systems is prone to be biased, with 1s or 0s predominating. One method to correct this feeds back the generated bit stream, filtered by a low-pass filter, to adjust the bias of the generator. By the central limit theorem, the feedback loop will tend to be well-adjusted almost all the time. Ultra-high speed random number generators use this method. Even then, the numbers generated are usually somewhat biased.
A higher quality device might use two diodes and eliminate signals that are common to both—this eliminates interference from outside electric and magnetic fields. This is recommended for gambling devices, to prevent cheating by exploiting bias in the 'random bit' stream.
The Intel RNG (supplied in some of their board-level chipsets for PC-type computers and so perhaps the most widely available), uses most of the above tricks and adds another. The non-common-mode noise from two diodes controls a voltage-controlled oscillator, which clocks bits from a rapid oscillator (the new trick), which then go through a von Neumann type decorrelation step.
A related method uses two uncoupled oscillators, and counts events in one from the time-base of another. This method has been used on PCs to generate software/hardware 'true-random' random numbers. It requires a PC with two clock crystals, one for the real-time clock, and another for the processor. The program loops, counting the time that one of the bits of the counter of the real-time clock is a 1. The least significant bit of the loop-counter can be quite 'random'; depending on the implementational details (and on the current condition / operation of the hardware) can even be random 'enough' for some uses.
A variation of this method is implemented in hardware in some versions of the VIA C3 microprocessor, and software can access the random bits using special machine language instructions.
Attempts to clean up non-random bit-streams
Even after all these measures have been taken, the bit-stream should still be assumed to contain bias and correlation.
John von Neumann invented a simple algorithm to fix simple bias, and reduce correlation: it considers bits two at a time, taking one of three actions: when two successive bits are the same, they are not used as a random bit, a sequence of 1,0 becomes a 1, and a sequence of 0,1 becomes a zero. This eliminates simple bias, and is easy to implement as a computer program or in digital logic. It reduces the bit rate available by a factor of four, on average. This technique works no matter how the bits have been generated. It cannot assure randomness in its output however. What it can do is (with significant loss) transform a random stream with a frequency of 1's different from 50% into a stream with that frequency. This is useful with some physical sources.
One of the more popular methods of improving a near random bit stream is to exclusive-or the bit stream with the output of a high-quality cryptographically secure pseudo-random number generator such as Blum Blum Shub. This can cheaply improve decorrelation and digit bias.
A very simple method to improve a near random bit stream is to take two or more uncorrelated near random bit streams, and exclusive or them together. Let the probability of a bit stream producing a 1 be 1/2 + e, where -1/2 < e < 1/2. Then e is the bias of the bitstream. If two bit uncorrelated bit streams with bias e are exclusive-or-ed together, then the bias of the result will be 2e2. This may be repeated with more bitstreams. If e is small, then a very small bias is rapidly achieved. (See also Piling-up lemma.)
Another method to "improve" a random sequence is to perform data compression on it. High quality lossless data compression algorithms must increase the entropy (i.e. reduce the predictability) of the data, else no compression could occur. This means, roughly, that the compressed data is 'more' random. Because some compression schemes and some implementations of others produce predictable output (eg, in the dictionary used for Huffman coding), using a compression algorithms to produce random bits should be very carefully thought out. Although mathematically robust in theory, many engineering types find this approach inelegant and wasteful.
Some designs apply cryptographic hash functions such as MD5, SHA-1, or RIPEMD-160 or even a CRC function to all or part of the bit stream, and then use the ouptut as the random bit stream. This is attractive, partly because it is relatively fast compared to some other methods, but depends entirely on qualities in the hash output for which there is little or no theoretical basis. In addition, recent (2004) research results have demonstrated reduced effort attacks against many of the most widely used hash algorithms.
Other designs use 'true random bits' as the key for a high quality block cipher algorithm, taking the encrypted output as the random bit stream. Care must be used in these cases to select an appropriate block mode, however.
When a high-speed source of lower-quallity random digits is needed, sometimes the true random source is used to generate the seed for a pseudo random number generator. The PRNG is run for a fixed number of digits, while the hardware generating device produces a new seed.
Estimating the size of the entropy pool
to be written
Software implementation of random number generators from observed events
Software engineers without true random number generators often try to develop them by measuring physical events available to the software. An exemplar is measuring the time between user key-strokes, and then taking the least significant bit (or two or three) of the count as a random digit. A similar approach has been applied by measuring task-scheduling, network hits, disk-head seek times and other internal events.
The method is quite risky when it uses computer-controlled events because a clever, malicious programmer might be able to predict a cryptographic key by controlling the external events. Several gambling frauds have been uncovered which rely on manipulating (normally hidden) events internal to the operation of computers or networks. It is also risky because the supposed user-generated event (eg, keystrokes) can be spoofed, allowing an attacker to control the 'random values' used by the cryptography.
to be written -- mention:
Problems
It is very easy to mis-construct devices that generate random numbers. Also, they break silently, often producing decreasingly random numbers as they degrade. An example might be the rapidly decreasing radioactivity of the smoke alarms mentioned earlier. As the radioactive intensity decreases, its sensor will be required to compensate, not an easily accomplished task. Failure modes in such devices are plentiful and are neither easy nor quick nor cheap to detect.
Because they are quite fragile, and fail silently, statistical tests on their output should be performed continuously. Many such devices include some such tests into the software that reads the device. Others, of course, don't.
Checking the performance of hardware random number generators
to be written
- include a reference to Gutmann's checking analysis in the doc for cryptlib
See also
External links
Random number services on the net
- HotBits (http://www.fourmilab.ch/hotbits/) claims to provide private radioactively-produced random numbers. The author (John Walker) admits to "stockpiling" them, so in principle they could be intercepted if the server were penetrated.
- random.org (http://www.random.org) claims to deliver private random numbers generated from atmospheric radio noise.
Manufacturers of random number generator devices
- ComScire (http://www.comscire.com/) (Popular with military cryptographers, it's said, and very fast)
- Random HG324 (http://random.com.hr/) (Precise and very fast)
- Protego (http://www.protego.se/) (Inexpensive, slow, but real random numbers.)
- Intel RNG (http://www.intel.com/design/software/drivers/platform/security.htm)
- VIA RNG (http://www.via.com.tw/en/viac3/c3.jsp) (Included on the CPU itself)
- LavaRnd (http://www.lavarnd.org/) (Utilises readily available webcams to provide cryptographically strong random numbers)
References
- Francis Galton. "Dice for statistical experiments", Nature 42:13-14, 1890. (Facsimile at: [1] (http://www.mugu.com/galton/statistician.html))
Related links
Top visited
0 of
0 links
[no links posted yet]
>> place link >>
Discussion
Last posted
0 of
0 messages
[no messages posted yet]
>> post message >>
Watch
You can
add this article to your own "watchlist" and receive e-mail notification about all changes in this page.