HOW DOES A COMPUTER GENERATE RANDOM NUMBERS???
A random number generator (RNG) is a computational or physical device designed to generate a
sequence of numbers or
symbols that lack any pattern, i.e. appear random.
Even given a source of plausible random numbers (perhaps from a quantum mechanically based hardware generator), obtaining numbers which are completely unbiased takes care. In addition, behavior of these generators often changes with temperature, power supply voltage, the age of the device, or other outside interference. And a software bug in a pseudo-random number routine, or a hardware bug in the hardware it runs on, may be similarly difficult to detect.
The many applications
of randomness have led
to the development of several different methods for generating random data. Many of these have existed since
ancient times, including dice, coin flipping, the shuffling of playing cards, the use
of yarrow stalks
(by divination) in the I Ching, and
many other techniques. Because of the mechanical nature of these techniques,
generating large numbers of sufficiently random numbers (important in
statistics) required a lot of work and/or time. Thus, results would sometimes
be collected and distributed as random number tables.
Nowadays, after the advent of computational random number generators, a growing
number of government-run lotteries, and
lottery games, are using RNGs instead of more traditional drawing methods. RNGs
are also used today to determine the odds of modern slot machines.
Several computational methods for
random number generation exist. Many fall short of the goal of true randomness
— though they may meet, with varying success, some of the statistical tests for
randomness intended
to measure how unpredictable their results are (that is, to what degree their
patterns are discernible). However, carefully designed cryptographically secure
computationally based methods of generating random numbers do exist, such as
those based on the Yarrow algorithm and the Fortuna (PRNG) and others.
PRACTICALL APLICATION AND USES
Random number generators have applications
in gambling, statistical sampling, computer simulation, cryptography, completely
randomized design, and other areas where producing an unpredictable result is
desirable.
Note that, in general, where
unpredictability is paramount – such as in security applications – hardware generators are
generally preferred (where feasible) over pseudo-random algorithms.
Random number generators are very
useful in developing Monte Carlo-method simulations, as debugging is facilitated by the ability to run the same
sequence of random numbers again by starting from the same random seed. They
are also used in cryptography – so long as the seed is secret. Sender and receiver can
generate the same set of numbers automatically to use as keys.
The generation of pseudo-random numbers is an important and common task in computer
programming. While cryptography and certain numerical algorithms require a very
high degree of apparent randomness, many other operations only
need a modest amount of unpredictability. Some simple examples might be
presenting a user with a "Random Quote of the Day", or determining
which way a computer-controlled adversary might move in a computer game. Weaker
forms of randomness are used in hash algorithms and in creating amortized searching and sorting algorithms.
Some applications which appear at
first sight to be suitable for randomization are in fact not quite so simple.
For instance, a system that "randomly" selects music tracks for a
background music system must only appear random, and may even have ways to
control the selection of music: a true random system would have no restriction
on the same item appearing two or three times in succession.
‘’TRUE ‘’ RANDOM NUMBERS VS
PSEUDO-RANDOM NUMBERS
There are two principal methods
used to generate random numbers. The first method measures some physical
phenomenon that is expected to be random and then compensates for possible
biases in the measurement process. Example sources include measuring
atmospheric noise, thermal noise, and other external electromagnetic and
quantum phenomena. For example, cosmic background radiation or radioactive
decay as measured over short timescales represent sources of natural entropy.
The speed at which entropy can be
harvested from natural sources is dependent on the underlying physical
phenomena being measured. Thus, sources of naturally occurring 'true' entropy
are said to be blocking i.e. rate-limited until enough entropy is
harvested to meet demand. On some Unix-like systems, including Linux
distributions, FreeBSD, and NetBSD, the pseudo device file /dev/random will block until sufficient entropy is harvested from
the environment.[2][3][4] Due to this blocking behavior large bulk
reads from/dev/random, such as
filling a hard disk with random bits, can often be slow.
The second method uses
computational algorithms that can produce long sequences of apparently
random results, which are in fact completely determined by a shorter initial
value, known as a seed or key. The
latter type are often called pseudorandom
number generators. These types of generators do not typically rely on sources of
naturally occurring entropy, though they may be periodically seeded by natural
sources, they are non-blocking i.e. not rate-limited by an external event.
Mathematicians can also distinguish between pseudorandom numbers and
quasirandom numbers (from a low-discrepancy
sequence).
A "random number
generator" based solely on deterministic computation cannot be regarded as
a "true" random number generator in the purest sense of the word,
since their output is inherently predictable if all seed values are known. In
practice however they are sufficient for most tasks. Carefully designed and
implemented pseudo-random number generators can even be certified for
security-critical cryptographic purposes, as is the case with the yarrow algorithm and fortuna (PRNG).
(The former being the basis of the
/dev/random
source of entropy on FreeBSD, AIX, Mac OS X, NetBSD and others. OpenBSD also uses a pseudo-random number
algorithm based on ChaCha20 known asarc4random
GENERATION METHODS
The earliest methods for generating random
numbers — dice, coin flipping, roulette wheels — are still used today, mainly in games and
gambling as they tend to be too slow for most applications in statistics and
cryptography.
A physical random number
generator can be based on an essentially random atomic or subatomic physical
phenomenon whose unpredictability can be traced to the laws ofquantum mechanics. Sources
of entropy include radioactive decay, thermal noise, shot noise,
avalanche noise in Zener diodes, clock drift, the
timing of actual movements of ahard disk read/write head, and radio noise.
However, physical phenomena and tools used to measure them generally feature
asymmetries and systematic biases that make their outcomes not uniformly random.
A randomness extractor, such as
a cryptographic
hash function, can be used to approach a uniform distribution of bits from a
non-uniformly random source, though at a lower bit rate.
Various imaginative ways of
collecting this entropic information have been devised. One technique is to run
a hash function against a frame of a video stream from an unpredictable source. Lavarand used this technique with images of a
number of lava lamps. HotBits measures
radioactive decay with Geiger–Muller tubes,[6] while Random.orguses
variations in the amplitude of atmospheric noise recorded with a normal radio.
Another common entropy source is
the behavior of human users of the system. While people are not considered good
randomness generators upon request, they generate random behavior quite well in
the context of playing mixed strategy games.[7] Some security-related computer software
requires the user to make a lengthy series of mouse movements or keyboard
inputs to create sufficient entropy needed to generate random keys or to initialize pseudorandom number
generators.
COMPUTATIONAL METHODS
Pseudorandom number generators (PRNGs) are algorithms that can automatically create long runs
of numbers with good random properties but eventually the sequence repeats (or
the memory usage grows without bound) The series of values generated by such
algorithms is generally determined by a fixed number called a seed. One
of the most common PRNG is the linear congruential generator, which uses the recurrence
to generate numbers, where a, b and m are large integers, and is the next
in X as a series of pseudo-random numbers.
The maximum number of numbers the formula can produce is the modulus, m. To avoid certain non-random
properties of a single linear congruential generator, several such random
number generators with slightly different values of the multiplier
coefficient a can be used in parallel, with a
"master" random number generator that selects from among the several
different generators.
A simple pen-and-paper method for generating random numbers is
the so-called middle square method suggested by John
von Neumann. While simple to
implement, its output is of poor quality.
Most computer programming languages include functions or library
routines that provide random number generators. They are often designed to
provide a random byte or word, or a floating
point number uniformly distributed between 0 and 1.
The quality i.e. randomness of such library functions varies
widely from completely predictable output, to cryptographically secure. The
default random number generator in many languages, including Python, Ruby, R,
IDL and PHP is based on the Mersenne Twister algorithm
and is not sufficient for cryptography purposes, as is
explicitly stated in the language documentation. Such library functions often
have poor statistical properties and some will repeat patterns after only tens
of thousands of trials. They are often initialized using a computer's real
time clock as the seed,
since such a clock generally measures in milliseconds, far beyond the
person's precision. These functions may provide enough randomness for certain
tasks (for example video games) but are unsuitable where high-quality
randomness is required, such as in cryptography applications, statistics or
numerical analysis.
Much higher quality random number sources are available on most
operating systems; for example /dev/random on various BSD flavors, Linux, Mac OS X,
IRIX, and Solaris, orCryptGenRandom for Microsoft Windows. Most programming
languages, including those mentioned above, provide a means to access these
higher quality sources.
An example of a simple pseudo-random number generator is
the multiply-with-carry method invented by George
Marsaglia. It is
computationally fast and has good (albeit not cryptographically strong)
randomness properties
GENERATION FROM A PROBABILITY DISTRIBUTION
There are a
couple of methods to generate a random number based on a probability density function. These methods involve transforming a uniform random number
in some way. Because of this, these methods work equally well in generating
both pseudo-random and true random numbers. One method, called the inversion method, involves integrating up to an area greater than or equal to
the random number (which should be generated between 0 and 1 for proper
distributions). A second method, called theacceptance-rejection method, involves choosing an x and y value and testing whether the
function of x is greater than the y value. If it is, the x value is accepted.
Otherwise, the x value is rejected and the algorithm tries again.
BY HUMANS
Random number
generation may also be performed by humans, in the form of collecting various
inputs from end users and using them as a
randomization source. However, most studies find that human subjects have some
degree of nonrandomness when attempting to produce a random sequence of e.g.
digits or letters. They may alternate too much between choices when compared to
a good random generator; thus,
this approach is not widely used.
POST-PROCESSING AND
STATISTICAL CHECKS
Even given a source of plausible random numbers (perhaps from a quantum mechanically based hardware generator), obtaining numbers which are completely unbiased takes care. In addition, behavior of these generators often changes with temperature, power supply voltage, the age of the device, or other outside interference. And a software bug in a pseudo-random number routine, or a hardware bug in the hardware it runs on, may be similarly difficult to detect.
Generated random numbers are
sometimes subjected to statistical tests before use to ensure that the
underlying source is still working, and then post-processed to improve their
statistical properties. An example would be the TRNG9803 hardware random number generator, which uses
an entropy measurement as a hardware test, and then post-processes the random
sequence with a shift register stream cipher. It is generally hard to use
statistical tests to validate the generated random numbers. Wang and Nicol proposed a distance-based
statistical testing technique that is used to identify the weaknesses of
several random generators.
Comments
Post a Comment