Random numbers are an indispensable part of modern technology. More and more data travels encrypted worldwide but the encryption can be as strong as the quality of the random numbers, from which its keys are derived. However, generating good quality random numbers is not trivial because it requires a large amount of entropy.
In this work, we addressed the problem of designing a hardware based entropy source capable to generate large amount of good quality seed material for random number generators. Our solution is based on the SP800-90B recommendation published by the NIST agency. The before mentioned document gives requirements and suggestions on how an entropy source shall be built and how it shall operate in order to be safe to use even for enterprise solutions. Our program was designed to be able to handle multiple type of noise sources, shuffle their noise together, condition the noise to remove the bias and estimate the minimum entropy of the received dataset in order to serve only as much entropy as the client requires.
This paper presents our hardware entropy source solution, compliant with the above mentioned criteria. First, we talk about why it is not trivial to create random numbers, then we give an overview of the recommendations and requirements defined by the SP800-90B. Next, we go into details about our architecture: how it deviates from the recommendation, what components it consists of, and what their approximate tasks are. After this, we take a deeper look at the implementation side. We discuss how the components have been implemented, how we made the software fault-tolerant, what signals we use as the source of entropy, and we look at some telemetry about the throughput capabilities of the component. Thereafter, we describe what optimizations had been made and finally we glance at how our solution could be used in a datacenter environment.