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.