Random Generation:
How Hard Can it Be?
Abstract
Random
numbers, used in applications such as password generators, web security, and
encryption, are generated by two types of generators: pseudorandom number
generators (PRNG) and truly random number generators (RNG). PRNGs, based on
algorithms that use a “seed” to start generating numbers, create a reproducible
sequence of numbers. Some RNGs extract numbers from “electronic” noise (eNoise)
and generate a non-reproducible sequence of numbers.
The
purpose of this project is to develop and test a method to extract random
numbers from eNoise, such as radio static, tape hiss, and Zener diode noise.
I
started by researching PRNGs that generate “random” numbers. One standard for
testing PRNGs/RNGs is the National Institute of Standards and Technology (NIST)
PRNG/RNG test suite which calculates P-values. Next, I ran the output of some PRNGs (e.g.
PHP and Javascript) through these tests in order to understand how PRNGs
perform and how these tests work. I then developed my own RNGs, applying PHP
code to the output of several eNoise sources. My code generates sequences of
l’s and 0’s from eNoise which are then subjected to these tests. Most of the
sources failed the tests. I then built a circuit, based on a Zener diode, that
generates eNoise, and the resulting sequence of I ‘s and Os passed the tests.
It
is difficult, but possible, to develop a RNG that will perform well on the NIST
tests. I will continue to experiment with and improve the methods I developed.